Use #pragma once in WebCore
[WebKit-https.git] / Source / WebCore / rendering / svg / RenderSVGResourceGradient.h
index df492e2..e7918f5 100644 (file)
  * Boston, MA 02110-1301, USA.
  */
 
-#ifndef RenderSVGResourceGradient_h
-#define RenderSVGResourceGradient_h
+#pragma once
 
-#if ENABLE(SVG)
-#include "AffineTransform.h"
-#include "FloatRect.h"
 #include "Gradient.h"
 #include "ImageBuffer.h"
 #include "RenderSVGResourceContainer.h"
 #include "SVGGradientElement.h"
-
+#include <memory>
 #include <wtf/HashMap.h>
 
 namespace WebCore {
 
 struct GradientData {
+    WTF_MAKE_FAST_ALLOCATED;
+public:
     RefPtr<Gradient> gradient;
     AffineTransform userspaceTransform;
 };
@@ -43,37 +41,37 @@ class GraphicsContext;
 
 class RenderSVGResourceGradient : public RenderSVGResourceContainer {
 public:
-    RenderSVGResourceGradient(SVGGradientElement*);
-    virtual ~RenderSVGResourceGradient();
+    SVGGradientElement& gradientElement() const { return static_cast<SVGGradientElement&>(RenderSVGResourceContainer::element()); }
 
-    virtual void removeAllClientsFromCache(bool markForInvalidation = true);
-    virtual void removeClientFromCache(RenderObject*, bool markForInvalidation = true);
+    void removeAllClientsFromCache(bool markForInvalidation = true) final;
+    void removeClientFromCache(RenderElement&, bool markForInvalidation = true) final;
 
-    virtual bool applyResource(RenderObject*, RenderStyle*, GraphicsContext*&, unsigned short resourceMode);
-    virtual void postApplyResource(RenderObject*, GraphicsContext*&, unsigned short resourceMode, const Path*);
-    virtual FloatRect resourceBoundingBox(RenderObject*) { return FloatRect(); }
+    bool applyResource(RenderElement&, const RenderStyle&, GraphicsContext*&, unsigned short resourceMode) final;
+    void postApplyResource(RenderElement&, GraphicsContext*&, unsigned short resourceMode, const Path*, const RenderSVGShape*) final;
+    FloatRect resourceBoundingBox(const RenderObject&) final { return FloatRect(); }
 
 protected:
+    RenderSVGResourceGradient(SVGGradientElement&, RenderStyle&&);
+
+    void element() const = delete;
+
     void addStops(GradientData*, const Vector<Gradient::ColorStop>&) const;
 
-    virtual bool boundingBoxMode() const = 0;
+    virtual SVGUnitTypes::SVGUnitType gradientUnits() const = 0;
     virtual void calculateGradientTransform(AffineTransform&) = 0;
-    virtual bool collectGradientAttributes(SVGGradientElement*) = 0;
-    virtual void buildGradient(GradientData*, SVGGradientElement*) const = 0;
+    virtual bool collectGradientAttributes() = 0;
+    virtual void buildGradient(GradientData*) const = 0;
 
     GradientSpreadMethod platformSpreadMethodFromSVGType(SVGSpreadMethodType) const;
 
 private:
     bool m_shouldCollectGradientAttributes : 1;
-    HashMap<RenderObject*, GradientData*> m_gradient;
+    HashMap<RenderObject*, std::unique_ptr<GradientData>> m_gradientMap;
 
 #if USE(CG)
     GraphicsContext* m_savedContext;
-    OwnPtr<ImageBuffer> m_imageBuffer;
+    std::unique_ptr<ImageBuffer> m_imageBuffer;
 #endif
 };
 
-}
-
-#endif
-#endif
+} // namespace WebCore