Title: [277543] trunk/Source/WebCore
Revision
277543
Author
[email protected]
Date
2021-05-15 10:51:24 -0700 (Sat, 15 May 2021)

Log Message

Move CanvasRenderingContext2DSettings down to CanvasRenderingContext2DBase so it can be used there (and to support OffscreenCanvas)
https://bugs.webkit.org/show_bug.cgi?id=225836

Reviewed by Simon Fraser.

In subsequent changes, it will be useful to have CanvasRenderingContext2DSettings accessible
in CanvasRenderingContext2DBase for implementing color space support in ImageData.

While doing this, I noticed it was trivial to add support for passing the settings
to OffscreenCanvasRenderingContext2D, so I add that as well.

* html/OffscreenCanvas.cpp:
(WebCore::OffscreenCanvas::getContext):
* html/canvas/CanvasRenderingContext2D.cpp:
(WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
(WebCore::CanvasRenderingContext2D::pixelFormat const): Deleted.
(WebCore::CanvasRenderingContext2D::colorSpace const): Deleted.
* html/canvas/CanvasRenderingContext2D.h:
* html/canvas/CanvasRenderingContext2DBase.cpp:
(WebCore::CanvasRenderingContext2DBase::CanvasRenderingContext2DBase):
(WebCore::CanvasRenderingContext2DBase::pixelFormat const):
(WebCore::CanvasRenderingContext2DBase::colorSpace const):
* html/canvas/CanvasRenderingContext2DBase.h:
(WebCore::CanvasRenderingContext2DBase::getContextAttributes const):
* html/canvas/OffscreenCanvasRenderingContext2D.cpp:
(WebCore::OffscreenCanvasRenderingContext2D::OffscreenCanvasRenderingContext2D):
* html/canvas/OffscreenCanvasRenderingContext2D.h:
* html/canvas/PaintRenderingContext2D.cpp:
(WebCore::PaintRenderingContext2D::PaintRenderingContext2D):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (277542 => 277543)


--- trunk/Source/WebCore/ChangeLog	2021-05-15 17:50:07 UTC (rev 277542)
+++ trunk/Source/WebCore/ChangeLog	2021-05-15 17:51:24 UTC (rev 277543)
@@ -1,3 +1,35 @@
+2021-05-15  Sam Weinig  <[email protected]>
+
+        Move CanvasRenderingContext2DSettings down to CanvasRenderingContext2DBase so it can be used there (and to support OffscreenCanvas)
+        https://bugs.webkit.org/show_bug.cgi?id=225836
+
+        Reviewed by Simon Fraser.
+
+        In subsequent changes, it will be useful to have CanvasRenderingContext2DSettings accessible
+        in CanvasRenderingContext2DBase for implementing color space support in ImageData. 
+
+        While doing this, I noticed it was trivial to add support for passing the settings
+        to OffscreenCanvasRenderingContext2D, so I add that as well.
+
+        * html/OffscreenCanvas.cpp:
+        (WebCore::OffscreenCanvas::getContext):
+        * html/canvas/CanvasRenderingContext2D.cpp:
+        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
+        (WebCore::CanvasRenderingContext2D::pixelFormat const): Deleted.
+        (WebCore::CanvasRenderingContext2D::colorSpace const): Deleted.
+        * html/canvas/CanvasRenderingContext2D.h:
+        * html/canvas/CanvasRenderingContext2DBase.cpp:
+        (WebCore::CanvasRenderingContext2DBase::CanvasRenderingContext2DBase):
+        (WebCore::CanvasRenderingContext2DBase::pixelFormat const):
+        (WebCore::CanvasRenderingContext2DBase::colorSpace const):
+        * html/canvas/CanvasRenderingContext2DBase.h:
+        (WebCore::CanvasRenderingContext2DBase::getContextAttributes const):
+        * html/canvas/OffscreenCanvasRenderingContext2D.cpp:
+        (WebCore::OffscreenCanvasRenderingContext2D::OffscreenCanvasRenderingContext2D):
+        * html/canvas/OffscreenCanvasRenderingContext2D.h:
+        * html/canvas/PaintRenderingContext2D.cpp:
+        (WebCore::PaintRenderingContext2D::PaintRenderingContext2D):
+
 2021-05-15  Alan Bujtas  <[email protected]>
 
         [LFC] Move block formatting quirks to its own class

Modified: trunk/Source/WebCore/html/OffscreenCanvas.cpp (277542 => 277543)


--- trunk/Source/WebCore/html/OffscreenCanvas.cpp	2021-05-15 17:50:07 UTC (rev 277542)
+++ trunk/Source/WebCore/html/OffscreenCanvas.cpp	2021-05-15 17:51:24 UTC (rev 277543)
@@ -213,7 +213,11 @@
             return { { RefPtr<OffscreenCanvasRenderingContext2D> { &downcast<OffscreenCanvasRenderingContext2D>(*m_context) } } };
         }
 
