mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 11:25:00 +00:00
Implement dppx units [css3-images] for resolution media query. (Bug 741644) r=bzbarsky
This commit is contained in:
parent
c51fdbf971
commit
88843c851b
@ -1841,6 +1841,8 @@ CSSParserImpl::ParseMediaQueryExpression(nsMediaQuery* aQuery)
|
||||
NS_ASSERTION(!mToken.mIdent.IsEmpty(), "unit lied");
|
||||
if (mToken.mIdent.LowerCaseEqualsLiteral("dpi")) {
|
||||
expr->mValue.SetFloatValue(mToken.mNumber, eCSSUnit_Inch);
|
||||
} else if (mToken.mIdent.LowerCaseEqualsLiteral("dppx")) {
|
||||
expr->mValue.SetFloatValue(mToken.mNumber, eCSSUnit_Pixel);
|
||||
} else if (mToken.mIdent.LowerCaseEqualsLiteral("dpcm")) {
|
||||
expr->mValue.SetFloatValue(mToken.mNumber, eCSSUnit_Centimeter);
|
||||
} else {
|
||||
|
@ -250,17 +250,25 @@ nsMediaExpression::Matches(nsPresContext *aPresContext,
|
||||
case nsMediaFeature::eResolution:
|
||||
{
|
||||
NS_ASSERTION(actual.GetUnit() == eCSSUnit_Inch ||
|
||||
actual.GetUnit() == eCSSUnit_Pixel ||
|
||||
actual.GetUnit() == eCSSUnit_Centimeter,
|
||||
"bad actual value");
|
||||
NS_ASSERTION(required.GetUnit() == eCSSUnit_Inch ||
|
||||
required.GetUnit() == eCSSUnit_Pixel ||
|
||||
required.GetUnit() == eCSSUnit_Centimeter,
|
||||
"bad required value");
|
||||
float actualDPI = actual.GetFloatValue();
|
||||
if (actual.GetUnit() == eCSSUnit_Centimeter)
|
||||
if (actual.GetUnit() == eCSSUnit_Centimeter) {
|
||||
actualDPI = actualDPI * 2.54f;
|
||||
} else if (actual.GetUnit() == eCSSUnit_Pixel) {
|
||||
actualDPI = actualDPI * 96.0f;
|
||||
}
|
||||
float requiredDPI = required.GetFloatValue();
|
||||
if (required.GetUnit() == eCSSUnit_Centimeter)
|
||||
if (required.GetUnit() == eCSSUnit_Centimeter) {
|
||||
requiredDPI = requiredDPI * 2.54f;
|
||||
} else if (required.GetUnit() == eCSSUnit_Pixel) {
|
||||
requiredDPI = requiredDPI * 96.0f;
|
||||
}
|
||||
cmp = DoCompare(actualDPI, requiredDPI);
|
||||
}
|
||||
break;
|
||||
@ -432,6 +440,8 @@ nsMediaQuery::AppendToString(nsAString& aString) const
|
||||
aString.AppendFloat(expr.mValue.GetFloatValue());
|
||||
if (expr.mValue.GetUnit() == eCSSUnit_Inch) {
|
||||
aString.AppendLiteral("dpi");
|
||||
} else if (expr.mValue.GetUnit() == eCSSUnit_Pixel) {
|
||||
aString.AppendLiteral("dppx");
|
||||
} else {
|
||||
NS_ASSERTION(expr.mValue.GetUnit() == eCSSUnit_Centimeter,
|
||||
"bad unit");
|
||||
|
@ -34,7 +34,8 @@ struct nsMediaFeature {
|
||||
eFloat, // values are eCSSUnit_Number
|
||||
eBoolInteger,// values are eCSSUnit_Integer (0, -0, or 1 only)
|
||||
eIntRatio, // values are eCSSUnit_Array of two eCSSUnit_Integer
|
||||
eResolution, // values are in eCSSUnit_Inch (for dpi) or
|
||||
eResolution, // values are in eCSSUnit_Inch (for dpi),
|
||||
// eCSSUnit_Pixel (for dppx), or
|
||||
// eCSSUnit_Centimeter (for dpcm)
|
||||
eEnumerated, // values are eCSSUnit_Enumerated (uses keyword table)
|
||||
eIdent // values are eCSSUnit_Ident
|
||||
|
@ -464,8 +464,12 @@ function run() {
|
||||
expression_should_be_parseable(feature + ": 3.0dpi");
|
||||
expression_should_be_parseable(feature + ": 3.4dpi");
|
||||
expression_should_be_parseable(feature + "\t: 120dpcm");
|
||||
expression_should_be_parseable(feature + ": 1dppx");
|
||||
expression_should_be_parseable(feature + ": 1.5dppx");
|
||||
expression_should_be_parseable(feature + ": 2.0dppx");
|
||||
expression_should_not_be_parseable(feature + ": 0dpi");
|
||||
expression_should_not_be_parseable(feature + ": -3dpi");
|
||||
expression_should_not_be_parseable(feature + ": 0dppx");
|
||||
}
|
||||
|
||||
// Find the resolution using max-resolution
|
||||
@ -485,6 +489,7 @@ function run() {
|
||||
// It's exact!
|
||||
is(resolution % 96, 0, "resolution should be a multiple of 96dpi");
|
||||
should_apply("(resolution: " + resolution + "dpi)");
|
||||
should_apply("(resolution: " + Math.floor(resolution/96) + "dppx)");
|
||||
should_not_apply("(resolution: " + (resolution + 1) + "dpi)");
|
||||
should_not_apply("(resolution: " + (resolution - 1) + "dpi)");
|
||||
dpi_high = resolution + 1;
|
||||
|
Loading…
Reference in New Issue
Block a user