Title: [158972] trunk/Source/WebCore
Revision
158972
Author
[email protected]
Date
2013-11-08 16:27:50 -0800 (Fri, 08 Nov 2013)

Log Message

Teach CanvasObserver about references
https://bugs.webkit.org/show_bug.cgi?id=124082

Reviewed by Anders Carlsson.

* css/CSSCanvasValue.cpp:
* css/CSSCanvasValue.h:
* html/HTMLCanvasElement.cpp:
* html/HTMLCanvasElement.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (158971 => 158972)


--- trunk/Source/WebCore/ChangeLog	2013-11-09 00:25:24 UTC (rev 158971)
+++ trunk/Source/WebCore/ChangeLog	2013-11-09 00:27:50 UTC (rev 158972)
@@ -1,3 +1,15 @@
+2013-11-08  Sam Weinig  <[email protected]>
+
+        Teach CanvasObserver about references
+        https://bugs.webkit.org/show_bug.cgi?id=124082
+
+        Reviewed by Anders Carlsson.
+
+        * css/CSSCanvasValue.cpp:
+        * css/CSSCanvasValue.h:
+        * html/HTMLCanvasElement.cpp:
+        * html/HTMLCanvasElement.h:
+
 2013-11-08  Anders Carlsson  <[email protected]>
 
         Begin stubbing out a KeyedEncoder class in WebCore

Modified: trunk/Source/WebCore/css/CSSCanvasValue.cpp (158971 => 158972)


--- trunk/Source/WebCore/css/CSSCanvasValue.cpp	2013-11-09 00:25:24 UTC (rev 158971)
+++ trunk/Source/WebCore/css/CSSCanvasValue.cpp	2013-11-09 00:27:50 UTC (rev 158972)
@@ -35,7 +35,7 @@
 CSSCanvasValue::~CSSCanvasValue()
 {
     if (m_element)
-        m_element->removeObserver(&m_canvasObserver);
+        m_element->removeObserver(m_canvasObserver);
 }
 
 String CSSCanvasValue::customCSSText() const
@@ -47,22 +47,22 @@
     return result.toString();
 }
 
-void CSSCanvasValue::canvasChanged(HTMLCanvasElement*, const FloatRect& changedRect)
+void CSSCanvasValue::canvasChanged(HTMLCanvasElement&, const FloatRect& changedRect)
 {
     IntRect imageChangeRect = enclosingIntRect(changedRect);
     for (auto it = clients().begin(), end = clients().end(); it != end; ++it)
         it->key->imageChanged(static_cast<WrappedImagePtr>(this), &imageChangeRect);
 }
 
-void CSSCanvasValue::canvasResized(HTMLCanvasElement*)
+void CSSCanvasValue::canvasResized(HTMLCanvasElement&)
 {
     for (auto it = clients().begin(), end = clients().end(); it != end; ++it)
         it->key->imageChanged(static_cast<WrappedImagePtr>(this));
 }
 
-void CSSCanvasValue::canvasDestroyed(HTMLCanvasElement* element)
+void CSSCanvasValue::canvasDestroyed(HTMLCanvasElement& element)
 {
-    ASSERT_UNUSED(element, element == m_element);
+    ASSERT_UNUSED(&element, &element == m_element);
     m_element = nullptr;
 }
 
@@ -78,8 +78,8 @@
      if (!m_element) {
         m_element = document.getCSSCanvasElement(m_name);
         if (!m_element)
-            return 0;
-        m_element->addObserver(&m_canvasObserver);
+            return nullptr;
+        m_element->addObserver(m_canvasObserver);
     }
     return m_element;
 }

Modified: trunk/Source/WebCore/css/CSSCanvasValue.h (158971 => 158972)


--- trunk/Source/WebCore/css/CSSCanvasValue.h	2013-11-09 00:25:24 UTC (rev 158971)
+++ trunk/Source/WebCore/css/CSSCanvasValue.h	2013-11-09 00:27:50 UTC (rev 158972)
@@ -52,7 +52,7 @@
 private:
     explicit CSSCanvasValue(const String& name)
         : CSSImageGeneratorValue(CanvasClass)
