aboutsummaryrefslogtreecommitdiff
path: root/include/cru/platform
diff options
context:
space:
mode:
Diffstat (limited to 'include/cru/platform')
-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
-rw-r--r--include/cru/platform/native/native_window.hpp4
-rw-r--r--include/cru/platform/native/ui_applicaition.hpp5
9 files changed, 51 insertions, 51 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);
diff --git a/include/cru/platform/native/native_window.hpp b/include/cru/platform/native/native_window.hpp
index a82e7a23..0e076348 100644
--- a/include/cru/platform/native/native_window.hpp
+++ b/include/cru/platform/native/native_window.hpp
@@ -6,7 +6,7 @@
#include "cru/common/ui_base.hpp"
namespace cru::platform::graph {
-struct Painter;
+struct IPainter;
}
namespace cru::platform::native {
@@ -34,7 +34,7 @@ struct NativeWindow : public virtual Interface {
// The lefttop of the rect is relative to screen lefttop.
virtual void SetWindowRect(const ui::Rect& rect) = 0;
- virtual graph::Painter* BeginPaint() = 0;
+ virtual graph::IPainter* BeginPaint() = 0;
virtual Event<>* DestroyEvent() = 0;
virtual Event<const ui::Size&>* ResizeEvent() = 0;
diff --git a/include/cru/platform/native/ui_applicaition.hpp b/include/cru/platform/native/ui_applicaition.hpp
index 17ff703d..0188393e 100644
--- a/include/cru/platform/native/ui_applicaition.hpp
+++ b/include/cru/platform/native/ui_applicaition.hpp
@@ -5,14 +5,11 @@
#include <functional>
#include <vector>
-namespace cru::platform::graph {
-struct GraphFactory;
-}
-
namespace cru::platform::native {
struct NativeWindow;
struct UiApplication : public virtual Interface {
+ static UiApplication* CreateInstance();
static UiApplication* GetInstance();
virtual int Run() = 0;