From 3c5aa6583d7ab2533ff721282d1efd52d07281c7 Mon Sep 17 00:00:00 2001 From: crupest Date: Thu, 12 Oct 2023 21:21:26 +0800 Subject: Make svg geometry builder a mixin. Record a lot of notes for geometry. --- .../graphics/web_canvas/WebCanvasGeometry.h | 25 +++++++++++++++------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'include/cru/platform/graphics/web_canvas') diff --git a/include/cru/platform/graphics/web_canvas/WebCanvasGeometry.h b/include/cru/platform/graphics/web_canvas/WebCanvasGeometry.h index af4cee91..dfb5bbe7 100644 --- a/include/cru/platform/graphics/web_canvas/WebCanvasGeometry.h +++ b/include/cru/platform/graphics/web_canvas/WebCanvasGeometry.h @@ -1,27 +1,36 @@ #pragma once #include "../Geometry.h" +#include "../SvgGeometryBuilderMixin.h" #include "WebCanvasResource.h" #include +#include namespace cru::platform::graphics::web_canvas { +class WebCanvasGeometry : public WebCanvasResource, public virtual IGeometry { + public: + WebCanvasGeometry(WebCanvasGraphicsFactory* factory, emscripten::val path2d); + ~WebCanvasGeometry() override; + + bool StrokeContains(float width, const Point& point) override; + virtual bool FillContains(const Point& point) = 0; + virtual Rect GetBounds() = 0; + virtual std::unique_ptr Transform(const Matrix& matrix) = 0; + private: + emscripten::val path2d_; +}; + /** * \remarks See IGeometryBuilder for platform limitation. */ class WebCanvasGeometryBuilder : public WebCanvasResource, - public virtual IGeometryBuilder { + public SvgGeometryBuilderMixin { public: WebCanvasGeometryBuilder(WebCanvasGraphicsFactory* factory); ~WebCanvasGeometryBuilder() override; - Point GetCurrentPosition() override; - - void MoveTo(const Point& point) override; - - private: - Point current_postion_; - emscripten::val path2d_; + std::unique_ptr Build() override; }; } // namespace cru::platform::graphics::web_canvas -- cgit v1.2.3