| 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 22 matching lines...) Expand all Loading... |
| 33 #include "core/platform/graphics/GraphicsContextStateSaver.h" | 33 #include "core/platform/graphics/GraphicsContextStateSaver.h" |
| 34 #include "core/rendering/HitTestRequest.h" | 34 #include "core/rendering/HitTestRequest.h" |
| 35 #include "core/rendering/LayoutRepainter.h" | 35 #include "core/rendering/LayoutRepainter.h" |
| 36 #include "core/rendering/PointerEventsHitRules.h" | 36 #include "core/rendering/PointerEventsHitRules.h" |
| 37 #include "core/rendering/svg/RenderSVGResourceMarker.h" | 37 #include "core/rendering/svg/RenderSVGResourceMarker.h" |
| 38 #include "core/rendering/svg/RenderSVGResourceSolidColor.h" | 38 #include "core/rendering/svg/RenderSVGResourceSolidColor.h" |
| 39 #include "core/rendering/svg/SVGPathData.h" | 39 #include "core/rendering/svg/SVGPathData.h" |
| 40 #include "core/rendering/svg/SVGRenderingContext.h" | 40 #include "core/rendering/svg/SVGRenderingContext.h" |
| 41 #include "core/rendering/svg/SVGResources.h" | 41 #include "core/rendering/svg/SVGResources.h" |
| 42 #include "core/rendering/svg/SVGResourcesCache.h" | 42 #include "core/rendering/svg/SVGResourcesCache.h" |
| 43 #include "core/svg/SVGStyledTransformableElement.h" | 43 #include "core/svg/SVGGraphicsElement.h" |
| 44 #include <wtf/MathExtras.h> | 44 #include <wtf/MathExtras.h> |
| 45 | 45 |
| 46 namespace WebCore { | 46 namespace WebCore { |
| 47 | 47 |
| 48 RenderSVGShape::RenderSVGShape(SVGStyledTransformableElement* node) | 48 RenderSVGShape::RenderSVGShape(SVGGraphicsElement* node) |
| 49 : RenderSVGModelObject(node) | 49 : RenderSVGModelObject(node) |
| 50 , m_needsBoundariesUpdate(false) // Default is false, the cached rects are e
mpty from the beginning. | 50 , m_needsBoundariesUpdate(false) // Default is false, the cached rects are e
mpty from the beginning. |
| 51 , m_needsShapeUpdate(true) // Default is true, so we grab a Path object once
from SVGStyledTransformableElement. | 51 , m_needsShapeUpdate(true) // Default is true, so we grab a Path object once
from SVGGraphicsElement. |
| 52 , m_needsTransformUpdate(true) // Default is true, so we grab a AffineTransf
orm object once from SVGStyledTransformableElement. | 52 , m_needsTransformUpdate(true) // Default is true, so we grab a AffineTransf
orm object once from SVGGraphicsElement. |
| 53 { | 53 { |
| 54 } | 54 } |
| 55 | 55 |
| 56 RenderSVGShape::~RenderSVGShape() | 56 RenderSVGShape::~RenderSVGShape() |
| 57 { | 57 { |
| 58 } | 58 } |
| 59 | 59 |
| 60 void RenderSVGShape::updateShapeFromElement() | 60 void RenderSVGShape::updateShapeFromElement() |
| 61 { | 61 { |
| 62 m_path.clear(); | 62 m_path.clear(); |
| 63 m_path = adoptPtr(new Path); | 63 m_path = adoptPtr(new Path); |
| 64 ASSERT(RenderSVGShape::isEmpty()); | 64 ASSERT(RenderSVGShape::isEmpty()); |
| 65 | 65 |
| 66 SVGStyledTransformableElement* element = toSVGStyledTransformableElement(nod
e()); | 66 SVGGraphicsElement* element = toSVGGraphicsElement(node()); |
| 67 updatePathFromGraphicsElement(element, path()); | 67 updatePathFromGraphicsElement(element, path()); |
| 68 processMarkerPositions(); | 68 processMarkerPositions(); |
| 69 | 69 |
| 70 m_fillBoundingBox = calculateObjectBoundingBox(); | 70 m_fillBoundingBox = calculateObjectBoundingBox(); |
| 71 m_strokeBoundingBox = calculateStrokeBoundingBox(); | 71 m_strokeBoundingBox = calculateStrokeBoundingBox(); |
| 72 } | 72 } |
| 73 | 73 |
| 74 bool RenderSVGShape::isEmpty() const | 74 bool RenderSVGShape::isEmpty() const |
| 75 { | 75 { |
| 76 return path().isEmpty(); | 76 return path().isEmpty(); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 134 if (requiresStroke && !RenderSVGResource::strokePaintingResource(this, style
(), fallbackColor)) | 134 if (requiresStroke && !RenderSVGResource::strokePaintingResource(this, style
(), fallbackColor)) |
| 135 return false; | 135 return false; |
| 136 | 136 |
| 137 return shapeDependentStrokeContains(point); | 137 return shapeDependentStrokeContains(point); |
| 138 } | 138 } |
| 139 | 139 |
| 140 void RenderSVGShape::layout() | 140 void RenderSVGShape::layout() |
| 141 { | 141 { |
| 142 StackStats::LayoutCheckPoint layoutCheckPoint; | 142 StackStats::LayoutCheckPoint layoutCheckPoint; |
| 143 LayoutRepainter repainter(*this, SVGRenderSupport::checkForSVGRepaintDuringL
ayout(this) && selfNeedsLayout()); | 143 LayoutRepainter repainter(*this, SVGRenderSupport::checkForSVGRepaintDuringL
ayout(this) && selfNeedsLayout()); |
| 144 SVGStyledTransformableElement* element = toSVGStyledTransformableElement(nod
e()); | 144 SVGGraphicsElement* element = toSVGGraphicsElement(node()); |
| 145 | 145 |
| 146 bool updateCachedBoundariesInParents = false; | 146 bool updateCachedBoundariesInParents = false; |
| 147 | 147 |
| 148 if (m_needsShapeUpdate || m_needsBoundariesUpdate) { | 148 if (m_needsShapeUpdate || m_needsBoundariesUpdate) { |
| 149 updateShapeFromElement(); | 149 updateShapeFromElement(); |
| 150 m_needsShapeUpdate = false; | 150 m_needsShapeUpdate = false; |
| 151 updateRepaintBoundingBox(); | 151 updateRepaintBoundingBox(); |
| 152 m_needsBoundariesUpdate = false; | 152 m_needsBoundariesUpdate = false; |
| 153 updateCachedBoundariesInParents = true; | 153 updateCachedBoundariesInParents = true; |
| 154 } | 154 } |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 186 if (!strokeTransform.isInvertible()) | 186 if (!strokeTransform.isInvertible()) |
| 187 return false; | 187 return false; |
| 188 | 188 |
| 189 stateSaver.save(); | 189 stateSaver.save(); |
| 190 stateSaver.context()->concatCTM(strokeTransform.inverse()); | 190 stateSaver.context()->concatCTM(strokeTransform.inverse()); |
| 191 return true; | 191 return true; |
| 192 } | 192 } |
| 193 | 193 |
| 194 AffineTransform RenderSVGShape::nonScalingStrokeTransform() const | 194 AffineTransform RenderSVGShape::nonScalingStrokeTransform() const |
| 195 { | 195 { |
| 196 SVGStyledTransformableElement* element = toSVGStyledTransformableElement(nod
e()); | 196 SVGGraphicsElement* element = toSVGGraphicsElement(node()); |
| 197 return element->getScreenCTM(SVGLocatable::DisallowStyleUpdate); | 197 return element->getScreenCTM(SVGLocatable::DisallowStyleUpdate); |
| 198 } | 198 } |
| 199 | 199 |
| 200 bool RenderSVGShape::shouldGenerateMarkerPositions() const | 200 bool RenderSVGShape::shouldGenerateMarkerPositions() const |
| 201 { | 201 { |
| 202 if (!style()->svgStyle()->hasMarkers()) | 202 if (!style()->svgStyle()->hasMarkers()) |
| 203 return false; | 203 return false; |
| 204 | 204 |
| 205 SVGStyledTransformableElement* element = toSVGStyledTransformableElement(nod
e()); | 205 SVGGraphicsElement* element = toSVGGraphicsElement(node()); |
| 206 if (!element->supportsMarkers()) | 206 if (!element->supportsMarkers()) |
| 207 return false; | 207 return false; |
| 208 | 208 |
| 209 SVGResources* resources = SVGResourcesCache::cachedResourcesForRenderObject(
this); | 209 SVGResources* resources = SVGResourcesCache::cachedResourcesForRenderObject(
this); |
| 210 if (!resources) | 210 if (!resources) |
| 211 return false; | 211 return false; |
| 212 | 212 |
| 213 return resources->markerStart() || resources->markerMid() || resources->mark
erEnd(); | 213 return resources->markerStart() || resources->markerMid() || resources->mark
erEnd(); |
| 214 } | 214 } |
| 215 | 215 |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 457 return; | 457 return; |
| 458 | 458 |
| 459 ASSERT(m_path); | 459 ASSERT(m_path); |
| 460 | 460 |
| 461 SVGMarkerData markerData(m_markerPositions); | 461 SVGMarkerData markerData(m_markerPositions); |
| 462 m_path->apply(&markerData, SVGMarkerData::updateFromPathElement); | 462 m_path->apply(&markerData, SVGMarkerData::updateFromPathElement); |
| 463 markerData.pathIsDone(); | 463 markerData.pathIsDone(); |
| 464 } | 464 } |
| 465 | 465 |
| 466 } | 466 } |
| OLD | NEW |