-        , m_canvasObserver(this)
+        , m_canvasObserver(*this)
         , m_name(name)
         , m_element(0)
     {
@@ -62,27 +62,33 @@
     // to avoid adding a vptr to CSSCanvasValue.
     class CanvasObserverProxy : public CanvasObserver {
     public:
-        CanvasObserverProxy(CSSCanvasValue* ownerValue) : m_ownerValue(ownerValue) { }
-        virtual ~CanvasObserverProxy() { }
-        virtual void canvasChanged(HTMLCanvasElement* canvas, const FloatRect& changedRect)
+        CanvasObserverProxy(CSSCanvasValue& ownerValue)
+            : m_ownerValue(ownerValue)
         {
-            m_ownerValue->canvasChanged(canvas, changedRect);
         }
-        virtual void canvasResized(HTMLCanvasElement* canvas)
+        virtual ~CanvasObserverProxy()
         {
-            m_ownerValue->canvasResized(canvas);
         }
-        virtual void canvasDestroyed(HTMLCanvasElement* canvas)
+        virtual void canvasChanged(HTMLCanvasElement& canvas, const FloatRect& changedRect)
         {
-            m_ownerValue->canvasDestroyed(canvas);
+            m_ownerValue.canvasChanged(canvas, changedRect);
         }
+        virtual void canvasResized(HTMLCanvasElement& canvas)
+        {
+            m_ownerValue.canvasResized(canvas);
+        }
+        virtual void canvasDestroyed(HTMLCanvasElement& canvas)
+        {
+            m_ownerValue.canvasDestroyed(canvas);
+        }
+
     private:
-        CSSCanvasValue* m_ownerValue;
+        CSSCanvasValue& m_ownerValue;
     };
 
-    void canvasChanged(HTMLCanvasElement*, const FloatRect& changedRect);
-    void canvasResized(HTMLCanvasElement*);
-    void canvasDestroyed(HTMLCanvasElement*);
+    void canvasChanged(HTMLCanvasElement&, const FloatRect& changedRect);
+    void canvasResized(HTMLCanvasElement&);
+    void canvasDestroyed(HTMLCanvasElement&);
 
     HTMLCanvasElement* element(Document&);
 

Modified: trunk/Source/WebCore/html/HTMLCanvasElement.cpp (158971 => 158972)


--- trunk/Source/WebCore/html/HTMLCanvasElement.cpp	2013-11-09 00:25:24 UTC (rev 158971)
+++ trunk/Source/WebCore/html/HTMLCanvasElement.cpp	2013-11-09 00:27:50 UTC (rev 158972)
@@ -93,9 +93,8 @@
 
 HTMLCanvasElement::~HTMLCanvasElement()
 {
-    HashSet<CanvasObserver*>::iterator end = m_observers.end();
-    for (HashSet<CanvasObserver*>::iterator it = m_observers.begin(); it != end; ++it)
-        (*it)->canvasDestroyed(this);
+    for (auto it = m_observers.begin(), end = m_observers.end(); it != end; ++it)
+        (*it)->canvasDestroyed(*this);
 
     m_context.clear(); // Ensure this goes away before the ImageBuffer.
 }
@@ -139,14 +138,14 @@
     return false;
 }
 
-void HTMLCanvasElement::addObserver(CanvasObserver* observer)
+void HTMLCanvasElement::addObserver(CanvasObserver& observer)
 {
-    m_observers.add(observer);
+    m_observers.add(&observer);
 }
 
-void HTMLCanvasElement::removeObserver(CanvasObserver* observer)
+void HTMLCanvasElement::removeObserver(CanvasObserver& observer)
 {
-    m_observers.remove(observer);
+    m_observers.remove(&observer);
 }
 
 void HTMLCanvasElement::setHeight(int value)
@@ -285,9 +284,8 @@
 
 void HTMLCanvasElement::notifyObserversCanvasChanged(const FloatRect& rect)
 {
-    HashSet<CanvasObserver*>::iterator end = m_observers.end();
-    for (HashSet<CanvasObserver*>::iterator it = m_observers.begin(); it != end; ++it)
-        (*it)->canvasChanged(this, rect);
+    for (auto it = m_observers.begin(), end = m_observers.end(); it != end; ++it)
+        (*it)->canvasChanged(*this, rect);
 }
 
 void HTMLCanvasElement::reset()
@@ -352,9 +350,8 @@
         }
     }
 
-    HashSet<CanvasObserver*>::iterator end = m_observers.end();
-    for (HashSet<CanvasObserver*>::iterator it = m_observers.begin(); it != end; ++it)
-        (*it)->canvasResized(this);
+    for (auto it = m_observers.begin(), end = m_observers.end(); it != end; ++it)
+        (*it)->canvasResized(*this);
 }
 
 float HTMLCanvasElement::targetDeviceScaleFactor() const

Modified: trunk/Source/WebCore/html/HTMLCanvasElement.h (158971 => 158972)


--- trunk/Source/WebCore/html/HTMLCanvasElement.h	2013-11-09 00:25:24 UTC (rev 158971)
+++ trunk/Source/WebCore/html/HTMLCanvasElement.h	2013-11-09 00:27:50 UTC (rev 158972)
@@ -55,9 +55,9 @@
 public:
     virtual ~CanvasObserver() { }
 
-    virtual void canvasChanged(HTMLCanvasElement*, const FloatRect& changedRect) = 0;
-    virtual void canvasResized(HTMLCanvasElement*) = 0;
-    virtual void canvasDestroyed(HTMLCanvasElement*) = 0;
+    virtual void canvasChanged(HTMLCanvasElement&, const FloatRect& changedRect) = 0;
+    virtual void canvasResized(HTMLCanvasElement&) = 0;
+    virtual void canvasDestroyed(HTMLCanvasElement&) = 0;
 };
 
 class HTMLCanvasElement FINAL : public HTMLElement {
@@ -66,8 +66,8 @@
     static PassRefPtr<HTMLCanvasElement> create(const QualifiedName&, Document&);
     virtual ~HTMLCanvasElement();
 
-    void addObserver(CanvasObserver*);
-    void removeObserver(CanvasObserver*);
+    void addObserver(CanvasObserver&);
+    void removeObserver(CanvasObserver&);
 
     // Attributes and functions exposed to script
     int width() const { return size().width(); }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to