@@ -236,37 +236,45 @@ namespace Sass {
236
236
237
237
inline double color_num (Number* n) {
238
238
if (n->unit () == " %" ) {
239
- return std::min (std::max (n->value (), 0.0 ), 100 .0 ) * 2.55 ;
239
+ return std::min (std::max (n->value () * 255 / 100.0 , 0.0 ), 255 .0 );
240
240
} else {
241
241
return std::min (std::max (n->value (), 0.0 ), 255.0 );
242
242
}
243
243
}
244
244
245
+ inline double alpha_num (Number* n) {
246
+ if (n->unit () == " %" ) {
247
+ return std::min (std::max (n->value (), 0.0 ), 100.0 );
248
+ } else {
249
+ return std::min (std::max (n->value (), 0.0 ), 1.0 );
250
+ }
251
+ }
252
+
245
253
Signature rgb_sig = " rgb($red, $green, $blue)" ;
246
254
BUILT_IN (rgb)
247
255
{
248
256
return new (ctx.mem ) Color (pstate,
249
- color_num (ARGR (" $red" , Number, 0 , 255 )),
250
- color_num (ARGR (" $green" , Number, 0 , 255 )),
251
- color_num (ARGR (" $blue" , Number, 0 , 255 )));
257
+ color_num (ARG (" $red" , Number)),
258
+ color_num (ARG (" $green" , Number)),
259
+ color_num (ARG (" $blue" , Number)));
252
260
}
253
261
254
262
Signature rgba_4_sig = " rgba($red, $green, $blue, $alpha)" ;
255
263
BUILT_IN (rgba_4)
256
264
{
257
265
return new (ctx.mem ) Color (pstate,
258
- color_num (ARGR (" $red" , Number, 0 , 255 )),
259
- color_num (ARGR (" $green" , Number, 0 , 255 )),
260
- color_num (ARGR (" $blue" , Number, 0 , 255 )),
261
- ARGR ( " $alpha" , Number, 0 , 1 )-> value ( ));
266
+ color_num (ARG (" $red" , Number)),
267
+ color_num (ARG (" $green" , Number)),
268
+ color_num (ARG (" $blue" , Number)),
269
+ alpha_num ( ARG ( " $alpha" , Number) ));
262
270
}
263
271
264
272
Signature rgba_2_sig = " rgba($color, $alpha)" ;
265
273
BUILT_IN (rgba_2)
266
274
{
267
275
Color* c_arg = ARG (" $color" , Color);
268
276
Color* new_c = new (ctx.mem ) Color (*c_arg);
269
- new_c->a (ARGR ( " $alpha" , Number, 0 , 1 )-> value ( ));
277
+ new_c->a (alpha_num ( ARG ( " $alpha" , Number) ));
270
278
new_c->disp (" " );
271
279
return new_c;
272
280
}
@@ -382,8 +390,8 @@ namespace Sass {
382
390
BUILT_IN (hsl)
383
391
{
384
392
return hsla_impl (ARG (" $hue" , Number)->value (),
385
- ARGR (" $saturation" , Number, 0 , 100 )->value (),
386
- ARGR (" $lightness" , Number, 0 , 100 )->value (),
393
+ ARG (" $saturation" , Number)->value (),
394
+ ARG (" $lightness" , Number )->value (),
387
395
1.0 ,
388
396
ctx,
389
397
pstate);
@@ -393,9 +401,9 @@ namespace Sass {
393
401
BUILT_IN (hsla)
394
402
{
395
403
return hsla_impl (ARG (" $hue" , Number)->value (),
396
- ARGR (" $saturation" , Number, 0 , 100 )->value (),
397
- ARGR (" $lightness" , Number, 0 , 100 )->value (),
398
- ARGR (" $alpha" , Number, 0 , 1 )->value (),
404
+ ARG (" $saturation" , Number)->value (),
405
+ ARG (" $lightness" , Number )->value (),
406
+ ARG (" $alpha" , Number )->value (),
399
407
ctx,
400
408
pstate);
401
409
}
@@ -680,18 +688,25 @@ namespace Sass {
680
688
error (" cannot specify both RGB and HSL values for `adjust-color`" , pstate);
681
689
}
682
690
if (rgb) {
691
+ double rr = r ? ARGR (" $red" , Number, -255 , 255 )->value () : 0 ;
692
+ double gg = g ? ARGR (" $green" , Number, -255 , 255 )->value () : 0 ;
693
+ double bb = b ? ARGR (" $blue" , Number, -255 , 255 )->value () : 0 ;
694
+ double aa = a ? ARGR (" $alpha" , Number, -1 , 1 )->value () : 0 ;
683
695
return new (ctx.mem ) Color (pstate,
684
- color->r () + (r ? r-> value () : 0 ) ,
685
- color->g () + (g ? g-> value () : 0 ) ,
686
- color->b () + (b ? b-> value () : 0 ) ,
687
- color->a () + (a ? a-> value () : 0 ) );
696
+ color->r () + rr ,
697
+ color->g () + gg ,
698
+ color->b () + bb ,
699
+ color->a () + aa );
688
700
}
689
701
if (hsl) {
690
702
HSL hsl_struct = rgb_to_hsl (color->r (), color->g (), color->b ());
703
+ double ss = s ? ARGR (" $saturation" , Number, -100 , 100 )->value () : 0 ;
704
+ double ll = l ? ARGR (" $lightness" , Number, -100 , 100 )->value () : 0 ;
705
+ double aa = a ? ARGR (" $alpha" , Number, -1 , 1 )->value () : 0 ;
691
706
return hsla_impl (hsl_struct.h + (h ? h->value () : 0 ),
692
- hsl_struct.s + (s ? s-> value () : 0 ) ,
693
- hsl_struct.l + (l ? l-> value () : 0 ) ,
694
- color->a () + (a ? a-> value () : 0 ) ,
707
+ hsl_struct.s + ss ,
708
+ hsl_struct.l + ll ,
709
+ color->a () + aa ,
695
710
ctx,
696
711
pstate);
697
712
}
0 commit comments