-        m_context = makeUnique<OffscreenCanvasRenderingContext2D>(*this);
+        auto scope = DECLARE_THROW_SCOPE(state.vm());
+        auto settings = convert<IDLDictionary<CanvasRenderingContext2DSettings>>(state, !arguments.isEmpty() ? arguments[0].get() : JSC::jsUndefined());
+        RETURN_IF_EXCEPTION(scope, Exception { ExistingExceptionError });
+
+        m_context = makeUnique<OffscreenCanvasRenderingContext2D>(*this, WTFMove(settings));
         if (!m_context)
             return { { WTF::nullopt } };
 

Modified: trunk/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp (277542 => 277543)


--- trunk/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp	2021-05-15 17:50:07 UTC (rev 277542)
+++ trunk/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp	2021-05-15 17:51:24 UTC (rev 277543)
@@ -79,8 +79,7 @@
 }
 
 CanvasRenderingContext2D::CanvasRenderingContext2D(CanvasBase& canvas, CanvasRenderingContext2DSettings&& settings, bool usesCSSCompatibilityParseMode)
-    : CanvasRenderingContext2DBase(canvas, usesCSSCompatibilityParseMode)
-    , m_settings { WTFMove(settings) }
+    : CanvasRenderingContext2DBase(canvas, WTFMove(settings), usesCSSCompatibilityParseMode)
 {
 }
 
@@ -246,15 +245,4 @@
     drawTextUnchecked(textRun, x, y, fill, maxWidth);
 }
 
-PixelFormat CanvasRenderingContext2D::pixelFormat() const
-{
-    // FIXME: Take m_settings.alpha into account here and add PixelFormat::BGRX8.
-    return PixelFormat::BGRA8;
-}
-
-DestinationColorSpace CanvasRenderingContext2D::colorSpace() const
-{
-    return toDestinationColorSpace(m_settings.colorSpace);
-}
-
 } // namespace WebCore

Modified: trunk/Source/WebCore/html/canvas/CanvasRenderingContext2D.h (277542 => 277543)


--- trunk/Source/WebCore/html/canvas/CanvasRenderingContext2D.h	2021-05-15 17:50:07 UTC (rev 277542)
+++ trunk/Source/WebCore/html/canvas/CanvasRenderingContext2D.h	2021-05-15 17:51:24 UTC (rev 277543)
@@ -26,7 +26,6 @@
 #pragma once
 
 #include "CanvasRenderingContext2DBase.h"
-#include "CanvasRenderingContext2DSettings.h"
 #include "HTMLCanvasElement.h"
 #include <memory>
 
@@ -43,8 +42,6 @@
 
     HTMLCanvasElement& canvas() const { return downcast<HTMLCanvasElement>(canvasBase()); }
 
-    const CanvasRenderingContext2DSettings& getContextAttributes() const { return m_settings; }
-
     void drawFocusIfNeeded(Element&);
     void drawFocusIfNeeded(Path2D&, Element&);
 
@@ -61,8 +58,6 @@
 
     bool is2d() const final { return true; }
     const FontProxy* fontProxy() final;
-    PixelFormat pixelFormat() const final;
-    DestinationColorSpace colorSpace() const final;
 
     void setFontWithoutUpdatingStyle(const String&);
 
@@ -71,8 +66,6 @@
     void drawFocusIfNeededInternal(const Path&, Element&);
 
     TextDirection toTextDirection(CanvasRenderingContext2DBase::Direction, const RenderStyle** computedStyle = nullptr) const;
-
-    CanvasRenderingContext2DSettings m_settings;
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp (277542 => 277543)


--- trunk/Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp	2021-05-15 17:50:07 UTC (rev 277542)
+++ trunk/Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp	2021-05-15 17:51:24 UTC (rev 277543)
@@ -224,10 +224,11 @@
     return TopTextBaseline;
 }
 
-CanvasRenderingContext2DBase::CanvasRenderingContext2DBase(CanvasBase& canvas, bool usesCSSCompatibilityParseMode)
+CanvasRenderingContext2DBase::CanvasRenderingContext2DBase(CanvasBase& canvas, CanvasRenderingContext2DSettings&& settings, bool usesCSSCompatibilityParseMode)
     : CanvasRenderingContext(canvas)
     , m_stateStack(1)
     , m_usesCSSCompatibilityParseMode(usesCSSCompatibilityParseMode)
+    , m_settings(WTFMove(settings))
 {
 }
 
@@ -2611,4 +2612,15 @@
     return offset;
 }
 
+PixelFormat CanvasRenderingContext2DBase::pixelFormat() const
+{
+    // FIXME: Take m_settings.alpha into account here and add PixelFormat::BGRX8.
+    return PixelFormat::BGRA8;
+}
+
+DestinationColorSpace CanvasRenderingContext2DBase::colorSpace() const
+{
+    return toDestinationColorSpace(m_settings.colorSpace);
+}
+
 } // namespace WebCore

Modified: trunk/Source/WebCore/html/canvas/CanvasRenderingContext2DBase.h (277542 => 277543)


