Index: Source/core/rendering/RenderObject.h |
diff --git a/Source/core/rendering/RenderObject.h b/Source/core/rendering/RenderObject.h |
index 37044c4e86d4d75cf6aaf806978ec085e94876d0..c26d17233a4444338e227ca25f5ea9fafdf3a2eb 100644 |
--- a/Source/core/rendering/RenderObject.h |
+++ b/Source/core/rendering/RenderObject.h |
@@ -427,25 +427,48 @@ public: |
FlowThreadState flowThreadState() const { return m_bitfields.flowThreadState(); } |
void setFlowThreadState(FlowThreadState state) { m_bitfields.setFlowThreadState(state); } |
- // FIXME: Until all SVG renders can be subclasses of RenderSVGModelObject we have |
- // to add SVG renderer methods to RenderObject with an ASSERT_NOT_REACHED() default implementation. |
- virtual bool isSVGRoot() const { return false; } |
- virtual bool isSVGContainer() const { return false; } |
- virtual bool isSVGTransformableContainer() const { return false; } |
- virtual bool isSVGViewportContainer() const { return false; } |
- virtual bool isSVGGradientStop() const { return false; } |
- virtual bool isSVGHiddenContainer() const { return false; } |
- virtual bool isSVGPath() const { return false; } |
- virtual bool isSVGShape() const { return false; } |
- virtual bool isSVGText() const { return false; } |
- virtual bool isSVGTextPath() const { return false; } |
- virtual bool isSVGInline() const { return false; } |
- virtual bool isSVGInlineText() const { return false; } |
- virtual bool isSVGImage() const { return false; } |
- virtual bool isSVGForeignObject() const { return false; } |
- virtual bool isSVGResourceContainer() const { return false; } |
- virtual bool isSVGResourceFilter() const { return false; } |
- virtual bool isSVGResourceFilterPrimitive() const { return false; } |
+ // FIXME: Until all SVG renderers are subclasses of RenderSVGModelObject, we have to |
+ // maintain this parallel type system in RenderObject. |
+ // Note: All updates to the SVG renderer hierarchy must update the enum below. |
+ enum SVGType { |
+ IsNotSVG = 0, |
+ IsSVGRoot = 1, |
+ IsSVGContainer = 1 << 1, |
+ IsSVGTransformableContainer = 1 << 2 | IsSVGContainer, |
+ IsSVGViewportContainer = 1 << 3 | IsSVGContainer, |
+ IsSVGGradientStop = 1 << 4, |
+ IsSVGHiddenContainer = 1 << 5 | IsSVGContainer, |
+ IsSVGShape = 1 << 6, |
+ IsSVGPath = 1 << 7 | IsSVGShape, |
+ IsSVGText = 1 << 8, |
+ IsSVGInline = 1 << 9, |
+ IsSVGTextPath = 1 << 10 | IsSVGInline, |
+ IsSVGInlineText = 1 << 11, |
+ IsSVGImage = 1 << 12, |
+ IsSVGForeignObject = 1 << 13, |
+ IsSVGResourceContainer = 1 << 14 | IsSVGHiddenContainer, |
+ IsSVGResourceFilter = 1 << 15 | IsSVGResourceContainer, |
+ IsSVGResourceFilterPrimitive = 1 << 16 | IsSVGHiddenContainer |
+ }; |
+ bool hasSVGType(SVGType mask) const { return mask == (mask & getSVGType()); } |
+ bool isSVG() const { return getSVGType(); } |
+ bool isSVGRoot() const { return hasSVGType(IsSVGRoot); } |
+ bool isSVGContainer() const { return hasSVGType(IsSVGContainer); } |
+ bool isSVGTransformableContainer() const { return hasSVGType(IsSVGTransformableContainer); } |
+ bool isSVGViewportContainer() const { return hasSVGType(IsSVGViewportContainer); } |
+ bool isSVGGradientStop() const { return hasSVGType(IsSVGGradientStop); } |
+ bool isSVGHiddenContainer() const { return hasSVGType(IsSVGHiddenContainer); } |
+ bool isSVGPath() const { return hasSVGType(IsSVGPath); } |
+ bool isSVGShape() const { return hasSVGType(IsSVGShape); } |
+ bool isSVGText() const { return hasSVGType(IsSVGText); } |
+ bool isSVGTextPath() const { return hasSVGType(IsSVGTextPath); } |
+ bool isSVGInline() const { return hasSVGType(IsSVGInline); } |
+ bool isSVGInlineText() const { return hasSVGType(IsSVGInlineText); } |
+ bool isSVGImage() const { return hasSVGType(IsSVGImage); } |
+ bool isSVGForeignObject() const { return hasSVGType(IsSVGForeignObject); } |
+ bool isSVGResourceContainer() const { return hasSVGType(IsSVGResourceContainer); } |
+ bool isSVGResourceFilter() const { return hasSVGType(IsSVGResourceFilter); } |
+ bool isSVGResourceFilterPrimitive() const { return hasSVGType(IsSVGResourceFilterPrimitive); } |
// FIXME: Those belong into a SVG specific base-class for all renderers (see above) |
// Unfortunately we don't have such a class yet, because it's not possible for all renderers |
@@ -1056,6 +1079,8 @@ protected: |
// of this renderer within the current layer that should be used for each result. |
virtual void computeSelfHitTestRects(Vector<LayoutRect>&, const LayoutPoint& layerOffset) const { }; |
+ virtual SVGType getSVGType() const { return IsNotSVG; } |
+ |
private: |
RenderBlock* containerForFixedPosition(const RenderLayerModelObject* repaintContainer = 0, bool* repaintContainerSkipped = 0) const; |