Skip to content

Commit e71dcc7

Browse files
committed
1 parent 85dcde9 commit e71dcc7

2 files changed

Lines changed: 47 additions & 18 deletions

File tree

org/w3c/css/properties/css3/CssOpacity.java

Lines changed: 43 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,17 @@
99

1010
import org.w3c.css.util.ApplContext;
1111
import org.w3c.css.util.InvalidParamException;
12-
import org.w3c.css.util.Util;
12+
import org.w3c.css.values.CssCheckableValue;
1313
import org.w3c.css.values.CssExpression;
1414
import org.w3c.css.values.CssNumber;
15+
import org.w3c.css.values.CssPercentage;
1516
import org.w3c.css.values.CssTypes;
1617
import org.w3c.css.values.CssValue;
1718

19+
import java.math.BigDecimal;
20+
1821
/**
19-
* @spec http://www.w3.org/TR/2011/REC-css3-color-20110607/#opacity
22+
* @spec https://www.w3.org/TR/2016/WD-css-color-4-20160705/#propdef-opacity
2023
*/
2124

2225
public class CssOpacity extends org.w3c.css.properties.css.CssOpacity {
@@ -42,15 +45,50 @@ public CssOpacity(ApplContext ac, CssExpression expression, boolean check)
4245
switch (val.getType()) {
4346
case CssTypes.CSS_NUMBER:
4447
if (val.getRawType() == CssTypes.CSS_NUMBER) {
45-
// this will generate a warning if necessary
46-
CssNumber number = val.getNumber();
47-
number.setFloatValue(clampedValue(ac, number.getValue()));
48+
CssCheckableValue v = val.getCheckableValue();
49+
if (!v.isPositive()) {
50+
ac.getFrame().addWarning("out-of-range", val.toString());
51+
CssNumber nb = new CssNumber();
52+
nb.setIntValue(0);
53+
value = nb;
54+
break;
55+
}
56+
if (val.getRawType() == CssTypes.CSS_NUMBER) {
57+
BigDecimal pp = ((CssNumber) val).getBigDecimalValue();
58+
if (pp.compareTo(BigDecimal.ONE) > 0) {
59+
ac.getFrame().addWarning("out-of-range", val.toString());
60+
CssNumber nb = new CssNumber();
61+
nb.setIntValue(1);
62+
value = nb;
63+
break;
64+
}
65+
}
4866
} else {
4967
// we can only check if >= 0 for now
5068
val.getCheckableValue().warnPositiveness(ac, this);
5169
}
5270
value = val;
5371
break;
72+
case CssTypes.CSS_PERCENTAGE:
73+
// This starts with CSS Color 4
74+
CssCheckableValue v = val.getCheckableValue();
75+
if (!v.isPositive()) {
76+
ac.getFrame().addWarning("out-of-range", val.toString());
77+
CssNumber nb = new CssNumber();
78+
nb.setIntValue(0);
79+
value = nb;
80+
break;
81+
}
82+
if (val.getRawType() == CssTypes.CSS_PERCENTAGE) {
83+
float p = ((CssPercentage) val).floatValue();
84+
if (p > 100.) {
85+
ac.getFrame().addWarning("out-of-range", val.toString());
86+
value = new CssPercentage(100);
87+
break;
88+
}
89+
}
90+
value = val;
91+
break;
5492
case CssTypes.CSS_IDENT:
5593
if (inherit.equals(val)) {
5694
value = inherit;
@@ -69,19 +107,6 @@ public CssOpacity(ApplContext ac, CssExpression expression)
69107
this(ac, expression, false);
70108
}
71109

72-
/**
73-
* Brings all values back between 0 and 1
74-
*
75-
* @param opacity The value to be modified if necessary
76-
*/
77-
private float clampedValue(ApplContext ac, float opacity) {
78-
if (opacity < 0.f || opacity > 1.f) {
79-
ac.getFrame().addWarning("out-of-range", Util.displayFloat(opacity));
80-
return ((opacity < 0.f) ? 0.f : 1.f);
81-
}
82-
return opacity;
83-
}
84-
85110
/**
86111
* Is the value of this property a default value It is used by all macro for
87112
* the function <code>print</code>

org/w3c/css/values/CssNumber.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,10 @@ public float getValue() {
109109
return value.floatValue();
110110
}
111111

112+
public BigDecimal getBigDecimalValue() {
113+
return value;
114+
}
115+
112116
public int getInt() throws InvalidParamException {
113117
if (isInt) {
114118
try {

0 commit comments

Comments
 (0)