--- trunk/Source/WebCore/html/canvas/CanvasRenderingContext2DBase.h	2021-05-15 17:50:07 UTC (rev 277542)
+++ trunk/Source/WebCore/html/canvas/CanvasRenderingContext2DBase.h	2021-05-15 17:51:24 UTC (rev 277543)
@@ -32,6 +32,7 @@
 #include "CanvasLineJoin.h"
 #include "CanvasPath.h"
 #include "CanvasRenderingContext.h"
+#include "CanvasRenderingContext2DSettings.h"
 #include "CanvasStyle.h"
 #include "CanvasTextAlign.h"
 #include "CanvasTextBaseline.h"
@@ -78,11 +79,13 @@
 class CanvasRenderingContext2DBase : public CanvasRenderingContext, public CanvasPath {
     WTF_MAKE_ISO_ALLOCATED(CanvasRenderingContext2DBase);
 protected:
-    CanvasRenderingContext2DBase(CanvasBase&, bool usesCSSCompatibilityParseMode);
+    CanvasRenderingContext2DBase(CanvasBase&, CanvasRenderingContext2DSettings&&, bool usesCSSCompatibilityParseMode);
 
 public:
     virtual ~CanvasRenderingContext2DBase();
 
+    const CanvasRenderingContext2DSettings& getContextAttributes() const { return m_settings; }
+
     float lineWidth() const { return state().lineWidth; }
     void setLineWidth(float);
 
@@ -328,6 +331,9 @@
     bool isEntireBackingStoreDirty() const;
     FloatRect backingStoreBounds() const { return FloatRect { { }, FloatSize { canvasBase().size() } }; }
 
+    PixelFormat pixelFormat() const final;
+    DestinationColorSpace colorSpace() const final;
+
     void unwindStateStack();
     void realizeSavesLoop();
 
@@ -395,6 +401,7 @@
     bool m_usesCSSCompatibilityParseMode;
     bool m_usesDisplayListDrawing { false };
     mutable std::unique_ptr<DisplayList::DrawingContext> m_recordingContext;
+    CanvasRenderingContext2DSettings m_settings;
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/html/canvas/OffscreenCanvasRenderingContext2D.cpp (277542 => 277543)


--- trunk/Source/WebCore/html/canvas/OffscreenCanvasRenderingContext2D.cpp	2021-05-15 17:50:07 UTC (rev 277542)
+++ trunk/Source/WebCore/html/canvas/OffscreenCanvasRenderingContext2D.cpp	2021-05-15 17:51:24 UTC (rev 277543)
@@ -48,8 +48,8 @@
 
 WTF_MAKE_ISO_ALLOCATED_IMPL(OffscreenCanvasRenderingContext2D);
 
-OffscreenCanvasRenderingContext2D::OffscreenCanvasRenderingContext2D(CanvasBase& canvas)
-    : CanvasRenderingContext2DBase(canvas, false)
+OffscreenCanvasRenderingContext2D::OffscreenCanvasRenderingContext2D(CanvasBase& canvas, CanvasRenderingContext2DSettings&& settings)
+    : CanvasRenderingContext2DBase(canvas, WTFMove(settings), false)
 {
 }
 

Modified: trunk/Source/WebCore/html/canvas/OffscreenCanvasRenderingContext2D.h (277542 => 277543)


--- trunk/Source/WebCore/html/canvas/OffscreenCanvasRenderingContext2D.h	2021-05-15 17:50:07 UTC (rev 277542)
+++ trunk/Source/WebCore/html/canvas/OffscreenCanvasRenderingContext2D.h	2021-05-15 17:51:24 UTC (rev 277543)
@@ -36,7 +36,7 @@
 class OffscreenCanvasRenderingContext2D final : public CanvasRenderingContext2DBase {
     WTF_MAKE_ISO_ALLOCATED(OffscreenCanvasRenderingContext2D);
 public:
-    OffscreenCanvasRenderingContext2D(CanvasBase&);
+    OffscreenCanvasRenderingContext2D(CanvasBase&, CanvasRenderingContext2DSettings&&);
     virtual ~OffscreenCanvasRenderingContext2D();
 
     OffscreenCanvas& canvas() const { return downcast<OffscreenCanvas>(canvasBase()); }

Modified: trunk/Source/WebCore/html/canvas/PaintRenderingContext2D.cpp (277542 => 277543)


--- trunk/Source/WebCore/html/canvas/PaintRenderingContext2D.cpp	2021-05-15 17:50:07 UTC (rev 277542)
+++ trunk/Source/WebCore/html/canvas/PaintRenderingContext2D.cpp	2021-05-15 17:51:24 UTC (rev 277543)
@@ -40,7 +40,7 @@
 }
 
 PaintRenderingContext2D::PaintRenderingContext2D(CanvasBase& canvas)
-    : CanvasRenderingContext2DBase(canvas, false)
+    : CanvasRenderingContext2DBase(canvas, { }, false)
 {
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to