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

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

Issue 411613002: [SVG] Reject hit-test queries when the element has a singular transform (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 5 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 | 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 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 return false; 331 return false;
332 332
333 SVGClipPathElement* clipPathElement = toSVGClipPathElement(element()); 333 SVGClipPathElement* clipPathElement = toSVGClipPathElement(element());
334 if (clipPathElement->clipPathUnits()->currentValue()->enumValue() == SVGUnit Types::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX) { 334 if (clipPathElement->clipPathUnits()->currentValue()->enumValue() == SVGUnit Types::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX) {
335 AffineTransform transform; 335 AffineTransform transform;
336 transform.translate(objectBoundingBox.x(), objectBoundingBox.y()); 336 transform.translate(objectBoundingBox.x(), objectBoundingBox.y());
337 transform.scaleNonUniform(objectBoundingBox.width(), objectBoundingBox.h eight()); 337 transform.scaleNonUniform(objectBoundingBox.width(), objectBoundingBox.h eight());
338 point = transform.inverse().mapPoint(point); 338 point = transform.inverse().mapPoint(point);
339 } 339 }
340 340
341 point = clipPathElement->animatedLocalTransform().inverse().mapPoint(point); 341 AffineTransform animatedLocalTransform = clipPathElement->animatedLocalTrans form();
342 if (!animatedLocalTransform.isInvertible())
343 return false;
344
345 point = animatedLocalTransform.inverse().mapPoint(point);
342 346
343 for (SVGElement* childElement = Traversal<SVGElement>::firstChild(*element() ); childElement; childElement = Traversal<SVGElement>::nextSibling(*childElement )) { 347 for (SVGElement* childElement = Traversal<SVGElement>::firstChild(*element() ); childElement; childElement = Traversal<SVGElement>::nextSibling(*childElement )) {
344 RenderObject* renderer = childElement->renderer(); 348 RenderObject* renderer = childElement->renderer();
345 if (!renderer) 349 if (!renderer)
346 continue; 350 continue;
347 if (!renderer->isSVGShape() && !renderer->isSVGText() && !isSVGUseElemen t(*childElement)) 351 if (!renderer->isSVGShape() && !renderer->isSVGText() && !isSVGUseElemen t(*childElement))
348 continue; 352 continue;
349 IntPoint hitPoint; 353 IntPoint hitPoint;
350 HitTestResult result(hitPoint); 354 HitTestResult result(hitPoint);
351 if (renderer->nodeAtFloatPoint(HitTestRequest(HitTestRequest::SVGClipCon tent), result, point, HitTestForeground)) 355 if (renderer->nodeAtFloatPoint(HitTestRequest(HitTestRequest::SVGClipCon tent), result, point, HitTestForeground))
(...skipping 17 matching lines...) Expand all
369 AffineTransform transform; 373 AffineTransform transform;
370 transform.translate(objectBoundingBox.x(), objectBoundingBox.y()); 374 transform.translate(objectBoundingBox.x(), objectBoundingBox.y());
371 transform.scaleNonUniform(objectBoundingBox.width(), objectBoundingBox.h eight()); 375 transform.scaleNonUniform(objectBoundingBox.width(), objectBoundingBox.h eight());
372 return transform.mapRect(m_clipBoundaries); 376 return transform.mapRect(m_clipBoundaries);
373 } 377 }
374 378
375 return m_clipBoundaries; 379 return m_clipBoundaries;
376 } 380 }
377 381
378 } 382 }
OLDNEW
« no previous file with comments | « Source/core/rendering/svg/RenderSVGImage.cpp ('k') | Source/core/rendering/svg/RenderSVGRoot.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698