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 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 { | 103 { |
104 if (!strokeBoundingBox().contains(point)) | 104 if (!strokeBoundingBox().contains(point)) |
105 return false; | 105 return false; |
106 | 106 |
107 if (requiresStroke && !SVGPaintServer::existsForRenderer(*this, style(), App
lyToStrokeMode)) | 107 if (requiresStroke && !SVGPaintServer::existsForRenderer(*this, style(), App
lyToStrokeMode)) |
108 return false; | 108 return false; |
109 | 109 |
110 return shapeDependentStrokeContains(point); | 110 return shapeDependentStrokeContains(point); |
111 } | 111 } |
112 | 112 |
| 113 void RenderSVGShape::updateLocalTransform() |
| 114 { |
| 115 SVGGraphicsElement* graphicsElement = toSVGGraphicsElement(element()); |
| 116 if (graphicsElement->hasAnimatedLocalTransform()) { |
| 117 if (m_localTransform) |
| 118 m_localTransform->setTransform(graphicsElement->calculateAnimatedLoc
alTransform()); |
| 119 else |
| 120 m_localTransform = adoptPtr(new AffineTransform(graphicsElement->cal
culateAnimatedLocalTransform())); |
| 121 } else { |
| 122 m_localTransform = 0; |
| 123 } |
| 124 } |
| 125 |
113 void RenderSVGShape::layout() | 126 void RenderSVGShape::layout() |
114 { | 127 { |
115 bool updateCachedBoundariesInParents = false; | 128 bool updateCachedBoundariesInParents = false; |
116 | 129 |
117 if (m_needsShapeUpdate || m_needsBoundariesUpdate) { | 130 if (m_needsShapeUpdate || m_needsBoundariesUpdate) { |
118 updateShapeFromElement(); | 131 updateShapeFromElement(); |
119 m_needsShapeUpdate = false; | 132 m_needsShapeUpdate = false; |
120 updatePaintInvalidationBoundingBox(); | 133 updatePaintInvalidationBoundingBox(); |
121 m_needsBoundariesUpdate = false; | 134 m_needsBoundariesUpdate = false; |
122 updateCachedBoundariesInParents = true; | 135 updateCachedBoundariesInParents = true; |
123 } | 136 } |
124 | 137 |
125 if (m_needsTransformUpdate) { | 138 if (m_needsTransformUpdate) { |
126 m_localTransform = toSVGGraphicsElement(element())->calculateAnimatedLo
calTransform(); | 139 updateLocalTransform(); |
127 m_needsTransformUpdate = false; | 140 m_needsTransformUpdate = false; |
128 updateCachedBoundariesInParents = true; | 141 updateCachedBoundariesInParents = true; |
129 } | 142 } |
130 | 143 |
131 // Invalidate all resources of this client if our layout changed. | 144 // Invalidate all resources of this client if our layout changed. |
132 if (everHadLayout() && selfNeedsLayout()) | 145 if (everHadLayout() && selfNeedsLayout()) |
133 SVGResourcesCache::clientLayoutChanged(this); | 146 SVGResourcesCache::clientLayoutChanged(this); |
134 | 147 |
135 // If our bounds changed, notify the parents. | 148 // If our bounds changed, notify the parents. |
136 if (updateCachedBoundariesInParents) | 149 if (updateCachedBoundariesInParents) |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
168 rects.append(rect); | 181 rects.append(rect); |
169 } | 182 } |
170 | 183 |
171 bool RenderSVGShape::nodeAtFloatPoint(const HitTestRequest& request, HitTestResu
lt& result, const FloatPoint& pointInParent, HitTestAction hitTestAction) | 184 bool RenderSVGShape::nodeAtFloatPoint(const HitTestRequest& request, HitTestResu
lt& result, const FloatPoint& pointInParent, HitTestAction hitTestAction) |
172 { | 185 { |
173 // We only draw in the foreground phase, so we only hit-test then. | 186 // We only draw in the foreground phase, so we only hit-test then. |
174 if (hitTestAction != HitTestForeground) | 187 if (hitTestAction != HitTestForeground) |
175 return false; | 188 return false; |
176 | 189 |
177 FloatPoint localPoint; | 190 FloatPoint localPoint; |
178 if (!SVGRenderSupport::transformToUserSpaceAndCheckClipping(this, m_localTra
nsform, pointInParent, localPoint)) | 191 if (!SVGRenderSupport::transformToUserSpaceAndCheckClipping(this, localToPar
entTransform(), pointInParent, localPoint)) |
179 return false; | 192 return false; |
180 | 193 |
181 PointerEventsHitRules hitRules(PointerEventsHitRules::SVG_GEOMETRY_HITTESTIN
G, request, style()->pointerEvents()); | 194 PointerEventsHitRules hitRules(PointerEventsHitRules::SVG_GEOMETRY_HITTESTIN
G, request, style()->pointerEvents()); |
182 if (nodeAtFloatPointInternal(request, localPoint, hitRules)) { | 195 if (nodeAtFloatPointInternal(request, localPoint, hitRules)) { |
183 updateHitTestResult(result, roundedLayoutPoint(localPoint)); | 196 updateHitTestResult(result, roundedLayoutPoint(localPoint)); |
184 return true; | 197 return true; |
185 } | 198 } |
186 | 199 |
187 return false; | 200 return false; |
188 } | 201 } |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
249 bool RenderSVGShape::hasSmoothStroke() const | 262 bool RenderSVGShape::hasSmoothStroke() const |
250 { | 263 { |
251 const SVGRenderStyle& svgStyle = style()->svgStyle(); | 264 const SVGRenderStyle& svgStyle = style()->svgStyle(); |
252 return svgStyle.strokeDashArray()->isEmpty() | 265 return svgStyle.strokeDashArray()->isEmpty() |
253 && svgStyle.strokeMiterLimit() == SVGRenderStyle::initialStrokeMiterLimi
t() | 266 && svgStyle.strokeMiterLimit() == SVGRenderStyle::initialStrokeMiterLimi
t() |
254 && svgStyle.joinStyle() == SVGRenderStyle::initialJoinStyle() | 267 && svgStyle.joinStyle() == SVGRenderStyle::initialJoinStyle() |
255 && svgStyle.capStyle() == SVGRenderStyle::initialCapStyle(); | 268 && svgStyle.capStyle() == SVGRenderStyle::initialCapStyle(); |
256 } | 269 } |
257 | 270 |
258 } | 271 } |
OLD | NEW |