/* * Copyright (c) 2026, Aliaksandr Kalenik * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include namespace Gfx { class CanvasCommandPlayer { AK_MAKE_NONCOPYABLE(CanvasCommandPlayer); AK_MAKE_NONMOVABLE(CanvasCommandPlayer); public: using CanvasSurfaceResolver = Function; CanvasCommandPlayer(RefPtr, IntSize, BitmapFormat, AlphaType, CanvasSurfaceResolver = {}); ~CanvasCommandPlayer(); NonnullRefPtr surface() const; void clear(Color); void play(CanvasCommandList const&); private: void play_command(CanvasCommands::ClearRect const&); void play_command(CanvasCommands::FillRect const&); void play_command(CanvasCommands::DrawBitmap const&); void play_command(CanvasCommands::DrawCanvas const&); void play_command(CanvasCommands::FillPath const&); void play_command(CanvasCommands::StrokePath const&); void play_command(CanvasCommands::SetTransform const&); void play_command(CanvasCommands::Save const&); void play_command(CanvasCommands::Restore const&); void play_command(CanvasCommands::ClipPath const&); void play_command(CanvasCommands::Reset const&); NonnullRefPtr resolve_paint_style(CanvasPaintStyle const&) const; NonnullRefPtr m_surface; NonnullOwnPtr m_painter; CanvasSurfaceResolver m_canvas_surface_resolver; }; }