зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1376931 Part 3: Change Gecko media queries of resolution to compare in dppx units without unit conversion. r=heycam
MozReview-Commit-ID: DPdz1Tmv24R --HG-- extra : rebase_source : ddf4b4aae7fdc8ca62de714b9f222daee5959743
This commit is contained in:
Родитель
1450446d11
Коммит
559b3e4021
|
@ -279,16 +279,24 @@ static void
|
|||
GetResolution(nsPresContext* aPresContext, const nsMediaFeature*,
|
||||
nsCSSValue& aResult)
|
||||
{
|
||||
float dpi = 96; // Use 96 when resisting fingerprinting.
|
||||
// We're returning resolution in terms of device pixels per css pixel, since
|
||||
// that is the preferred unit for media queries of resolution. This avoids
|
||||
// introducing precision error from conversion to and from less-used
|
||||
// physical units like inches.
|
||||
|
||||
float dppx;
|
||||
|
||||
if (!ShouldResistFingerprinting(aPresContext)) {
|
||||
// Resolution measures device pixels per CSS (inch/cm/pixel). We
|
||||
// return it in device pixels per CSS inches.
|
||||
dpi = float(nsPresContext::AppUnitsPerCSSInch()) /
|
||||
float(aPresContext->AppUnitsPerDevPixel());
|
||||
// Get the actual device pixel ratio, which also takes zoom into account.
|
||||
dppx = float(nsPresContext::AppUnitsPerCSSPixel()) /
|
||||
aPresContext->AppUnitsPerDevPixel();
|
||||
} else {
|
||||
// We are resisting fingerprinting, so pretend we have a device pixel ratio
|
||||
// of 1. In that case, we simply report the zoom level.
|
||||
dppx = aPresContext->GetEffectiveFullZoom();
|
||||
}
|
||||
|
||||
aResult.SetFloatValue(dpi, eCSSUnit_Inch);
|
||||
aResult.SetFloatValue(dppx, eCSSUnit_Pixel);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -129,23 +129,23 @@ nsMediaExpression::Matches(nsPresContext *aPresContext,
|
|||
required.GetUnit() == eCSSUnit_Pixel ||
|
||||
required.GetUnit() == eCSSUnit_Centimeter,
|
||||
"bad required value");
|
||||
float actualDPI = actual.GetFloatValue();
|
||||
float actualDPPX = actual.GetFloatValue();
|
||||
float overrideDPPX = aPresContext->GetOverrideDPPX();
|
||||
|
||||
if (overrideDPPX > 0) {
|
||||
actualDPI = overrideDPPX * 96.0f;
|
||||
actualDPPX = overrideDPPX;
|
||||
} else if (actual.GetUnit() == eCSSUnit_Centimeter) {
|
||||
actualDPI = actualDPI * 2.54f;
|
||||
} else if (actual.GetUnit() == eCSSUnit_Pixel) {
|
||||
actualDPI = actualDPI * 96.0f;
|
||||
actualDPPX = actualDPPX * 2.54f / 96.0f;
|
||||
} else if (actual.GetUnit() == eCSSUnit_Inch) {
|
||||
actualDPPX = actualDPPX / 96.0f;
|
||||
}
|
||||
float requiredDPI = required.GetFloatValue();
|
||||
float requiredDPPX = required.GetFloatValue();
|
||||
if (required.GetUnit() == eCSSUnit_Centimeter) {
|
||||
requiredDPI = requiredDPI * 2.54f;
|
||||
} else if (required.GetUnit() == eCSSUnit_Pixel) {
|
||||
requiredDPI = requiredDPI * 96.0f;
|
||||
requiredDPPX = requiredDPPX * 2.54f / 96.0f;
|
||||
} else if (required.GetUnit() == eCSSUnit_Inch) {
|
||||
requiredDPPX = requiredDPPX / 96.0f;
|
||||
}
|
||||
cmp = DoCompare(actualDPI, requiredDPI);
|
||||
cmp = DoCompare(actualDPPX, requiredDPPX);
|
||||
}
|
||||
break;
|
||||
case nsMediaFeature::eEnumerated:
|
||||
|
|
Загрузка…
Ссылка в новой задаче