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)
{
}