Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(331)

Side by Side Diff: Source/WebCore/rendering/svg/RenderSVGRoot.cpp

Issue 9617034: Merge 109104 - Percent width/height SVG not always scaled on window resize (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/1025/
Patch Set: Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/WebCore/rendering/svg/RenderSVGRoot.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> 2 * Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
3 * Copyright (C) 2004, 2005, 2007, 2008, 2009 Rob Buis <buis@kde.org> 3 * Copyright (C) 2004, 2005, 2007, 2008, 2009 Rob Buis <buis@kde.org>
4 * Copyright (C) 2007 Eric Seidel <eric@webkit.org> 4 * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
5 * Copyright (C) 2009 Google, Inc. 5 * Copyright (C) 2009 Google, Inc.
6 * Copyright (C) Research In Motion Limited 2011. All rights reserved. 6 * Copyright (C) Research In Motion Limited 2011. All rights reserved.
7 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public 9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 SVGSVGElement* svg = static_cast<SVGSVGElement*>(node()); 181 SVGSVGElement* svg = static_cast<SVGSVGElement*>(node());
182 ASSERT(svg); 182 ASSERT(svg);
183 183
184 // When we're embedded through SVGImage (border-image/background-image/<html :img>/...) we're forced to resize to a specific size. 184 // When we're embedded through SVGImage (border-image/background-image/<html :img>/...) we're forced to resize to a specific size.
185 if (!m_containerSize.isEmpty()) 185 if (!m_containerSize.isEmpty())
186 return m_containerSize.height(); 186 return m_containerSize.height();
187 187
188 if (hasReplacedLogicalHeight()) 188 if (hasReplacedLogicalHeight())
189 return RenderReplaced::computeReplacedLogicalHeight(); 189 return RenderReplaced::computeReplacedLogicalHeight();
190 190
191 if (svg->heightAttributeEstablishesViewport()) 191 if (svg->heightAttributeEstablishesViewport()) {
192 return resolveLengthAttributeForSVG(svg->intrinsicHeight(SVGSVGElement:: IgnoreCSSProperties), style()->effectiveZoom(), containingBlock()->availableLogi calHeight()); 192 Length height = svg->intrinsicHeight(SVGSVGElement::IgnoreCSSProperties) ;
193 if (height.isPercent()) {
194 RenderBlock* cb = containingBlock();
195 ASSERT(cb);
196 while (cb->isAnonymous()) {
197 cb = cb->containingBlock();
198 cb->addPercentHeightDescendant(const_cast<RenderSVGRoot*>(this)) ;
199 }
200 } else
201 RenderBlock::removePercentHeightDescendant(const_cast<RenderSVGRoot* >(this));
202
203 return resolveLengthAttributeForSVG(height, style()->effectiveZoom(), co ntainingBlock()->availableLogicalHeight());
204 }
193 205
194 // Only SVGs embedded in <object> reach this point. 206 // Only SVGs embedded in <object> reach this point.
195 ASSERT(isEmbeddedThroughFrameContainingSVGDocument()); 207 ASSERT(isEmbeddedThroughFrameContainingSVGDocument());
196 return document()->frame()->ownerRenderer()->availableLogicalHeight(); 208 return document()->frame()->ownerRenderer()->availableLogicalHeight();
197 } 209 }
198 210
199 void RenderSVGRoot::layout() 211 void RenderSVGRoot::layout()
200 { 212 {
201 ASSERT(needsLayout()); 213 ASSERT(needsLayout());
202 214
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 RenderBox::paint(childPaintInfo, LayoutPoint()); 276 RenderBox::paint(childPaintInfo, LayoutPoint());
265 277
266 if (childPaintInfo.phase == PaintPhaseForeground) 278 if (childPaintInfo.phase == PaintPhaseForeground)
267 SVGRenderSupport::finishRenderSVGContent(this, childPaintInfo, paintInfo .context); 279 SVGRenderSupport::finishRenderSVGContent(this, childPaintInfo, paintInfo .context);
268 280
269 childPaintInfo.context->restore(); 281 childPaintInfo.context->restore();
270 } 282 }
271 283
272 void RenderSVGRoot::willBeDestroyed() 284 void RenderSVGRoot::willBeDestroyed()
273 { 285 {
286 RenderBlock::removePercentHeightDescendant(const_cast<RenderSVGRoot*>(this)) ;
287
274 SVGResourcesCache::clientDestroyed(this); 288 SVGResourcesCache::clientDestroyed(this);
275 RenderReplaced::willBeDestroyed(); 289 RenderReplaced::willBeDestroyed();
276 } 290 }
277 291
278 void RenderSVGRoot::styleWillChange(StyleDifference diff, const RenderStyle* new Style) 292 void RenderSVGRoot::styleWillChange(StyleDifference diff, const RenderStyle* new Style)
279 { 293 {
280 if (diff == StyleDifferenceLayout) 294 if (diff == StyleDifferenceLayout)
281 setNeedsBoundariesUpdate(); 295 setNeedsBoundariesUpdate();
282 RenderReplaced::styleWillChange(diff, newStyle); 296 RenderReplaced::styleWillChange(diff, newStyle);
283 } 297 }
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 // hit testing would stop immediately. For SVG only trees this doesn't m atter. Though when we have a <foreignObject> subtree we need 404 // hit testing would stop immediately. For SVG only trees this doesn't m atter. Though when we have a <foreignObject> subtree we need
391 // to be able to detect hits on the background of a <div> element. If we 'd return true here in the 'Foreground' phase, we are not able 405 // to be able to detect hits on the background of a <div> element. If we 'd return true here in the 'Foreground' phase, we are not able
392 // to detect these hits anymore. 406 // to detect these hits anymore.
393 updateHitTestResult(result, roundedLayoutPoint(localPoint)); 407 updateHitTestResult(result, roundedLayoutPoint(localPoint));
394 return true; 408 return true;
395 } 409 }
396 410
397 return false; 411 return false;
398 } 412 }
399 413
414 bool RenderSVGRoot::hasRelativeDimensions() const
415 {
416 SVGSVGElement* svg = static_cast<SVGSVGElement*>(node());
417 ASSERT(svg);
418
419 return svg->intrinsicHeight(SVGSVGElement::IgnoreCSSProperties).isPercent() || svg->intrinsicWidth(SVGSVGElement::IgnoreCSSProperties).isPercent();
420 }
421
400 } 422 }
401 423
402 #endif // ENABLE(SVG) 424 #endif // ENABLE(SVG)
OLDNEW
« no previous file with comments | « Source/WebCore/rendering/svg/RenderSVGRoot.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698