aboutsummaryrefslogtreecommitdiff
path: root/include/cru/platform/graph
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2019-05-24 23:45:58 +0800
committercrupest <crupest@outlook.com>2019-05-24 23:45:58 +0800
commitb6db663269201fa14a6a4aa1b9042645a9e8f859 (patch)
tree1984e2c2784fb9623d4c20fbdd6fc650792e133c /include/cru/platform/graph
parentb9df1bcaea0c19b2e29479cdb1ad5a39e23c4ee7 (diff)
downloadcru-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.hpp4
-rw-r--r--include/cru/platform/graph/font.hpp2
-rw-r--r--include/cru/platform/graph/geometry.hpp14
-rw-r--r--include/cru/platform/graph/graph_factory.hpp33
-rw-r--r--include/cru/platform/graph/painter.hpp26
-rw-r--r--include/cru/platform/graph/text_layout.hpp8
-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);