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

Side by Side Diff: Source/core/rendering/svg/RenderSVGResourceClipper.cpp

Issue 693423002: Devirtualize animatedLocalTransform() and rename it for clarity (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Remove some codes that snuck in Created 6 years, 1 month 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2004, 2005, 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org> 2 * Copyright (C) 2004, 2005, 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org>
3 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Rob Buis <buis@kde.org> 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Rob Buis <buis@kde.org>
4 * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved. 4 * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved.
5 * Copyright (C) 2011 Dirk Schulze <krit@webkit.org> 5 * Copyright (C) 2011 Dirk Schulze <krit@webkit.org>
6 * 6 *
7 * This library is free software; you can redistribute it and/or 7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Library General Public 8 * modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version. 10 * version 2 of the License, or (at your option) any later version.
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 { 144 {
145 ASSERT(target); 145 ASSERT(target);
146 ASSERT(context); 146 ASSERT(context);
147 ASSERT(clipperState == ClipperNotApplied); 147 ASSERT(clipperState == ClipperNotApplied);
148 ASSERT_WITH_SECURITY_IMPLICATION(!needsLayout()); 148 ASSERT_WITH_SECURITY_IMPLICATION(!needsLayout());
149 149
150 if (paintInvalidationRect.isEmpty() || m_inClipExpansion) 150 if (paintInvalidationRect.isEmpty() || m_inClipExpansion)
151 return false; 151 return false;
152 TemporaryChange<bool> inClipExpansionChange(m_inClipExpansion, true); 152 TemporaryChange<bool> inClipExpansionChange(m_inClipExpansion, true);
153 153
154 AffineTransform animatedLocalTransform = toSVGClipPathElement(element())->an imatedLocalTransform(); 154 AffineTransform animatedLocalTransform = toSVGClipPathElement(element())->ca lculateAnimatedLocalTransform();
155 // When drawing a clip for non-SVG elements, the CTM does not include the zo om factor. 155 // When drawing a clip for non-SVG elements, the CTM does not include the zo om factor.
156 // In this case, we need to apply the zoom scale explicitly - but only for c lips with 156 // In this case, we need to apply the zoom scale explicitly - but only for c lips with
157 // userSpaceOnUse units (the zoom is accounted for objectBoundingBox-resolve d lengths). 157 // userSpaceOnUse units (the zoom is accounted for objectBoundingBox-resolve d lengths).
158 if (!target->isSVG() && clipPathUnits() == SVGUnitTypes::SVG_UNIT_TYPE_USERS PACEONUSE) { 158 if (!target->isSVG() && clipPathUnits() == SVGUnitTypes::SVG_UNIT_TYPE_USERS PACEONUSE) {
159 ASSERT(style()); 159 ASSERT(style());
160 animatedLocalTransform.scale(style()->effectiveZoom()); 160 animatedLocalTransform.scale(style()->effectiveZoom());
161 } 161 }
162 162
163 // First, try to apply the clip as a clipPath. 163 // First, try to apply the clip as a clipPath.
164 if (tryPathOnlyClipping(context, animatedLocalTransform, targetBoundingBox)) { 164 if (tryPathOnlyClipping(context, animatedLocalTransform, targetBoundingBox)) {
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 RenderObject* renderer = childElement->renderer(); 301 RenderObject* renderer = childElement->renderer();
302 if (!renderer) 302 if (!renderer)
303 continue; 303 continue;
304 if (!renderer->isSVGShape() && !renderer->isSVGText() && !isSVGUseElemen t(*childElement)) 304 if (!renderer->isSVGShape() && !renderer->isSVGText() && !isSVGUseElemen t(*childElement))
305 continue; 305 continue;
306 RenderStyle* style = renderer->style(); 306 RenderStyle* style = renderer->style();
307 if (!style || style->display() == NONE || style->visibility() != VISIBLE ) 307 if (!style || style->display() == NONE || style->visibility() != VISIBLE )
308 continue; 308 continue;
309 m_clipBoundaries.unite(renderer->localToParentTransform().mapRect(render er->paintInvalidationRectInLocalCoordinates())); 309 m_clipBoundaries.unite(renderer->localToParentTransform().mapRect(render er->paintInvalidationRectInLocalCoordinates()));
310 } 310 }
311 m_clipBoundaries = toSVGClipPathElement(element())->animatedLocalTransform() .mapRect(m_clipBoundaries); 311 m_clipBoundaries = toSVGClipPathElement(element())->calculateAnimatedLocalTr ansform().mapRect(m_clipBoundaries);
312 } 312 }
313 313
314 bool RenderSVGResourceClipper::hitTestClipContent(const FloatRect& objectBoundin gBox, const FloatPoint& nodeAtPoint) 314 bool RenderSVGResourceClipper::hitTestClipContent(const FloatRect& objectBoundin gBox, const FloatPoint& nodeAtPoint)
315 { 315 {
316 FloatPoint point = nodeAtPoint; 316 FloatPoint point = nodeAtPoint;
317 if (!SVGRenderSupport::pointInClippingArea(this, point)) 317 if (!SVGRenderSupport::pointInClippingArea(this, point))
318 return false; 318 return false;
319 319
320 if (clipPathUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX) { 320 if (clipPathUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX) {
321 AffineTransform transform; 321 AffineTransform transform;
322 transform.translate(objectBoundingBox.x(), objectBoundingBox.y()); 322 transform.translate(objectBoundingBox.x(), objectBoundingBox.y());
323 transform.scaleNonUniform(objectBoundingBox.width(), objectBoundingBox.h eight()); 323 transform.scaleNonUniform(objectBoundingBox.width(), objectBoundingBox.h eight());
324 point = transform.inverse().mapPoint(point); 324 point = transform.inverse().mapPoint(point);
325 } 325 }
326 326
327 AffineTransform animatedLocalTransform = toSVGClipPathElement(element())->an imatedLocalTransform(); 327 AffineTransform animatedLocalTransform = toSVGClipPathElement(element())->ca lculateAnimatedLocalTransform();
328 if (!animatedLocalTransform.isInvertible()) 328 if (!animatedLocalTransform.isInvertible())
329 return false; 329 return false;
330 330
331 point = animatedLocalTransform.inverse().mapPoint(point); 331 point = animatedLocalTransform.inverse().mapPoint(point);
332 332
333 for (SVGElement* childElement = Traversal<SVGElement>::firstChild(*element() ); childElement; childElement = Traversal<SVGElement>::nextSibling(*childElement )) { 333 for (SVGElement* childElement = Traversal<SVGElement>::firstChild(*element() ); childElement; childElement = Traversal<SVGElement>::nextSibling(*childElement )) {
334 RenderObject* renderer = childElement->renderer(); 334 RenderObject* renderer = childElement->renderer();
335 if (!renderer) 335 if (!renderer)
336 continue; 336 continue;
337 if (!renderer->isSVGShape() && !renderer->isSVGText() && !isSVGUseElemen t(*childElement)) 337 if (!renderer->isSVGShape() && !renderer->isSVGText() && !isSVGUseElemen t(*childElement))
(...skipping 21 matching lines...) Expand all
359 AffineTransform transform; 359 AffineTransform transform;
360 transform.translate(objectBoundingBox.x(), objectBoundingBox.y()); 360 transform.translate(objectBoundingBox.x(), objectBoundingBox.y());
361 transform.scaleNonUniform(objectBoundingBox.width(), objectBoundingBox.h eight()); 361 transform.scaleNonUniform(objectBoundingBox.width(), objectBoundingBox.h eight());
362 return transform.mapRect(m_clipBoundaries); 362 return transform.mapRect(m_clipBoundaries);
363 } 363 }
364 364
365 return m_clipBoundaries; 365 return m_clipBoundaries;
366 } 366 }
367 367
368 } 368 }
OLDNEW
« no previous file with comments | « Source/core/rendering/svg/RenderSVGImage.cpp ('k') | Source/core/rendering/svg/RenderSVGShape.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698