haikuwebkit/LayoutTests/svg/text/text-rescale.html

55 lines
2.2 KiB
HTML
Raw Permalink Normal View History

Recompute font metrics on scale changes https://bugs.webkit.org/show_bug.cgi?id=75091 Patch by Philip Rogers <pdr@google.com> on 2012-02-23 Reviewed by Nikolas Zimmermann. Source/WebCore: SVG text metrics depend on the transform from renderer to the svg root which requires that we propagate transform changes down to text. This change adds a boolean for tracking transform changes to SVGViewportContainers and SVGTransformableContainers, and updates RenderSVGText::layout() to recalculate text metrics if the transform of an ancestor has changed. Tests: platform/mac/svg/text/text-rescale.html platform/mac/svg/text/text-viewbox-rescale.html svg/text/text-rescale.html svg/text/text-viewbox-rescale.html * rendering/RenderObject.h: (WebCore::RenderObject::isSVGTransformableContainer): (WebCore::RenderObject::isSVGViewportContainer): * rendering/svg/RenderSVGContainer.h: (WebCore::RenderSVGContainer::didTransformToRootUpdate): * rendering/svg/RenderSVGInlineText.cpp: (WebCore::RenderSVGInlineText::computeNewScaledFontForStyle): * rendering/svg/RenderSVGText.cpp: (WebCore::RenderSVGText::RenderSVGText): (WebCore::RenderSVGText::layout): * rendering/svg/RenderSVGText.h: (WebCore::RenderSVGText::setNeedsTextMetricsUpdate): (RenderSVGText): * rendering/svg/RenderSVGTransformableContainer.cpp: (WebCore::RenderSVGTransformableContainer::RenderSVGTransformableContainer): (WebCore::RenderSVGTransformableContainer::calculateLocalTransform): * rendering/svg/RenderSVGTransformableContainer.h: (WebCore::RenderSVGTransformableContainer::isSVGTransformableContainer): (WebCore::RenderSVGTransformableContainer::didTransformToRootUpdate): (RenderSVGTransformableContainer): * rendering/svg/RenderSVGViewportContainer.cpp: (WebCore::RenderSVGViewportContainer::RenderSVGViewportContainer): (WebCore::RenderSVGViewportContainer::calcViewport): * rendering/svg/RenderSVGViewportContainer.h: (WebCore::RenderSVGViewportContainer::didTransformToRootUpdate): (RenderSVGViewportContainer): * rendering/svg/SVGRenderSupport.cpp: (WebCore::SVGRenderSupport::transformToRootChanged): (WebCore): (WebCore::SVGRenderSupport::layoutChildren): * rendering/svg/SVGRenderSupport.h: (SVGRenderSupport): LayoutTests: * platform/chromium-linux/svg/text/text-rescale-expected.png: Added. * platform/chromium-linux/svg/text/text-rescale-expected.txt: Added. * platform/chromium-linux/svg/text/text-viewbox-rescale-expected.png: Added. * platform/chromium-linux/svg/text/text-viewbox-rescale-expected.txt: Added. * platform/chromium/test_expectations.txt: * platform/mac/svg/text/text-rescale-expected.png: Added. * platform/mac/svg/text/text-rescale-expected.txt: Added. * platform/mac/svg/text/text-rescale.html: Added. * platform/mac/svg/text/text-viewbox-rescale-expected.png: Added. * platform/mac/svg/text/text-viewbox-rescale-expected.txt: Added. * platform/mac/svg/text/text-viewbox-rescale.html: Added. * svg/text/text-rescale-expected.png: Added. * svg/text/text-rescale-expected.txt: Added. * svg/text/text-rescale.html: Added. * svg/text/text-viewbox-rescale-expected.png: Added. * svg/text/text-viewbox-rescale-expected.txt: Added. * svg/text/text-viewbox-rescale.html: Added. Canonical link: https://commits.webkit.org/96477@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@108699 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-02-24 00:52:35 +00:00
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<!-- Test that a script can change the scale of text from very small to something visible -->
<!-- see: https://bugs.webkit.org/show_bug.cgi?id=75091 -->
<!-- If this test passes there should be 3 rows and 4 columns of "PASS" -->
<script src="../../fast/repaint/resources/repaint.js"></script>
</head>
<body onload="runRepaintTest()">
<svg style="position: absolute; top: 0px; left: 0px; width: 500px; height: 200px">
<g id="text1g" transform="scale(0.001)">
<text x="0" y="50" font-size="40" fill="#080">
PASS
<tspan fill="#080"> PASS</tspan>
</text>
<foreignObject x="210" y="13" width="100" height="100">
<body><p style="font-size: 40px; color: #080;">PASS</p></body>
</foreignObject>
<svg x="310" y="13" width="100" height="100">
<text x="0" y="37" font-size="40" fill="#080">PASS</text>
</svg>
</g>
<g id="text2g" transform="scale(1)">
<text x="0" y="100" font-size="40" fill="#080">
PASS
<tspan fill="#080"> PASS</tspan>
</text>
<foreignObject x="210" y="63" width="100" height="100">
<body><p style="font-size: 40px; color: #080;">PASS</p></body>
</foreignObject>
<svg x="310" y="63" width="100" height="100">
<text x="0" y="37" font-size="40" fill="#080">PASS</text>
</svg>
</g>
<g id="text3g" transform="scale(0.03)">
<text x="0" y="150" font-size="40" fill="#080">
PASS
<tspan fill="#080"> PASS</tspan>
</text>
<foreignObject x="210" y="113" width="100" height="100">
<body><p style="font-size: 40px; color: #080;">PASS</p></body>
</foreignObject>
<svg x="310" y="113" width="100" height="100">
<text x="0" y="37" font-size="40" fill="#080">PASS</text>
</svg>
</g>
</svg>
<script>
function repaintTest() {
document.getElementById("text1g").setAttribute('transform', 'scale(1)');
document.getElementById("text2g").setAttribute('transform', 'scale(1)');
document.getElementById("text3g").setAttribute('transform', 'scale(1)');
}
</script>
</body>
</html>