Skip to content

Commit 4b26244

Browse files
LibWeb: Extract Canvas2DContextBase from CanvasRenderingContext2D
OffscreenCanvasRenderingContext2D duplicates CanvasRenderingContext2D interface but stubs out every drawing operation, because all the real recording/present/readback logic was welded to HTMLCanvasElement inside CanvasRenderingContext2D. Nearly all of that logic is owner-agnostic: it funnels through the shared canvas command list and drawing state. Move it into a new abstract Canvas2DContextBase. The element-specific behavior is reduced to five small hooks (dirty marking after draws, the Page providing the compositor host, repaint on backing storage creation, the contextlost/contextrestored event target, and style-resolved drop-shadow filter colors) that CanvasRenderingContext2D now implements against HTMLCanvasElement. AbstractCanvasMixin gains set_font and resolved_letter_spacing as pure virtuals so the base's text code can reach the CanvasTextDrawingStyles<T> mixin that stays on leaf classes. This is a pure refactor with no behavior change in preparation for offscreen canvas support.
1 parent 36456bc commit 4b26244

7 files changed

Lines changed: 1741 additions & 1632 deletions

File tree

Libraries/LibWeb/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -489,6 +489,7 @@ set(SOURCES
489489
HTML/BrowsingContext.cpp
490490
HTML/BrowsingContextGroup.cpp
491491
HTML/Canvas/AbstractCanvasMixin.cpp
492+
HTML/Canvas/Canvas2DContextBase.cpp
492493
HTML/Canvas/CanvasDrawImage.cpp
493494
HTML/Canvas/CanvasFillStrokeStyles.cpp
494495
HTML/Canvas/CanvasPath.cpp

Libraries/LibWeb/HTML/Canvas/AbstractCanvasMixin.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ class AbstractCanvasMixin {
2525
virtual Gfx::Path& mutable_path() = 0;
2626
virtual Gfx::CanvasCommandList* canvas_command_list() = 0;
2727
virtual CSS::ComputationContext computation_context_for_drawing_state() const = 0;
28+
virtual void set_font(Utf16View font) = 0;
29+
virtual float resolved_letter_spacing() const = 0;
2830
Optional<Color> parse_a_css_color_value(Utf16View value) const;
2931
};
3032

0 commit comments

Comments
 (0)