OLD | NEW |
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, 2008 Rob Buis <buis@kde.org> | 3 * Copyright (C) 2004, 2005, 2008 Rob Buis <buis@kde.org> |
4 * Copyright (C) 2005, 2007 Eric Seidel <eric@webkit.org> | 4 * Copyright (C) 2005, 2007 Eric Seidel <eric@webkit.org> |
5 * Copyright (C) 2009 Google, Inc. | 5 * Copyright (C) 2009 Google, Inc. |
6 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> | 6 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> |
7 * Copyright (C) Research In Motion Limited 2010. All rights reserved. | 7 * Copyright (C) Research In Motion Limited 2010. All rights reserved. |
8 * Copyright (C) 2009 Jeff Schiller <codedread@gmail.com> | 8 * Copyright (C) 2009 Jeff Schiller <codedread@gmail.com> |
9 * Copyright (C) 2011 Renata Hodovan <reni@webkit.org> | 9 * Copyright (C) 2011 Renata Hodovan <reni@webkit.org> |
10 * Copyright (C) 2011 University of Szeged | 10 * Copyright (C) 2011 University of Szeged |
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
305 // while transformed to our coord system, return local coords | 305 // while transformed to our coord system, return local coords |
306 void RenderSVGShape::addFocusRingRects(Vector<IntRect>& rects, const LayoutPoint
&, const RenderLayerModelObject*) | 306 void RenderSVGShape::addFocusRingRects(Vector<IntRect>& rects, const LayoutPoint
&, const RenderLayerModelObject*) |
307 { | 307 { |
308 IntRect rect = enclosingIntRect(repaintRectInLocalCoordinates()); | 308 IntRect rect = enclosingIntRect(repaintRectInLocalCoordinates()); |
309 if (!rect.isEmpty()) | 309 if (!rect.isEmpty()) |
310 rects.append(rect); | 310 rects.append(rect); |
311 } | 311 } |
312 | 312 |
313 bool RenderSVGShape::nodeAtFloatPoint(const HitTestRequest& request, HitTestResu
lt& result, const FloatPoint& pointInParent, HitTestAction hitTestAction) | 313 bool RenderSVGShape::nodeAtFloatPoint(const HitTestRequest& request, HitTestResu
lt& result, const FloatPoint& pointInParent, HitTestAction hitTestAction) |
314 { | 314 { |
315 // We only draw in the forground phase, so we only hit-test then. | 315 // We only draw in the foreground phase, so we only hit-test then. |
316 if (hitTestAction != HitTestForeground) | 316 if (hitTestAction != HitTestForeground) |
317 return false; | 317 return false; |
318 | 318 |
319 FloatPoint localPoint = m_localTransform.inverse().mapPoint(pointInParent); | 319 FloatPoint localPoint = m_localTransform.inverse().mapPoint(pointInParent); |
320 | 320 |
321 if (!SVGRenderSupport::pointInClippingArea(this, localPoint)) | 321 if (!SVGRenderSupport::pointInClippingArea(this, localPoint)) |
322 return false; | 322 return false; |
323 | 323 |
324 PointerEventsHitRules hitRules(PointerEventsHitRules::SVG_PATH_HITTESTING, r
equest, style()->pointerEvents()); | 324 PointerEventsHitRules hitRules(PointerEventsHitRules::SVG_GEOMETRY_HITTESTIN
G, request, style()->pointerEvents()); |
| 325 if (nodeAtFloatPointInternal(request, localPoint, hitRules)) { |
| 326 updateHitTestResult(result, roundedLayoutPoint(localPoint)); |
| 327 return true; |
| 328 } |
| 329 |
| 330 return false; |
| 331 } |
| 332 |
| 333 bool RenderSVGShape::nodeAtFloatPointInternal(const HitTestRequest& request, con
st FloatPoint& localPoint, PointerEventsHitRules hitRules) |
| 334 { |
325 bool isVisible = (style()->visibility() == VISIBLE); | 335 bool isVisible = (style()->visibility() == VISIBLE); |
326 if (isVisible || !hitRules.requireVisible) { | 336 if (isVisible || !hitRules.requireVisible) { |
327 const SVGRenderStyle* svgStyle = style()->svgStyle(); | 337 const SVGRenderStyle* svgStyle = style()->svgStyle(); |
328 WindRule fillRule = svgStyle->fillRule(); | 338 WindRule fillRule = svgStyle->fillRule(); |
329 if (request.svgClipContent()) | 339 if (request.svgClipContent()) |
330 fillRule = svgStyle->clipRule(); | 340 fillRule = svgStyle->clipRule(); |
331 if ((hitRules.canHitStroke && (svgStyle->hasStroke() || !hitRules.requir
eStroke) && strokeContains(localPoint, hitRules.requireStroke)) | 341 if ((hitRules.canHitStroke && (svgStyle->hasStroke() || !hitRules.requir
eStroke) && strokeContains(localPoint, hitRules.requireStroke)) |
332 || (hitRules.canHitFill && (svgStyle->hasFill() || !hitRules.require
Fill) && fillContains(localPoint, hitRules.requireFill, fillRule))) { | 342 || (hitRules.canHitFill && (svgStyle->hasFill() || !hitRules.require
Fill) && fillContains(localPoint, hitRules.requireFill, fillRule))) |
333 updateHitTestResult(result, roundedLayoutPoint(localPoint)); | |
334 return true; | 343 return true; |
335 } | |
336 } | 344 } |
337 return false; | 345 return false; |
338 } | 346 } |
339 | 347 |
340 static inline RenderSVGResourceMarker* markerForType(SVGMarkerType type, RenderS
VGResourceMarker* markerStart, RenderSVGResourceMarker* markerMid, RenderSVGReso
urceMarker* markerEnd) | 348 static inline RenderSVGResourceMarker* markerForType(SVGMarkerType type, RenderS
VGResourceMarker* markerStart, RenderSVGResourceMarker* markerMid, RenderSVGReso
urceMarker* markerEnd) |
341 { | 349 { |
342 switch (type) { | 350 switch (type) { |
343 case StartMarker: | 351 case StartMarker: |
344 return markerStart; | 352 return markerStart; |
345 case MidMarker: | 353 case MidMarker: |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
458 return; | 466 return; |
459 | 467 |
460 ASSERT(m_path); | 468 ASSERT(m_path); |
461 | 469 |
462 SVGMarkerData markerData(m_markerPositions); | 470 SVGMarkerData markerData(m_markerPositions); |
463 m_path->apply(&markerData, SVGMarkerData::updateFromPathElement); | 471 m_path->apply(&markerData, SVGMarkerData::updateFromPathElement); |
464 markerData.pathIsDone(); | 472 markerData.pathIsDone(); |
465 } | 473 } |
466 | 474 |
467 } | 475 } |
OLD | NEW |