Changeset 108699 in webkit
- Timestamp:
- Feb 23, 2012, 4:52:35 PM (13 years ago)
- Location:
- trunk
- Files:
-
- 16 added
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r108697 r108699 1 2012-02-23 Philip Rogers <pdr@google.com> 2 3 Recompute font metrics on scale changes 4 https://bugs.webkit.org/show_bug.cgi?id=75091 5 6 Reviewed by Nikolas Zimmermann. 7 8 * platform/chromium-linux/svg/text/text-rescale-expected.png: Added. 9 * platform/chromium-linux/svg/text/text-rescale-expected.txt: Added. 10 * platform/chromium-linux/svg/text/text-viewbox-rescale-expected.png: Added. 11 * platform/chromium-linux/svg/text/text-viewbox-rescale-expected.txt: Added. 12 * platform/chromium/test_expectations.txt: 13 * platform/mac/svg/text/text-rescale-expected.png: Added. 14 * platform/mac/svg/text/text-rescale-expected.txt: Added. 15 * platform/mac/svg/text/text-rescale.html: Added. 16 * platform/mac/svg/text/text-viewbox-rescale-expected.png: Added. 17 * platform/mac/svg/text/text-viewbox-rescale-expected.txt: Added. 18 * platform/mac/svg/text/text-viewbox-rescale.html: Added. 19 * svg/text/text-rescale-expected.png: Added. 20 * svg/text/text-rescale-expected.txt: Added. 21 * svg/text/text-rescale.html: Added. 22 * svg/text/text-viewbox-rescale-expected.png: Added. 23 * svg/text/text-viewbox-rescale-expected.txt: Added. 24 * svg/text/text-viewbox-rescale.html: Added. 25 1 26 2012-02-23 Adrienne Walker <enne@google.com> 2 27 -
trunk/LayoutTests/platform/chromium/test_expectations.txt
r108697 r108699 4207 4207 BUGWK79239 : http/tests/media/video-referer.html = FAIL 4208 4208 4209 // Need rebaselining after bug 75091 4210 BUGWK75091 SKIP : svg/carto.net/tabgroup.svg = FAIL 4211 BUGWK75091 SKIP : svg/carto.net/window.svg = FAIL 4212 BUGWK75091 SKIP : svg/custom/js-late-clipPath-and-object-creation.svg = FAIL 4213 BUGWK75091 SKIP : svg/custom/js-late-gradient-and-object-creation.svg = FAIL 4214 BUGWK75091 SKIP : svg/custom/js-late-pattern-and-object-creation.svg = FAIL 4215 BUGWK75091 SKIP : svg/custom/text-ctm.svg = FAIL 4216 BUGWK75091 SKIP : svg/custom/use-detach.svg = FAIL 4217 BUGWK75091 SKIP : svg/hixie/perf/003.xml = FAIL 4218 4209 4219 // Asserting in debug builds since r108506 4210 4220 BUGWK79229 WIN LINUX DEBUG : http/tests/inspector/console-xhr-logging-async.html = CRASH -
trunk/Source/WebCore/ChangeLog
r108698 r108699 1 2012-02-23 Philip Rogers <pdr@google.com> 2 3 Recompute font metrics on scale changes 4 https://bugs.webkit.org/show_bug.cgi?id=75091 5 6 Reviewed by Nikolas Zimmermann. 7 8 SVG text metrics depend on the transform from renderer to the svg root 9 which requires that we propagate transform changes down to text. 10 This change adds a boolean for tracking transform changes to 11 SVGViewportContainers and SVGTransformableContainers, and updates 12 RenderSVGText::layout() to recalculate text metrics if the transform 13 of an ancestor has changed. 14 15 Tests: platform/mac/svg/text/text-rescale.html 16 platform/mac/svg/text/text-viewbox-rescale.html 17 svg/text/text-rescale.html 18 svg/text/text-viewbox-rescale.html 19 20 * rendering/RenderObject.h: 21 (WebCore::RenderObject::isSVGTransformableContainer): 22 (WebCore::RenderObject::isSVGViewportContainer): 23 * rendering/svg/RenderSVGContainer.h: 24 (WebCore::RenderSVGContainer::didTransformToRootUpdate): 25 * rendering/svg/RenderSVGInlineText.cpp: 26 (WebCore::RenderSVGInlineText::computeNewScaledFontForStyle): 27 * rendering/svg/RenderSVGText.cpp: 28 (WebCore::RenderSVGText::RenderSVGText): 29 (WebCore::RenderSVGText::layout): 30 * rendering/svg/RenderSVGText.h: 31 (WebCore::RenderSVGText::setNeedsTextMetricsUpdate): 32 (RenderSVGText): 33 * rendering/svg/RenderSVGTransformableContainer.cpp: 34 (WebCore::RenderSVGTransformableContainer::RenderSVGTransformableContainer): 35 (WebCore::RenderSVGTransformableContainer::calculateLocalTransform): 36 * rendering/svg/RenderSVGTransformableContainer.h: 37 (WebCore::RenderSVGTransformableContainer::isSVGTransformableContainer): 38 (WebCore::RenderSVGTransformableContainer::didTransformToRootUpdate): 39 (RenderSVGTransformableContainer): 40 * rendering/svg/RenderSVGViewportContainer.cpp: 41 (WebCore::RenderSVGViewportContainer::RenderSVGViewportContainer): 42 (WebCore::RenderSVGViewportContainer::calcViewport): 43 * rendering/svg/RenderSVGViewportContainer.h: 44 (WebCore::RenderSVGViewportContainer::didTransformToRootUpdate): 45 (RenderSVGViewportContainer): 46 * rendering/svg/SVGRenderSupport.cpp: 47 (WebCore::SVGRenderSupport::transformToRootChanged): 48 (WebCore): 49 (WebCore::SVGRenderSupport::layoutChildren): 50 * rendering/svg/SVGRenderSupport.h: 51 (SVGRenderSupport): 52 1 53 2012-02-21 James Robinson <jamesr@chromium.org> 2 54 -
trunk/Source/WebCore/rendering/RenderObject.h
r108606 r108699 388 388 virtual bool isSVGRoot() const { return false; } 389 389 virtual bool isSVGContainer() const { return false; } 390 virtual bool isSVGViewportContainer() const { return false; } 390 virtual bool isSVGTransformableContainer() const { return false; } 391 virtual bool isSVGViewportContainer() const { return false; } 391 392 virtual bool isSVGGradientStop() const { return false; } 392 393 virtual bool isSVGHiddenContainer() const { return false; } -
trunk/Source/WebCore/rendering/svg/RenderSVGContainer.h
r107108 r108699 42 42 virtual void paint(PaintInfo&, const LayoutPoint&); 43 43 virtual void setNeedsBoundariesUpdate() { m_needsBoundariesUpdate = true; } 44 virtual bool didTransformToRootUpdate() { return false; } 44 45 45 46 protected: -
trunk/Source/WebCore/rendering/svg/RenderSVGInlineText.cpp
r105224 r108699 268 268 269 269 FontDescription fontDescription(style->fontDescription()); 270 271 // FIXME: We need to better handle the case when we compute very small fonts below (below 1pt). 270 272 fontDescription.setComputedSize(CSSStyleSelector::getComputedSizeFromSpecifiedSize(document, scalingFactor, fontDescription.isAbsoluteSize(), fontDescription.computedSize(), DoNotUseSmartMinimumForFontSize)); 271 273 -
trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp
r105143 r108699 59 59 , m_needsPositioningValuesUpdate(true) 60 60 , m_needsTransformUpdate(true) 61 , m_needsTextMetricsUpdate(true) 61 62 { 62 63 } … … 209 210 } 210 211 211 // If the root layout size changed (eg. window size changes) or the positioning values change, recompute the on-screen font size. 212 if (SVGRenderSupport::findTreeRootObject(this)->isLayoutSizeChanged()) { 212 // If the root layout size changed (eg. window size changes) or the positioning values change 213 // or the transform to the root context has changed then recompute the on-screen font size. 214 if (m_needsTextMetricsUpdate || SVGRenderSupport::findTreeRootObject(this)->isLayoutSizeChanged()) { 213 215 recursiveUpdateScaledFont(this); 214 216 rebuildLayoutAttributes(true); 215 217 updateCachedBoundariesInParents = true; 218 m_needsTextMetricsUpdate = false; 216 219 } 217 220 -
trunk/Source/WebCore/rendering/svg/RenderSVGText.h
r105143 r108699 42 42 void setNeedsPositioningValuesUpdate() { m_needsPositioningValuesUpdate = true; } 43 43 virtual void setNeedsTransformUpdate() { m_needsTransformUpdate = true; } 44 void setNeedsTextMetricsUpdate() { m_needsTextMetricsUpdate = true; } 44 45 virtual FloatRect repaintRectInLocalCoordinates() const; 45 46 … … 91 92 bool m_needsPositioningValuesUpdate : 1; 92 93 bool m_needsTransformUpdate : 1; 94 bool m_needsTextMetricsUpdate : 1; 93 95 AffineTransform m_localTransform; 94 96 SVGTextLayoutAttributesBuilder m_layoutAttributesBuilder; -
trunk/Source/WebCore/rendering/svg/RenderSVGTransformableContainer.cpp
r91644 r108699 26 26 27 27 #include "SVGNames.h" 28 #include "SVGRenderSupport.h" 28 29 #include "SVGShadowTreeElements.h" 29 30 #include "SVGStyledTransformableElement.h" … … 34 35 : RenderSVGContainer(node) 35 36 , m_needsTransformUpdate(true) 37 , m_didTransformToRootUpdate(false) 36 38 { 37 39 } … … 42 44 43 45 bool needsUpdate = m_needsTransformUpdate; 46 m_didTransformToRootUpdate = m_needsTransformUpdate || SVGRenderSupport::transformToRootChanged(parent()); 44 47 if (needsUpdate) { 45 48 m_localTransform = element->animatedLocalTransform(); -
trunk/Source/WebCore/rendering/svg/RenderSVGTransformableContainer.h
r75350 r108699 32 32 explicit RenderSVGTransformableContainer(SVGStyledTransformableElement*); 33 33 34 virtual bool isSVGTransformableContainer() const { return true; } 34 35 virtual const AffineTransform& localToParentTransform() const { return m_localTransform; } 35 36 virtual void setNeedsTransformUpdate() { m_needsTransformUpdate = true; } 37 virtual bool didTransformToRootUpdate() { return m_didTransformToRootUpdate; } 36 38 37 39 private: … … 40 42 41 43 bool m_needsTransformUpdate : 1; 44 bool m_didTransformToRootUpdate : 1; 42 45 AffineTransform m_localTransform; 43 46 }; -
trunk/Source/WebCore/rendering/svg/RenderSVGViewportContainer.cpp
r107893 r108699 35 35 RenderSVGViewportContainer::RenderSVGViewportContainer(SVGStyledElement* node) 36 36 : RenderSVGContainer(node) 37 , m_didTransformToRootUpdate(false) 37 38 , m_isLayoutSizeChanged(false) 38 39 , m_needsTransformUpdate(true) … … 66 67 67 68 if (oldViewport != m_viewport) { 69 m_didTransformToRootUpdate = true; 68 70 setNeedsBoundariesUpdate(); 69 71 setNeedsTransformUpdate(); -
trunk/Source/WebCore/rendering/svg/RenderSVGViewportContainer.h
r107893 r108699 37 37 38 38 bool isLayoutSizeChanged() const { return m_isLayoutSizeChanged; } 39 virtual bool didTransformToRootUpdate() { return m_didTransformToRootUpdate; } 39 40 40 41 virtual void determineIfLayoutSizeChanged(); … … 57 58 FloatRect m_viewport; 58 59 mutable AffineTransform m_localToParentTransform; 60 bool m_didTransformToRootUpdate : 1; 59 61 bool m_isLayoutSizeChanged : 1; 60 62 bool m_needsTransformUpdate : 1; -
trunk/Source/WebCore/rendering/svg/SVGRenderSupport.cpp
r108537 r108699 251 251 } 252 252 253 bool SVGRenderSupport::transformToRootChanged(RenderObject* ancestor) 254 { 255 while (ancestor && !ancestor->isSVGRoot()) { 256 if (ancestor->isSVGTransformableContainer()) 257 return toRenderSVGContainer(ancestor)->didTransformToRootUpdate(); 258 if (ancestor->isSVGViewportContainer()) 259 return toRenderSVGViewportContainer(ancestor)->didTransformToRootUpdate(); 260 ancestor = ancestor->parent(); 261 } 262 263 return false; 264 } 265 253 266 void SVGRenderSupport::layoutChildren(RenderObject* start, bool selfNeedsLayout) 254 267 { 255 268 bool layoutSizeChanged = layoutSizeOfNearestViewportChanged(start); 269 bool transformChanged = transformToRootChanged(start); 256 270 HashSet<RenderObject*> notlayoutedObjects; 257 271 258 272 for (RenderObject* child = start->firstChild(); child; child = child->nextSibling()) { 259 273 bool needsLayout = selfNeedsLayout; 274 275 if (transformChanged) { 276 // If the transform changed we need to update the text metrics (note: this also happens for layoutSizeChanged=true). 277 if (child->isSVGText()) 278 toRenderSVGText(child)->setNeedsTextMetricsUpdate(); 279 needsLayout = true; 280 } 260 281 261 282 if (layoutSizeChanged) { -
trunk/Source/WebCore/rendering/svg/SVGRenderSupport.h
r101342 r108699 73 73 static void applyStrokeStyleToContext(GraphicsContext*, const RenderStyle*, const RenderObject*); 74 74 75 // Determines if any ancestor's transform has changed. 76 static bool transformToRootChanged(RenderObject*); 77 75 78 // FIXME: These methods do not belong here. 76 79 static const RenderSVGRoot* findTreeRootObject(const RenderObject*);
Note:
See TracChangeset
for help on using the changeset viewer.