1616import org .w3c .css .util .ApplContext ;
1717import org .w3c .css .util .InvalidParamException ;
1818
19+ import java .math .BigDecimal ;
20+
1921public class RGBA extends RGB {
2022 static final String functionname = "rgba" ;
2123
@@ -24,10 +26,8 @@ public class RGBA extends RGB {
2426
2527 CssValue va ;
2628
27- public final void setAlpha (ApplContext ac , CssValue val )
29+ public static final CssValue filterAlpha (ApplContext ac , CssValue val )
2830 throws InvalidParamException {
29- CssValue nv = val ;
30- output = null ;
3131 if (val .getRawType () == CssTypes .CSS_CALC ) {
3232 // TODO add warning about uncheckability
3333 // might need to extend...
@@ -38,15 +38,15 @@ public final void setAlpha(ApplContext ac, CssValue val)
3838 ac .getFrame ().addWarning ("out-of-range" , val .toString ());
3939 CssNumber nb = new CssNumber ();
4040 nb .setIntValue (0 );
41- nv = nb ;
41+ return nb ;
4242 }
4343 if (val .getRawType () == CssTypes .CSS_NUMBER ) {
44- float p = ((CssNumber ) val ).getValue () ;
45- if (p > 1. ) {
44+ BigDecimal pp = ((CssNumber ) val ).value ;
45+ if (pp . compareTo ( BigDecimal . ONE ) >= 0 ) {
4646 ac .getFrame ().addWarning ("out-of-range" , val .toString ());
4747 CssNumber nb = new CssNumber ();
4848 nb .setIntValue (1 );
49- nv = nb ;
49+ return nb ;
5050 }
5151 }
5252 } else if (val .getType () == CssTypes .CSS_PERCENTAGE ) {
@@ -56,20 +56,25 @@ public final void setAlpha(ApplContext ac, CssValue val)
5656 ac .getFrame ().addWarning ("out-of-range" , val .toString ());
5757 CssNumber nb = new CssNumber ();
5858 nb .setIntValue (0 );
59- nv = nb ;
59+ return nb ;
6060 }
6161 if (val .getRawType () == CssTypes .CSS_PERCENTAGE ) {
6262 float p = ((CssPercentage ) val ).floatValue ();
6363 if (p > 100. ) {
6464 ac .getFrame ().addWarning ("out-of-range" , val .toString ());
65- nv = new CssPercentage (100 );
65+ return new CssPercentage (100 );
6666 }
6767 }
6868 }
6969 }
70- va = nv ;
70+ return val ;
7171 }
7272
73+ public final void setAlpha (ApplContext ac , CssValue val )
74+ throws InvalidParamException {
75+ output = null ;
76+ va = filterAlpha (ac , val );
77+ }
7378
7479 public boolean equals (RGBA other ) {
7580 if (other != null ) {
0 commit comments