Bug 1426594 - Should convert rect from TransformFramePointToTextChild to device pixel r=longsonr

We need device pixel, but TransformFramePointToTextChild returns in css pixel,
thus a scaling is necessary.

Differential Revision: https://phabricator.services.mozilla.com/D27322

--HG--
extra : moz-landing-system : lando
This commit is contained in:
violet 2019-04-12 16:09:11 +00:00
Родитель 33058a6bbd
Коммит 2f70fdcb52
3 изменённых файлов: 42 добавлений и 0 удалений

Просмотреть файл

@ -38,6 +38,7 @@ support-files =
[test_bbox-changes.xhtml]
[test_bounds.html]
[test_bug872812.html]
[test_bug1426594.html]
[test_getBBox-method.html]
[test_dataTypes.html]
[test_dataTypesModEvents.html]

Просмотреть файл

@ -0,0 +1,34 @@
<!DOCTYPE html>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=1426594
-->
<head>
<title>Test for Bug 1426594</title>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
<script class="testbody" type="application/javascript">
SimpleTest.waitForExplicitFinish();
function runTests() {
let textElement = document.getElementById("textId"),
tspanElement = document.getElementById("tspanId");
isfuzzy(textElement.getBoundingClientRect().width, tspanElement.getBoundingClientRect().width, 5);
isfuzzy(textElement.getBoundingClientRect().height, tspanElement.getBoundingClientRect().height, 5);
SimpleTest.finish();
}
</script>
</head>
<body onload="runTests()">
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=589640">Mozilla Bug 1426594</a>
<svg height="1.5em" width="200px">
<text id="textId" y="1em"><tspan id="tspanId">ABCDEF</tspan></text>
</svg>
<div style="pointer-events: none; border: 1px solid red; position: absolute;
z-index: 1"
id="highlight">
</div>
</body>
</html>

Просмотреть файл

@ -3001,6 +3001,13 @@ nsRect nsLayoutUtils::TransformFrameRectToAncestor(
if (text) {
result = ToRect(text->TransformFrameRectFromTextChild(aRect, aFrame));
// |result| from TransformFrameRectFromTextChild() is in user space (css
// pixel), should convert to device pixel
float devPixelPerCSSPixel =
1.f * AppUnitsPerCSSPixel() / srcAppUnitsPerDevPixel;
result.Scale(devPixelPerCSSPixel);
result = TransformGfxRectToAncestor(
text, result, aAncestor, nullptr, aMatrixCache,
aStopAtStackingContextAndDisplayPortAndOOFFrame, aOutAncestor);