diff options
author | crupest <crupest@outlook.com> | 2023-10-09 22:58:06 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2023-10-09 22:58:06 +0800 |
commit | 6fc14693d01f2be98b45d70405b16883607d4666 (patch) | |
tree | d2c540e4188abbdb3cf0c28f93942272a7bcbed7 /src | |
parent | 78760fd8a5b310ca4e8de502e510b95c9b4c880c (diff) | |
download | cru-6fc14693d01f2be98b45d70405b16883607d4666.tar.gz cru-6fc14693d01f2be98b45d70405b16883607d4666.tar.bz2 cru-6fc14693d01f2be98b45d70405b16883607d4666.zip |
...
Diffstat (limited to 'src')
-rw-r--r-- | src/platform/graphics/web_canvas/Brush.cpp | 4 | ||||
-rw-r--r-- | src/platform/graphics/web_canvas/Painter.cpp | 36 |
2 files changed, 39 insertions, 1 deletions
diff --git a/src/platform/graphics/web_canvas/Brush.cpp b/src/platform/graphics/web_canvas/Brush.cpp index 1c192b75..b86eb6a5 100644 --- a/src/platform/graphics/web_canvas/Brush.cpp +++ b/src/platform/graphics/web_canvas/Brush.cpp @@ -20,4 +20,8 @@ String WebCanvasSolidColorBrush::GetCssColor() const { return color_.ToString(); } +emscripten::val WebCanvasSolidColorBrush::GetStyle() { + return emscripten::val::u16string(color_.ToString().c_str()); +} + } // namespace cru::platform::graphics::web_canvas diff --git a/src/platform/graphics/web_canvas/Painter.cpp b/src/platform/graphics/web_canvas/Painter.cpp index 31c4a53d..a78ab9f1 100644 --- a/src/platform/graphics/web_canvas/Painter.cpp +++ b/src/platform/graphics/web_canvas/Painter.cpp @@ -1,3 +1,6 @@ +#include "cru/platform/Check.h" +#include "cru/platform/graphics/Brush.h" +#include "cru/platform/graphics/web_canvas/WebCanvasBrush.h" #include "cru/platform/graphics/web_canvas/WebCanvasGraphicsFactory.h" #include "cru/platform/graphics/web_canvas/WebCanvasPainter.h" #include "cru/platform/graphics/web_canvas/WebCanvasRef.h" @@ -38,7 +41,38 @@ void WebCanvasPainter::ConcatTransform(const Matrix& transform) { contextDoTransform(context_, "transform", transform); } -void WebCanvasPainter::Clear(const Color& color) {} +void WebCanvasPainter::Clear(const Color& color) { + auto canvas = GetCanvas(); + auto canvas_width = canvas.GetWidth(); + auto canvas_height = canvas.GetHeight(); + + context_.set("fillStyle", color.ToString()); + context_.call<void>("fillRect", 0, 0, canvas_width, canvas_height); +} + +void WebCanvasPainter::DrawLine(const Point& start, const Point& end, + IBrush* brush, float width) { + SetStrokeStyle(brush, width); + context_.call<void>("beginPath"); + context_.call<void>("moveTo", start.x, start.y); + context_.call<void>("lineTo", end.x, end.y); + context_.call<void>("stroke"); +} + +void WebCanvasPainter::SetStrokeStyle(IBrush* brush, float width) { + context_.set("strokeStyle", ConvertBrush(brush)->GetStyle()); + if (width > 0) { + context_.set("lineWidth", width); + } +} + +void WebCanvasPainter::SetFillStyle(IBrush* brush) { + context_.set("fillStyle", ConvertBrush(brush)->GetStyle()); +} + +WebCanvasBrush* WebCanvasPainter::ConvertBrush(IBrush* brush) const { + return CheckPlatform<WebCanvasBrush>(brush, GetPlatformId()); +} WebCanvasRef WebCanvasPainter::GetCanvas() { return WebCanvasRef(context_["canvas"]); |