Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / svg / SVGZoomAndPan.h
index b1432eb..5b5c69c 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Copyright (C) 2004, 2005, 2008 Nikolas Zimmermann <zimmermann@kde.org>
  * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org>
+ * Copyright (C) 2014 Samsung Electronics. 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
@@ -27,6 +28,9 @@
 
 namespace WebCore {
 
+class ExceptionState;
+class SVGViewSpec;
+
 enum SVGZoomAndPanType {
     SVGZoomAndPanUnknown = 0,
     SVGZoomAndPanDisable,
@@ -52,38 +56,42 @@ public:
         return static_cast<SVGZoomAndPanType>(number);
     }
 
-    static bool parseZoomAndPan(const LChar*& start, const LChar* end, SVGZoomAndPanType&);
-    static bool parseZoomAndPan(const UChar*& start, const UChar* end, SVGZoomAndPanType&);
+    bool parseZoomAndPan(const LChar*& start, const LChar* end);
+    bool parseZoomAndPan(const UChar*& start, const UChar* end);
 
-    template<class SVGElementTarget>
-    static bool parseAttribute(SVGElementTarget* target, const QualifiedName& name, const AtomicString& value)
+    bool parseAttribute(const QualifiedName& name, const AtomicString& value)
     {
-        ASSERT(target);
         if (name == SVGNames::zoomAndPanAttr) {
-            SVGZoomAndPanType zoomAndPan = SVGZoomAndPanUnknown;
+            m_zoomAndPan = SVGZoomAndPanUnknown;
             if (!value.isEmpty()) {
                 if (value.is8Bit()) {
                     const LChar* start = value.characters8();
-                    parseZoomAndPan(start, start + value.length(), zoomAndPan);
+                    parseZoomAndPan(start, start + value.length());
                 } else {
                     const UChar* start = value.characters16();
-                    parseZoomAndPan(start, start + value.length(), zoomAndPan);
+                    parseZoomAndPan(start, start + value.length());
                 }
             }
-            target->setZoomAndPan(zoomAndPan);
             return true;
         }
 
         return false;
     }
 
-    SVGZoomAndPanType zoomAndPan() const { return SVGZoomAndPanUnknown; }
+    // SVGZoomAndPan JS API.
+    static SVGZoomAndPanType zoomAndPan(SVGZoomAndPan* object) { return object->m_zoomAndPan; }
+    static void setZoomAndPan(SVGZoomAndPan* object, unsigned short value, ExceptionState&) { object->setZoomAndPan(value); }
+    static void setZoomAndPan(SVGViewSpec*, unsigned short, ExceptionState&);
+
+    void setZoomAndPan(unsigned short value) { m_zoomAndPan = parseFromNumber(value); }
+    SVGZoomAndPanType zoomAndPan() const { return m_zoomAndPan; }
+
+protected:
+    SVGZoomAndPan();
+    void resetZoomAndPan();
 
-    // These methods only exist to allow us to compile V8/JSSVGZoomAndPan.*.
-    // These are never called, and thus ASSERT_NOT_REACHED.
-    void ref();
-    void deref();
-    void setZoomAndPan(unsigned short);
+private:
+    SVGZoomAndPanType m_zoomAndPan;
 };
 
 } // namespace WebCore