From 57b528d67f3561fa1f15e3912d7a99e547eeceb6 Mon Sep 17 00:00:00 2001 From: Haibo Date: Tue, 20 Nov 2018 15:18:54 +0800 Subject: [PATCH] add: Canvas can draw geometry now --- core/base/Canvas.cpp | 29 ++++++++++++++++++++++++++++- core/base/Canvas.h | 10 ++++++++++ core/base/Geometry.h | 1 + 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/core/base/Canvas.cpp b/core/base/Canvas.cpp index 8380002a..4b8be4e9 100644 --- a/core/base/Canvas.cpp +++ b/core/base/Canvas.cpp @@ -22,6 +22,7 @@ #include "render.h" #include "logs.h" #include "Image.h" +#include "Geometry.h" namespace easy2d { @@ -247,7 +248,7 @@ namespace easy2d void Canvas::DrawImage(spImage const & image, float opacity) { - if (image->GetBitmap()) + if (image && image->GetBitmap()) { render_target_->DrawBitmap( image->GetBitmap().Get(), @@ -293,6 +294,20 @@ namespace easy2d ); } + void Canvas::DrawGeometry(spGeometry const & geo) + { + if (geo && geo->geo_) + { + render_target_->DrawGeometry( + geo->geo_.Get(), + stroke_brush_.Get(), + stroke_width_, + outline_join_style_.Get() + ); + cache_expired_ = true; + } + } + void Canvas::FillCircle(const Point & center, float radius) { render_target_->FillEllipse( @@ -357,6 +372,18 @@ namespace easy2d cache_expired_ = true; } + void Canvas::FillGeometry(spGeometry const & geo) + { + if (geo && geo->geo_) + { + render_target_->FillGeometry( + geo->geo_.Get(), + fill_brush_.Get() + ); + cache_expired_ = true; + } + } + void Canvas::BeginPath(Point const& begin_pos) { current_geometry_ = nullptr; diff --git a/core/base/Canvas.h b/core/base/Canvas.h index 9af38b9a..5e4375f3 100644 --- a/core/base/Canvas.h +++ b/core/base/Canvas.h @@ -95,6 +95,11 @@ namespace easy2d Point const& point /* 文字位置 */ ); + // 画几何图形边框 + void DrawGeometry( + spGeometry const& geo + ); + // 填充圆形 void FillCircle( const Point& center, @@ -120,6 +125,11 @@ namespace easy2d float radius_y ); + // 填充几何图形 + void FillGeometry( + spGeometry const& geo + ); + // 开始绘制路径 void BeginPath( Point const& begin_pos /* 路径起始点 */ diff --git a/core/base/Geometry.h b/core/base/Geometry.h index e35b2c41..20043850 100644 --- a/core/base/Geometry.h +++ b/core/base/Geometry.h @@ -39,6 +39,7 @@ namespace easy2d class Geometry : public Unit { + friend class Canvas; friend class GeometryNode; public: