diff options
Diffstat (limited to 'include/cru/platform/graph')
-rw-r--r-- | include/cru/platform/graph/brush.hpp | 49 | ||||
-rw-r--r-- | include/cru/platform/graph/font.hpp | 16 | ||||
-rw-r--r-- | include/cru/platform/graph/geometry.hpp | 48 | ||||
-rw-r--r-- | include/cru/platform/graph/graph_factory.hpp | 48 | ||||
-rw-r--r-- | include/cru/platform/graph/painter.hpp | 45 | ||||
-rw-r--r-- | include/cru/platform/graph/text_layout.hpp | 36 |
6 files changed, 180 insertions, 62 deletions
diff --git a/include/cru/platform/graph/brush.hpp b/include/cru/platform/graph/brush.hpp index 7688ec4a..d292ae82 100644 --- a/include/cru/platform/graph/brush.hpp +++ b/include/cru/platform/graph/brush.hpp @@ -1,13 +1,46 @@ #pragma once -#include "cru/common/base.hpp" - -#include "cru/common/ui_base.hpp" +#include "../graphic_base.hpp" +#include "../native_resource.hpp" namespace cru::platform::graph { -struct IBrush : public virtual Interface {}; +class Brush : public NativeResource { + protected: + Brush() = default; + + public: + Brush(const Brush& other) = delete; + Brush& operator=(const Brush& other) = delete; + + Brush(Brush&& other) = delete; + Brush& operator=(Brush&& other) = delete; + + ~Brush() override = default; +}; + +class SolidColorBrush : public Brush { + protected: + SolidColorBrush() = default; + + public: + SolidColorBrush(const SolidColorBrush& other) = delete; + SolidColorBrush& operator=(const SolidColorBrush& other) = delete; + + SolidColorBrush(SolidColorBrush&& other) = delete; + SolidColorBrush& operator=(SolidColorBrush&& other) = delete; + + ~SolidColorBrush() = default; + + public: + Color GetColor() { return color_; } + void SetColor(const Color& color) { + color_ = color; + OnSetColor(color); + } + + protected: + virtual void OnSetColor(const Color& color) = 0; -struct ISolidColorBrush : public virtual IBrush { - virtual ui::Color GetColor() = 0; - virtual void SetColor(const ui::Color& color) = 0; + protected: + Color color_ = colors::black; }; -} // namespace cru::platform +} // namespace cru::platform::graph diff --git a/include/cru/platform/graph/font.hpp b/include/cru/platform/graph/font.hpp index f74dc7db..bd470256 100644 --- a/include/cru/platform/graph/font.hpp +++ b/include/cru/platform/graph/font.hpp @@ -1,8 +1,18 @@ #pragma once -#include "cru/common/base.hpp" +#include "../native_resource.hpp" namespace cru::platform::graph { -struct IFontDescriptor : virtual Interface { +class Font : public NativeResource { + protected: + Font() = default; + public: + Font(const Font& other) = delete; + Font& operator=(const Font& other) = delete; + + Font(Font&& other) = delete; + Font& operator=(Font&& other) = delete; + + ~Font() override = default; }; -} +} // namespace cru::platform::graph diff --git a/include/cru/platform/graph/geometry.hpp b/include/cru/platform/graph/geometry.hpp index 71bf8c73..d31b3b27 100644 --- a/include/cru/platform/graph/geometry.hpp +++ b/include/cru/platform/graph/geometry.hpp @@ -1,19 +1,45 @@ #pragma once -#include "cru/common/base.hpp" - -#include "cru/common/endable.hpp" -#include "cru/common/ui_base.hpp" +#include "../graphic_base.hpp" +#include "../native_resource.hpp" namespace cru::platform::graph { -struct IGeometry : virtual Interface { - virtual bool FillContains(const ui::Point& point) = 0; +class Geometry : public NativeResource { + protected: + Geometry() = default; + + public: + Geometry(const Geometry& other) = delete; + Geometry& operator=(const Geometry& other) = delete; + + Geometry(Geometry&& other) = delete; + Geometry& operator=(Geometry&& other) = delete; + + ~Geometry() override = default; + + public: + virtual bool FillContains(const Point& point) = 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; +class GeometryBuilder : public NativeResource { + protected: + GeometryBuilder() = default; + + public: + GeometryBuilder(const GeometryBuilder& other) = delete; + GeometryBuilder& operator=(const GeometryBuilder& other) = delete; + + GeometryBuilder(GeometryBuilder&& other) = delete; + GeometryBuilder& operator=(GeometryBuilder&& other) = delete; + + ~GeometryBuilder() override = default; + + public: + virtual void BeginFigure(const Point& point) = 0; + virtual void LineTo(const Point& point) = 0; + virtual void QuadraticBezierTo(const Point& control_point, + const Point& end_point) = 0; virtual void CloseFigure(bool close) = 0; + + virtual Geometry* Build() = 0; }; } // namespace cru::platform::graph diff --git a/include/cru/platform/graph/graph_factory.hpp b/include/cru/platform/graph/graph_factory.hpp index 60d4ed8a..69afc7b3 100644 --- a/include/cru/platform/graph/graph_factory.hpp +++ b/include/cru/platform/graph/graph_factory.hpp @@ -1,8 +1,6 @@ #pragma once -#include "cru/common/base.hpp" - -#include "cru/common/auto_delete.hpp" -#include "cru/common/ui_base.hpp" +#include "../graphic_base.hpp" +#include "../native_resource.hpp" #include "brush.hpp" #include "font.hpp" @@ -20,20 +18,42 @@ namespace cru::platform::graph { // IGraphFactory::CreateInstance and set auto-delete to true. // The manual creation method of IGraphFactory provides a you a way to use graph // related tools without interact with actual ui like window system. -struct IGraphFactory : virtual Interface, virtual IAutoDelete { +class GraphFactory : public NativeResource { + public: // Create a platform-specific instance and save it as the global instance. // Do not create the instance twice. Implements should assert for that. // After creating, get the instance by GetInstance. - static IGraphFactory* CreateInstance(); + static GraphFactory* CreateInstance(); // Get the global instance. If it is not created, then return nullptr. - static IGraphFactory* GetInstance(); - - 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 ITextLayout* CreateTextLayout(std::shared_ptr<IFontDescriptor> font, - std::wstring text) = 0; + static GraphFactory* GetInstance(); + + protected: + GraphFactory() = default; + + public: + GraphFactory(const GraphFactory& other) = delete; + GraphFactory& operator=(const GraphFactory& other) = delete; + + GraphFactory(GraphFactory&& other) = delete; + GraphFactory& operator=(GraphFactory&& other) = delete; + + ~GraphFactory() override = default; + + public: + virtual SolidColorBrush* CreateSolidColorBrush() = 0; + SolidColorBrush* CreateSolidColorBrush(const Color& color) { + const auto brush = CreateSolidColorBrush(); + brush->SetColor(color); + return brush; + } + + virtual GeometryBuilder* CreateGeometryBuilder() = 0; + + virtual Font* CreateFont(const std::wstring_view& font_family, + float font_size) = 0; + + virtual TextLayout* CreateTextLayout(std::shared_ptr<Font> font, + std::wstring text) = 0; }; } // namespace cru::platform::graph diff --git a/include/cru/platform/graph/painter.hpp b/include/cru/platform/graph/painter.hpp index 34c895d4..1096aa7c 100644 --- a/include/cru/platform/graph/painter.hpp +++ b/include/cru/platform/graph/painter.hpp @@ -1,26 +1,41 @@ #pragma once -#include "cru/common/base.hpp" - +#include "../graphic_base.hpp" #include "../matrix.hpp" -#include "cru/common/endable.hpp" -#include "cru/common/ui_base.hpp" +#include "../native_resource.hpp" namespace cru::platform::graph { -struct IBrush; -struct IGeometry; -struct ITextLayout; +class Brush; +class Geometry; +class TextLayout; + +class Painter : public NativeResource { + protected: + Painter() = default; + + public: + Painter(const Painter& other) = delete; + Painter& operator=(const Painter& other) = delete; + + Painter(Painter&& other) = delete; + Painter& operator=(Painter&& other) = delete; + + ~Painter() override = default; -struct IPainter : virtual Interface, virtual IEndable<void> { + public: 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, IBrush* brush, + + virtual void Clear(const Color& color) = 0; + + virtual void StrokeRectangle(const Rect& rectangle, Brush* brush, float width) = 0; - virtual void FillRectangle(const ui::Rect& rectangle, IBrush* brush) = 0; - virtual void StrokeGeometry(IGeometry* geometry, IBrush* brush, + virtual void FillRectangle(const Rect& rectangle, Brush* brush) = 0; + + virtual void StrokeGeometry(Geometry* geometry, Brush* brush, float width) = 0; - virtual void FillGeometry(IGeometry* geometry, IBrush* brush) = 0; - virtual void DrawText(const ui::Point& offset, ITextLayout* text_layout, - IBrush* brush) = 0; + virtual void FillGeometry(Geometry* geometry, Brush* brush) = 0; + + virtual void DrawText(const Point& offset, TextLayout* text_layout, + Brush* brush) = 0; }; } // namespace cru::platform::graph diff --git a/include/cru/platform/graph/text_layout.hpp b/include/cru/platform/graph/text_layout.hpp index 894c1408..56943098 100644 --- a/include/cru/platform/graph/text_layout.hpp +++ b/include/cru/platform/graph/text_layout.hpp @@ -1,24 +1,38 @@ #pragma once -#include "cru/common/base.hpp" - -#include "cru/common/ui_base.hpp" +#include "../graphic_base.hpp" +#include "../native_resource.hpp" #include <memory> #include <string> #include <vector> namespace cru::platform::graph { -struct IFontDescriptor; +class Font; + +class TextLayout : public NativeResource { + protected: + TextLayout() = default; + + public: + TextLayout(const TextLayout& other) = delete; + TextLayout& operator=(const TextLayout& other) = delete; + + TextLayout(TextLayout&& other) = delete; + TextLayout& operator=(TextLayout&& other) = delete; -struct ITextLayout : virtual Interface { + ~TextLayout() override = default; + + public: virtual std::wstring GetText() = 0; virtual void SetText(std::wstring new_text) = 0; - virtual std::shared_ptr<IFontDescriptor> GetFont() = 0; - virtual void SetFont(std::shared_ptr<IFontDescriptor> font) = 0; + + virtual std::shared_ptr<Font> GetFont() = 0; + virtual void SetFont(std::shared_ptr<Font> font) = 0; + virtual void SetMaxWidth(float max_width) = 0; virtual void SetMaxHeight(float max_height) = 0; - virtual ui::Rect GetTextBounds() = 0; - virtual std::vector<ui::Rect> TextRangeRect( - const ui::TextRange& text_range) = 0; + + virtual Rect GetTextBounds() = 0; + virtual std::vector<Rect> TextRangeRect(const TextRange& text_range) = 0; }; -} // namespace cru::platform +} // namespace cru::platform::graph |