Rename AtomicString to AtomString
[WebKit-https.git] / Source / WebCore / svg / SVGTextPathElement.h
index 99bf622..5677f5b 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org>
+ * Copyright (C) 2018-2019 Apple Inc. All rights reserved.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
  * Boston, MA 02110-1301, USA.
  */
 
-#ifndef SVGTextPathElement_h
-#define SVGTextPathElement_h
+#pragma once
 
-#if ENABLE(SVG)
+#include "SVGNames.h"
 #include "SVGTextContentElement.h"
-
 #include "SVGURIReference.h"
 
 namespace WebCore {
@@ -41,7 +40,7 @@ enum SVGTextPathSpacingType {
 
 template<>
 struct SVGPropertyTraits<SVGTextPathMethodType> {
-    static SVGTextPathMethodType highestEnumValue() { return SVGTextPathMethodStretch; }
+    static unsigned highestEnumValue() { return SVGTextPathMethodStretch; }
 
     static String toString(SVGTextPathMethodType type)
     {
@@ -49,9 +48,9 @@ struct SVGPropertyTraits<SVGTextPathMethodType> {
         case SVGTextPathMethodUnknown:
             return emptyString();
         case SVGTextPathMethodAlign:
-            return "align";
+            return "align"_s;
         case SVGTextPathMethodStretch:
-            return "stretch";
+            return "stretch"_s;
         }
     
         ASSERT_NOT_REACHED();
@@ -70,7 +69,7 @@ struct SVGPropertyTraits<SVGTextPathMethodType> {
 
 template<>
 struct SVGPropertyTraits<SVGTextPathSpacingType> {
-    static SVGTextPathSpacingType highestEnumValue() { return SVGTextPathSpacingExact; }
+    static unsigned highestEnumValue() { return SVGTextPathSpacingExact; }
 
     static String toString(SVGTextPathSpacingType type)
     {
@@ -78,9 +77,9 @@ struct SVGPropertyTraits<SVGTextPathSpacingType> {
         case SVGTextPathSpacingUnknown:
             return emptyString();
         case SVGTextPathSpacingAuto:
-            return "auto";
+            return "auto"_s;
         case SVGTextPathSpacingExact:
-            return "exact";
+            return "exact"_s;
         }
 
         ASSERT_NOT_REACHED();
@@ -97,8 +96,8 @@ struct SVGPropertyTraits<SVGTextPathSpacingType> {
     }
 };
 
-class SVGTextPathElement : public SVGTextContentElement,
-                           public SVGURIReference {
+class SVGTextPathElement final : public SVGTextContentElement, public SVGURIReference {
+    WTF_MAKE_ISO_ALLOCATED(SVGTextPathElement);
 public:
     // Forward declare enumerations in the W3C naming scheme, for IDL generation.
     enum {
@@ -110,32 +109,44 @@ public:
         TEXTPATH_SPACINGTYPE_EXACT = SVGTextPathSpacingExact
     };
 
-    static PassRefPtr<SVGTextPathElement> create(const QualifiedName&, Document*);
+    static Ref<SVGTextPathElement> create(const QualifiedName&, Document&);
+
+    const SVGLengthValue& startOffset() const { return m_startOffset->currentValue(); }
+    SVGTextPathMethodType method() const { return m_method->currentValue<SVGTextPathMethodType>(); }
+    SVGTextPathSpacingType spacing() const { return m_spacing->currentValue<SVGTextPathSpacingType>(); }
+
+    SVGAnimatedLength& startOffsetAnimated() { return m_startOffset; }
+    SVGAnimatedEnumeration& methodAnimated() { return m_method; }
+    SVGAnimatedEnumeration& spacingAnimated() { return m_spacing; }
+
+protected:
+    void didFinishInsertingNode() override;
+
 private:
-    SVGTextPathElement(const QualifiedName&, Document*);
-
-    virtual void insertedIntoDocument();
-
-    bool isSupportedAttribute(const QualifiedName&);
-    virtual void parseAttribute(Attribute*) OVERRIDE;
-    virtual void svgAttributeChanged(const QualifiedName&);
-
-    virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
-    virtual bool childShouldCreateRenderer(const NodeRenderingContext&) const;
-    virtual bool rendererIsNeeded(const NodeRenderingContext&);
-
-    virtual bool selfHasRelativeLengths() const;
-    BEGIN_DECLARE_ANIMATED_PROPERTIES(SVGTextPathElement)
-        DECLARE_ANIMATED_LENGTH(StartOffset, startOffset)
-        DECLARE_ANIMATED_ENUMERATION(Method, method, SVGTextPathMethodType)
-        DECLARE_ANIMATED_ENUMERATION(Spacing, spacing, SVGTextPathSpacingType)
-        DECLARE_ANIMATED_STRING(Href, href)
-    END_DECLARE_ANIMATED_PROPERTIES
+    SVGTextPathElement(const QualifiedName&, Document&);
+    virtual ~SVGTextPathElement();
+
+    using PropertyRegistry = SVGPropertyOwnerRegistry<SVGTextPathElement, SVGTextContentElement, SVGURIReference>;
+    const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
+
+    void parseAttribute(const QualifiedName&, const AtomString&) override;
+    void svgAttributeChanged(const QualifiedName&) override;
+
+    RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) override;
+    bool childShouldCreateRenderer(const Node&) const override;
+    bool rendererIsNeeded(const RenderStyle&) override;
+
+    void clearResourceReferences();
+    void buildPendingResource() override;
+    InsertedIntoAncestorResult insertedIntoAncestor(InsertionType, ContainerNode&) override;
+    void removedFromAncestor(RemovalType, ContainerNode&) override;
+
+    bool selfHasRelativeLengths() const override;
+
+    PropertyRegistry m_propertyRegistry { *this };
+    Ref<SVGAnimatedLength> m_startOffset { SVGAnimatedLength::create(this, LengthModeOther) };
+    Ref<SVGAnimatedEnumeration> m_method { SVGAnimatedEnumeration::create(this, SVGTextPathMethodAlign) };
+    Ref<SVGAnimatedEnumeration> m_spacing { SVGAnimatedEnumeration::create(this, SVGTextPathSpacingExact) };
 };
 
 } // namespace WebCore
-
-#endif // ENABLE(SVG)
-#endif