Rename AtomicString to AtomString
[WebKit-https.git] / Source / WebCore / svg / SVGTextPathElement.h
index b29f6e9..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"
@@ -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();
@@ -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 FINAL : 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,44 +109,44 @@ public:
         TEXTPATH_SPACINGTYPE_EXACT = SVGTextPathSpacingExact
     };
 
-    static PassRefPtr<SVGTextPathElement> create(const QualifiedName&, Document*);
-private:
-    SVGTextPathElement(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 ~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;
 
-    virtual void buildPendingResource();
-    virtual InsertionNotificationRequest insertedInto(ContainerNode*) OVERRIDE;
-    virtual void removedFrom(ContainerNode*) OVERRIDE;
-
-    bool isSupportedAttribute(const QualifiedName&);
-    virtual void parseAttribute(const QualifiedName&, const AtomicString&) OVERRIDE;
-    virtual void svgAttributeChanged(const QualifiedName&);
-
-    virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
-    virtual bool childShouldCreateRenderer(const Node*) const;
-    virtual bool rendererIsNeeded(const RenderStyle&);
-
-    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
-};
+    bool selfHasRelativeLengths() const override;
 
-inline SVGTextPathElement* toSVGTextPathElement(Node* node)
-{
-    ASSERT_WITH_SECURITY_IMPLICATION(!node || node->hasTagName(SVGNames::textPathTag));
-    return static_cast<SVGTextPathElement*>(node);
-}
+    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