CSS-Sass
view release on metacpan or search on metacpan
libsass/functions.cpp view on Meta::CPAN
hsl_color.l,
rgb_color->a(),
ctx,
pstate);
}
Signature invert_sig = "invert($color)";
BUILT_IN(invert)
{
// CSS3 filter function overload: pass literal through directly
Number* amount = dynamic_cast<Number*>(env["$color"]);
if (amount) {
To_String to_string(&ctx);
return new (ctx.mem) String_Constant(pstate, "invert(" + amount->perform(&to_string) + ")");
}
Color* rgb_color = ARG("$color", Color);
return new (ctx.mem) Color(pstate,
255 - rgb_color->r(),
255 - rgb_color->g(),
255 - rgb_color->b(),
rgb_color->a());
}
////////////////////
// OPACITY FUNCTIONS
////////////////////
Signature alpha_sig = "alpha($color)";
Signature opacity_sig = "opacity($color)";
BUILT_IN(alpha)
{
String_Constant* ie_kwd = dynamic_cast<String_Constant*>(env["$color"]);
if (ie_kwd) {
return new (ctx.mem) String_Constant(pstate, "alpha(" + ie_kwd->value() + ")");
}
// CSS3 filter function overload: pass literal through directly
Number* amount = dynamic_cast<Number*>(env["$color"]);
if (amount) {
To_String to_string(&ctx);
return new (ctx.mem) String_Constant(pstate, "opacity(" + amount->perform(&to_string) + ")");
}
return new (ctx.mem) Number(pstate, ARG("$color", Color)->a());
}
Signature opacify_sig = "opacify($color, $amount)";
Signature fade_in_sig = "fade-in($color, $amount)";
BUILT_IN(opacify)
{
Color* color = ARG("$color", Color);
double amount = ARGR("$amount", Number, 0, 1)->value();
double alpha = std::min(color->a() + amount, 1.0);
return new (ctx.mem) Color(pstate,
color->r(),
color->g(),
color->b(),
alpha);
}
Signature transparentize_sig = "transparentize($color, $amount)";
Signature fade_out_sig = "fade-out($color, $amount)";
BUILT_IN(transparentize)
{
Color* color = ARG("$color", Color);
double amount = ARGR("$amount", Number, 0, 1)->value();
double alpha = std::max(color->a() - amount, 0.0);
return new (ctx.mem) Color(pstate,
color->r(),
color->g(),
color->b(),
alpha);
}
////////////////////////
// OTHER COLOR FUNCTIONS
////////////////////////
Signature adjust_color_sig = "adjust-color($color, $red: false, $green: false, $blue: false, $hue: false, $saturation: false, $lightness: false, $alpha: false)";
BUILT_IN(adjust_color)
{
Color* color = ARG("$color", Color);
Number* r = dynamic_cast<Number*>(env["$red"]);
Number* g = dynamic_cast<Number*>(env["$green"]);
Number* b = dynamic_cast<Number*>(env["$blue"]);
Number* h = dynamic_cast<Number*>(env["$hue"]);
Number* s = dynamic_cast<Number*>(env["$saturation"]);
Number* l = dynamic_cast<Number*>(env["$lightness"]);
Number* a = dynamic_cast<Number*>(env["$alpha"]);
bool rgb = r || g || b;
bool hsl = h || s || l;
if (rgb && hsl) {
error("cannot specify both RGB and HSL values for `adjust-color`", pstate);
}
if (rgb) {
return new (ctx.mem) Color(pstate,
color->r() + (r ? r->value() : 0),
color->g() + (g ? g->value() : 0),
color->b() + (b ? b->value() : 0),
color->a() + (a ? a->value() : 0));
}
if (hsl) {
HSL hsl_struct = rgb_to_hsl(color->r(), color->g(), color->b());
return hsla_impl(hsl_struct.h + (h ? h->value() : 0),
hsl_struct.s + (s ? s->value() : 0),
hsl_struct.l + (l ? l->value() : 0),
color->a() + (a ? a->value() : 0),
ctx,
pstate);
}
if (a) {
return new (ctx.mem) Color(pstate,
color->r(),
color->g(),
color->b(),
color->a() + (a ? a->value() : 0));
}
error("not enough arguments for `adjust-color`", pstate);
// unreachable
return color;
}
( run in 1.979 second using v1.01-cache-2.11-cpan-39bf76dae61 )