From 78760fd8a5b310ca4e8de502e510b95c9b4c880c Mon Sep 17 00:00:00 2001 From: crupest Date: Mon, 9 Oct 2023 22:25:54 +0800 Subject: ... --- src/platform/graphics/web_canvas/CMakeLists.txt | 1 + src/platform/graphics/web_canvas/Factory.cpp | 7 +++++++ src/platform/graphics/web_canvas/Painter.cpp | 23 ++++++++++++++++++----- src/platform/graphics/web_canvas/WebCanvasRef.cpp | 16 ++++++++++++++++ 4 files changed, 42 insertions(+), 5 deletions(-) create mode 100644 src/platform/graphics/web_canvas/WebCanvasRef.cpp (limited to 'src/platform/graphics/web_canvas') diff --git a/src/platform/graphics/web_canvas/CMakeLists.txt b/src/platform/graphics/web_canvas/CMakeLists.txt index 6edc2edb..bbf736e0 100644 --- a/src/platform/graphics/web_canvas/CMakeLists.txt +++ b/src/platform/graphics/web_canvas/CMakeLists.txt @@ -3,6 +3,7 @@ add_library(CruPlatformGraphicsWebCanvas Factory.cpp Painter.cpp Resource.cpp + WebCanvasRef.cpp ) target_link_libraries(CruPlatformGraphicsWebCanvas PUBLIC CruPlatformBaseWeb CruPlatformGraphics) diff --git a/src/platform/graphics/web_canvas/Factory.cpp b/src/platform/graphics/web_canvas/Factory.cpp index e69de29b..be14ae18 100644 --- a/src/platform/graphics/web_canvas/Factory.cpp +++ b/src/platform/graphics/web_canvas/Factory.cpp @@ -0,0 +1,7 @@ +#include "cru/platform/graphics/web_canvas/WebCanvasGraphicsFactory.h" + +namespace cru::platform::graphics::web_canvas { +WebCanvasGraphicsFactory::WebCanvasGraphicsFactory() { } + +WebCanvasGraphicsFactory::~WebCanvasGraphicsFactory() { } +} diff --git a/src/platform/graphics/web_canvas/Painter.cpp b/src/platform/graphics/web_canvas/Painter.cpp index cd04a725..31c4a53d 100644 --- a/src/platform/graphics/web_canvas/Painter.cpp +++ b/src/platform/graphics/web_canvas/Painter.cpp @@ -1,5 +1,6 @@ #include "cru/platform/graphics/web_canvas/WebCanvasGraphicsFactory.h" #include "cru/platform/graphics/web_canvas/WebCanvasPainter.h" +#include "cru/platform/graphics/web_canvas/WebCanvasRef.h" #include "cru/platform/graphics/web_canvas/WebCanvasResource.h" #include @@ -7,9 +8,10 @@ namespace cru::platform::graphics::web_canvas { namespace { -void contextSetTransform(emscripten::val context, const Matrix& matrix) { - context.call("setTransform", matrix.m11, matrix.m12, matrix.m21, - matrix.m22, matrix.m31, matrix.m32); +void contextDoTransform(emscripten::val context, const char* method, + const Matrix& matrix) { + context.call(method, matrix.m11, matrix.m12, matrix.m21, matrix.m22, + matrix.m31, matrix.m32); } } // namespace @@ -19,7 +21,7 @@ WebCanvasPainter::WebCanvasPainter(WebCanvasGraphicsFactory* factory, : WebCanvasResource(factory), context_(context), current_transform_(current_transform.value_or(Matrix::Identity())) { - contextSetTransform(context_, current_transform_); + contextDoTransform(context_, "setTransform", current_transform_); } WebCanvasPainter::~WebCanvasPainter() {} @@ -28,6 +30,17 @@ Matrix WebCanvasPainter::GetTransform() { return current_transform_; } void WebCanvasPainter::SetTransform(const Matrix& transform) { current_transform_ = transform; - contextSetTransform(context_, transform); + contextDoTransform(context_, "setTransform", current_transform_); +} + +void WebCanvasPainter::ConcatTransform(const Matrix& transform) { + current_transform_ *= transform; + contextDoTransform(context_, "transform", transform); +} + +void WebCanvasPainter::Clear(const Color& color) {} + +WebCanvasRef WebCanvasPainter::GetCanvas() { + return WebCanvasRef(context_["canvas"]); } } // namespace cru::platform::graphics::web_canvas diff --git a/src/platform/graphics/web_canvas/WebCanvasRef.cpp b/src/platform/graphics/web_canvas/WebCanvasRef.cpp new file mode 100644 index 00000000..c4f75626 --- /dev/null +++ b/src/platform/graphics/web_canvas/WebCanvasRef.cpp @@ -0,0 +1,16 @@ +#include "cru/platform/graphics/web_canvas/WebCanvasRef.h" +#include "cru/platform/web/JsUtility.h" + +#include +#include + +namespace cru::platform::graphics::web_canvas { +WebCanvasRef::WebCanvasRef(emscripten::val canvas_val) + : val_(std::move(canvas_val)) { + assert(web::IsNotNullAndInstanceOf(val_, "HTMLCanvasElement")); +} + +int WebCanvasRef::GetWidth() const { return val_["width"].as(); } + +int WebCanvasRef::GetHeight() const { return val_["height"].as(); } +} // namespace cru::platform::graphics::web_canvas -- cgit v1.2.3