diff options
author | crupest <crupest@outlook.com> | 2019-05-24 23:45:58 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2019-05-24 23:45:58 +0800 |
commit | b6db663269201fa14a6a4aa1b9042645a9e8f859 (patch) | |
tree | 1984e2c2784fb9623d4c20fbdd6fc650792e133c /include/cru/platform/graph | |
parent | b9df1bcaea0c19b2e29479cdb1ad5a39e23c4ee7 (diff) | |
download | cru-b6db663269201fa14a6a4aa1b9042645a9e8f859.tar.gz cru-b6db663269201fa14a6a4aa1b9042645a9e8f859.tar.bz2 cru-b6db663269201fa14a6a4aa1b9042645a9e8f859.zip |
...
Diffstat (limited to 'include/cru/platform/graph')
-rw-r--r-- | include/cru/platform/graph/brush.hpp | 4 | ||||
-rw-r--r-- | include/cru/platform/graph/font.hpp | 2 | ||||
-rw-r--r-- | include/cru/platform/graph/geometry.hpp | 14 | ||||
-rw-r--r-- | include/cru/platform/graph/graph_factory.hpp | 33 | ||||
-rw-r--r-- | include/cru/platform/graph/painter.hpp | 26 | ||||
-rw-r--r-- | include/cru/platform/graph/text_layout.hpp | 8 | ||||
-rw-r--r-- | include/cru/platform/graph/util/painter_util.hpp (renamed from include/cru/platform/graph/painter_util.hpp) | 6 |
7 files changed, 48 insertions, 45 deletions
diff --git a/include/cru/platform/graph/brush.hpp b/include/cru/platform/graph/brush.hpp index 8ffbfc97..7688ec4a 100644 --- a/include/cru/platform/graph/brush.hpp +++ b/include/cru/platform/graph/brush.hpp @@ -4,9 +4,9 @@ #include "cru/common/ui_base.hpp" namespace cru::platform::graph { -struct Brush : public virtual Interface {}; +struct IBrush : public virtual Interface {}; -struct SolidColorBrush : public virtual Brush { +struct ISolidColorBrush : public virtual IBrush { virtual ui::Color GetColor() = 0; virtual void SetColor(const ui::Color& color) = 0; }; diff --git a/include/cru/platform/graph/font.hpp b/include/cru/platform/graph/font.hpp index 5af369e5..f74dc7db 100644 --- a/include/cru/platform/graph/font.hpp +++ b/include/cru/platform/graph/font.hpp @@ -2,7 +2,7 @@ #include "cru/common/base.hpp" namespace cru::platform::graph { -struct FontDescriptor : virtual Interface { +struct IFontDescriptor : virtual Interface { }; } diff --git a/include/cru/platform/graph/geometry.hpp b/include/cru/platform/graph/geometry.hpp index 7a7ad8b2..71bf8c73 100644 --- a/include/cru/platform/graph/geometry.hpp +++ b/include/cru/platform/graph/geometry.hpp @@ -1,25 +1,19 @@ #pragma once #include "cru/common/base.hpp" +#include "cru/common/endable.hpp" #include "cru/common/ui_base.hpp" namespace cru::platform::graph { -struct Geometry : virtual Interface { +struct IGeometry : virtual Interface { virtual bool FillContains(const ui::Point& point) = 0; }; -struct GeometryBuilder : virtual Interface { - virtual bool IsValid() = 0; +struct IGeometryBuilder : virtual Interface, virtual IEndable<IGeometry*> { virtual void BeginFigure(const ui::Point& point) = 0; virtual void LineTo(const ui::Point& point) = 0; virtual void QuadraticBezierTo(const ui::Point& control_point, const ui::Point& end_point) = 0; virtual void CloseFigure(bool close) = 0; - virtual Geometry* Build() = 0; - - Geometry* BuildAndDeleteThis() { - Build(); - delete this; - } }; -} // namespace cru::platform +} // namespace cru::platform::graph diff --git a/include/cru/platform/graph/graph_factory.hpp b/include/cru/platform/graph/graph_factory.hpp index 51cf6f15..b2619e8d 100644 --- a/include/cru/platform/graph/graph_factory.hpp +++ b/include/cru/platform/graph/graph_factory.hpp @@ -1,26 +1,35 @@ #pragma once #include "cru/common/base.hpp" +#include "cru/common/auto_delete.hpp" #include "cru/common/ui_base.hpp" +#include "brush.hpp" +#include "font.hpp" +#include "geometry.hpp" +#include "text_layout.hpp" + #include <memory> #include <string> #include <string_view> namespace cru::platform::graph { -struct SolidColorBrush; -struct GeometryBuilder; -struct FontDescriptor; -struct TextLayout; +// Entry point of the graph module. +struct IGraphFactory : virtual Interface, virtual IAutoDelete { + // Create a platform-specific instance and save it as the global instance. + // Do not create the instance twice. Implements should assert for that. + // After the + // After creating, get the instance by GetInstance. + static IGraphFactory* CreateInstance(); -struct GraphFactory : virtual Interface { - static GraphFactory* GetInstance(); + // Get the global instance. If it is not created, then return nullptr. + static IGraphFactory* GetInstance(); - virtual SolidColorBrush* CreateSolidColorBrush(const ui::Color& color) = 0; - virtual GeometryBuilder* CreateGeometryBuilder() = 0; - virtual FontDescriptor* CreateFontDescriptor( + virtual ISolidColorBrush* CreateSolidColorBrush(const ui::Color& color) = 0; + virtual IGeometryBuilder* CreateGeometryBuilder() = 0; + virtual IFontDescriptor* CreateFontDescriptor( const std::wstring_view& font_family, float font_size) = 0; - virtual TextLayout* CreateTextLayout(std::shared_ptr<FontDescriptor> font, - std::wstring text) = 0; + virtual ITextLayout* CreateTextLayout(std::shared_ptr<IFontDescriptor> font, + std::wstring text) = 0; }; -} // namespace cru::platform +} // namespace cru::platform::graph diff --git a/include/cru/platform/graph/painter.hpp b/include/cru/platform/graph/painter.hpp index 199ebbad..34c895d4 100644 --- a/include/cru/platform/graph/painter.hpp +++ b/include/cru/platform/graph/painter.hpp @@ -1,26 +1,26 @@ #pragma once #include "cru/common/base.hpp" -#include "cru/common/ui_base.hpp" #include "../matrix.hpp" +#include "cru/common/endable.hpp" +#include "cru/common/ui_base.hpp" namespace cru::platform::graph { -struct Brush; -struct Geometry; -struct TextLayout; +struct IBrush; +struct IGeometry; +struct ITextLayout; -struct Painter : virtual Interface { +struct IPainter : virtual Interface, virtual IEndable<void> { virtual Matrix GetTransform() = 0; virtual void SetTransform(const Matrix& matrix) = 0; virtual void Clear(const ui::Color& color) = 0; - virtual void StrokeRectangle(const ui::Rect& rectangle, Brush* brush, + virtual void StrokeRectangle(const ui::Rect& rectangle, IBrush* brush, float width) = 0; - virtual void FillRectangle(const ui::Rect& rectangle, Brush* brush) = 0; - virtual void StrokeGeometry(Geometry* geometry, Brush* brush, + virtual void FillRectangle(const ui::Rect& rectangle, IBrush* brush) = 0; + virtual void StrokeGeometry(IGeometry* geometry, IBrush* brush, float width) = 0; - virtual void FillGeometry(Geometry* geometry, Brush* brush) = 0; - virtual void DrawText(const ui::Point& offset, TextLayout* text_layout, Brush* brush) = 0; - virtual void EndDraw() = 0; - virtual bool IsDisposed() = 0; + virtual void FillGeometry(IGeometry* geometry, IBrush* brush) = 0; + virtual void DrawText(const ui::Point& offset, ITextLayout* text_layout, + IBrush* brush) = 0; }; -} // namespace cru::platform +} // namespace cru::platform::graph diff --git a/include/cru/platform/graph/text_layout.hpp b/include/cru/platform/graph/text_layout.hpp index eb13c115..894c1408 100644 --- a/include/cru/platform/graph/text_layout.hpp +++ b/include/cru/platform/graph/text_layout.hpp @@ -8,13 +8,13 @@ #include <vector> namespace cru::platform::graph { -struct FontDescriptor; +struct IFontDescriptor; -struct TextLayout : virtual Interface { +struct ITextLayout : virtual Interface { virtual std::wstring GetText() = 0; virtual void SetText(std::wstring new_text) = 0; - virtual std::shared_ptr<FontDescriptor> GetFont() = 0; - virtual void SetFont(std::shared_ptr<FontDescriptor> font) = 0; + virtual std::shared_ptr<IFontDescriptor> GetFont() = 0; + virtual void SetFont(std::shared_ptr<IFontDescriptor> font) = 0; virtual void SetMaxWidth(float max_width) = 0; virtual void SetMaxHeight(float max_height) = 0; virtual ui::Rect GetTextBounds() = 0; diff --git a/include/cru/platform/graph/painter_util.hpp b/include/cru/platform/graph/util/painter_util.hpp index c137e8cb..71e125c3 100644 --- a/include/cru/platform/graph/painter_util.hpp +++ b/include/cru/platform/graph/util/painter_util.hpp @@ -1,14 +1,14 @@ #pragma once -#include "painter.hpp" +#include "../painter.hpp" #include <functional> #include <type_traits> namespace cru::platform::graph::util { template <typename Fn> -inline void WithTransform(Painter* painter, const Matrix& matrix, +inline void WithTransform(IPainter* painter, const Matrix& matrix, const Fn& action) { - static_assert(std::is_invocable_v<decltype(action), Painter*>, + static_assert(std::is_invocable_v<decltype(action), IPainter*>, "Action must can be be invoked with painter."); const auto old = painter->GetTransform(); painter->SetTransform(old * matrix); |