From 74bb9cd27242b9320f99ff4d2b50c3051576cc14 Mon Sep 17 00:00:00 2001 From: crupest Date: Tue, 8 Feb 2022 16:53:51 +0800 Subject: ... --- include/cru/platform/graphics/Base.h | 37 ++++++++++++ include/cru/platform/graphics/Base.hpp | 37 ------------ include/cru/platform/graphics/Brush.h | 11 ++++ include/cru/platform/graphics/Brush.hpp | 11 ---- include/cru/platform/graphics/Factory.h | 32 ++++++++++ include/cru/platform/graphics/Factory.hpp | 32 ---------- include/cru/platform/graphics/Font.h | 8 +++ include/cru/platform/graphics/Font.hpp | 8 --- include/cru/platform/graphics/Geometry.h | 20 ++++++ include/cru/platform/graphics/Geometry.hpp | 20 ------ include/cru/platform/graphics/Image.h | 10 +++ include/cru/platform/graphics/Image.hpp | 10 --- include/cru/platform/graphics/ImageFactory.h | 11 ++++ include/cru/platform/graphics/ImageFactory.hpp | 11 ---- include/cru/platform/graphics/NullPainter.h | 84 ++++++++++++++++++++++++++ include/cru/platform/graphics/NullPainter.hpp | 84 -------------------------- include/cru/platform/graphics/Painter.h | 42 +++++++++++++ include/cru/platform/graphics/Painter.hpp | 42 ------------- include/cru/platform/graphics/Resource.h | 10 +++ include/cru/platform/graphics/Resource.hpp | 10 --- include/cru/platform/graphics/TextLayout.h | 33 ++++++++++ include/cru/platform/graphics/TextLayout.hpp | 33 ---------- include/cru/platform/graphics/util/Painter.h | 18 ++++++ include/cru/platform/graphics/util/Painter.hpp | 18 ------ 24 files changed, 316 insertions(+), 316 deletions(-) create mode 100644 include/cru/platform/graphics/Base.h delete mode 100644 include/cru/platform/graphics/Base.hpp create mode 100644 include/cru/platform/graphics/Brush.h delete mode 100644 include/cru/platform/graphics/Brush.hpp create mode 100644 include/cru/platform/graphics/Factory.h delete mode 100644 include/cru/platform/graphics/Factory.hpp create mode 100644 include/cru/platform/graphics/Font.h delete mode 100644 include/cru/platform/graphics/Font.hpp create mode 100644 include/cru/platform/graphics/Geometry.h delete mode 100644 include/cru/platform/graphics/Geometry.hpp create mode 100644 include/cru/platform/graphics/Image.h delete mode 100644 include/cru/platform/graphics/Image.hpp create mode 100644 include/cru/platform/graphics/ImageFactory.h delete mode 100644 include/cru/platform/graphics/ImageFactory.hpp create mode 100644 include/cru/platform/graphics/NullPainter.h delete mode 100644 include/cru/platform/graphics/NullPainter.hpp create mode 100644 include/cru/platform/graphics/Painter.h delete mode 100644 include/cru/platform/graphics/Painter.hpp create mode 100644 include/cru/platform/graphics/Resource.h delete mode 100644 include/cru/platform/graphics/Resource.hpp create mode 100644 include/cru/platform/graphics/TextLayout.h delete mode 100644 include/cru/platform/graphics/TextLayout.hpp create mode 100644 include/cru/platform/graphics/util/Painter.h delete mode 100644 include/cru/platform/graphics/util/Painter.hpp (limited to 'include/cru/platform/graphics') diff --git a/include/cru/platform/graphics/Base.h b/include/cru/platform/graphics/Base.h new file mode 100644 index 00000000..a134fb33 --- /dev/null +++ b/include/cru/platform/graphics/Base.h @@ -0,0 +1,37 @@ +#pragma once +#include "../Color.h" +#include "../GraphicsBase.h" +#include "../Matrix.h" +#include "../Resource.h" + +#include + +#ifdef CRU_PLATFORM_WINDOWS +#ifdef CRU_PLATFORM_GRAPHICS_EXPORT_API +#define CRU_PLATFORM_GRAPHICS_API __declspec(dllexport) +#else +#define CRU_PLATFORM_GRAPHICS_API __declspec(dllimport) +#endif +#else +#define CRU_PLATFORM_GRAPHICS_API +#endif + +namespace cru::platform::graphics { +// forward declarations +struct IGraphicsFactory; +struct IBrush; +struct ISolidColorBrush; +struct IFont; +struct IGeometry; +struct IGeometryBuilder; +struct IImage; +struct IImageFactory; +struct IPainter; +struct ITextLayout; + +struct TextHitTestResult { + gsl::index position; + bool trailing; + bool inside_text; +}; +} // namespace cru::platform::graphics diff --git a/include/cru/platform/graphics/Base.hpp b/include/cru/platform/graphics/Base.hpp deleted file mode 100644 index 416f0df4..00000000 --- a/include/cru/platform/graphics/Base.hpp +++ /dev/null @@ -1,37 +0,0 @@ -#pragma once -#include "../Color.hpp" -#include "../GraphicsBase.hpp" -#include "../Matrix.hpp" -#include "../Resource.hpp" - -#include - -#ifdef CRU_PLATFORM_WINDOWS -#ifdef CRU_PLATFORM_GRAPHICS_EXPORT_API -#define CRU_PLATFORM_GRAPHICS_API __declspec(dllexport) -#else -#define CRU_PLATFORM_GRAPHICS_API __declspec(dllimport) -#endif -#else -#define CRU_PLATFORM_GRAPHICS_API -#endif - -namespace cru::platform::graphics { -// forward declarations -struct IGraphicsFactory; -struct IBrush; -struct ISolidColorBrush; -struct IFont; -struct IGeometry; -struct IGeometryBuilder; -struct IImage; -struct IImageFactory; -struct IPainter; -struct ITextLayout; - -struct TextHitTestResult { - gsl::index position; - bool trailing; - bool inside_text; -}; -} // namespace cru::platform::graphics diff --git a/include/cru/platform/graphics/Brush.h b/include/cru/platform/graphics/Brush.h new file mode 100644 index 00000000..6f4a6902 --- /dev/null +++ b/include/cru/platform/graphics/Brush.h @@ -0,0 +1,11 @@ +#pragma once +#include "Resource.h" + +namespace cru::platform::graphics { +struct CRU_PLATFORM_GRAPHICS_API IBrush : virtual IGraphicsResource {}; + +struct CRU_PLATFORM_GRAPHICS_API ISolidColorBrush : virtual IBrush { + virtual Color GetColor() = 0; + virtual void SetColor(const Color& color) = 0; +}; +} // namespace cru::platform::graphics diff --git a/include/cru/platform/graphics/Brush.hpp b/include/cru/platform/graphics/Brush.hpp deleted file mode 100644 index 772edd5c..00000000 --- a/include/cru/platform/graphics/Brush.hpp +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once -#include "Resource.hpp" - -namespace cru::platform::graphics { -struct CRU_PLATFORM_GRAPHICS_API IBrush : virtual IGraphicsResource {}; - -struct CRU_PLATFORM_GRAPHICS_API ISolidColorBrush : virtual IBrush { - virtual Color GetColor() = 0; - virtual void SetColor(const Color& color) = 0; -}; -} // namespace cru::platform::graphics diff --git a/include/cru/platform/graphics/Factory.h b/include/cru/platform/graphics/Factory.h new file mode 100644 index 00000000..d197d821 --- /dev/null +++ b/include/cru/platform/graphics/Factory.h @@ -0,0 +1,32 @@ +#pragma once +#include "Resource.h" + +#include "Brush.h" +#include "Font.h" +#include "Geometry.h" +#include "Image.h" +#include "ImageFactory.h" +#include "TextLayout.h" + +namespace cru::platform::graphics { +// Entry point of the graphics module. +struct CRU_PLATFORM_GRAPHICS_API IGraphicsFactory : virtual IPlatformResource { + virtual std::unique_ptr CreateSolidColorBrush() = 0; + + virtual std::unique_ptr CreateGeometryBuilder() = 0; + + virtual std::unique_ptr CreateFont(String font_family, + float font_size) = 0; + + virtual std::unique_ptr CreateTextLayout( + std::shared_ptr font, String text) = 0; + + std::unique_ptr CreateSolidColorBrush(const Color& color) { + std::unique_ptr brush = CreateSolidColorBrush(); + brush->SetColor(color); + return brush; + } + + virtual IImageFactory* GetImageFactory() = 0; +}; +} // namespace cru::platform::graphics diff --git a/include/cru/platform/graphics/Factory.hpp b/include/cru/platform/graphics/Factory.hpp deleted file mode 100644 index 7aa88ebd..00000000 --- a/include/cru/platform/graphics/Factory.hpp +++ /dev/null @@ -1,32 +0,0 @@ -#pragma once -#include "Resource.hpp" - -#include "Brush.hpp" -#include "Font.hpp" -#include "Geometry.hpp" -#include "Image.hpp" -#include "ImageFactory.hpp" -#include "TextLayout.hpp" - -namespace cru::platform::graphics { -// Entry point of the graphics module. -struct CRU_PLATFORM_GRAPHICS_API IGraphicsFactory : virtual IPlatformResource { - virtual std::unique_ptr CreateSolidColorBrush() = 0; - - virtual std::unique_ptr CreateGeometryBuilder() = 0; - - virtual std::unique_ptr CreateFont(String font_family, - float font_size) = 0; - - virtual std::unique_ptr CreateTextLayout( - std::shared_ptr font, String text) = 0; - - std::unique_ptr CreateSolidColorBrush(const Color& color) { - std::unique_ptr brush = CreateSolidColorBrush(); - brush->SetColor(color); - return brush; - } - - virtual IImageFactory* GetImageFactory() = 0; -}; -} // namespace cru::platform::graphics diff --git a/include/cru/platform/graphics/Font.h b/include/cru/platform/graphics/Font.h new file mode 100644 index 00000000..24c35f7c --- /dev/null +++ b/include/cru/platform/graphics/Font.h @@ -0,0 +1,8 @@ +#pragma once +#include "Resource.h" + +namespace cru::platform::graphics { +struct CRU_PLATFORM_GRAPHICS_API IFont : virtual IGraphicsResource { + virtual float GetFontSize() = 0; +}; +} // namespace cru::platform::graphics diff --git a/include/cru/platform/graphics/Font.hpp b/include/cru/platform/graphics/Font.hpp deleted file mode 100644 index 2d1bc9a6..00000000 --- a/include/cru/platform/graphics/Font.hpp +++ /dev/null @@ -1,8 +0,0 @@ -#pragma once -#include "Resource.hpp" - -namespace cru::platform::graphics { -struct CRU_PLATFORM_GRAPHICS_API IFont : virtual IGraphicsResource { - virtual float GetFontSize() = 0; -}; -} // namespace cru::platform::graphics diff --git a/include/cru/platform/graphics/Geometry.h b/include/cru/platform/graphics/Geometry.h new file mode 100644 index 00000000..732fc547 --- /dev/null +++ b/include/cru/platform/graphics/Geometry.h @@ -0,0 +1,20 @@ +#pragma once +#include "Resource.h" + +namespace cru::platform::graphics { +struct CRU_PLATFORM_GRAPHICS_API IGeometry : virtual IGraphicsResource { + virtual bool FillContains(const Point& point) = 0; +}; + +// After called Build, calling every method will throw a + +struct CRU_PLATFORM_GRAPHICS_API IGeometryBuilder : virtual IGraphicsResource { + 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 std::unique_ptr Build() = 0; +}; +} // namespace cru::platform::graphics diff --git a/include/cru/platform/graphics/Geometry.hpp b/include/cru/platform/graphics/Geometry.hpp deleted file mode 100644 index e83d1c51..00000000 --- a/include/cru/platform/graphics/Geometry.hpp +++ /dev/null @@ -1,20 +0,0 @@ -#pragma once -#include "Resource.hpp" - -namespace cru::platform::graphics { -struct CRU_PLATFORM_GRAPHICS_API IGeometry : virtual IGraphicsResource { - virtual bool FillContains(const Point& point) = 0; -}; - -// After called Build, calling every method will throw a - -struct CRU_PLATFORM_GRAPHICS_API IGeometryBuilder : virtual IGraphicsResource { - 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 std::unique_ptr Build() = 0; -}; -} // namespace cru::platform::graphics diff --git a/include/cru/platform/graphics/Image.h b/include/cru/platform/graphics/Image.h new file mode 100644 index 00000000..51e27678 --- /dev/null +++ b/include/cru/platform/graphics/Image.h @@ -0,0 +1,10 @@ +#pragma once +#include "Resource.h" + +namespace cru::platform::graphics { +struct CRU_PLATFORM_GRAPHICS_API IImage : public virtual IGraphicsResource { + virtual float GetWidth() = 0; + virtual float GetHeight() = 0; + virtual std::unique_ptr CreateWithRect(const Rect& rect) = 0; +}; +} // namespace cru::platform::graphics diff --git a/include/cru/platform/graphics/Image.hpp b/include/cru/platform/graphics/Image.hpp deleted file mode 100644 index e8bf6671..00000000 --- a/include/cru/platform/graphics/Image.hpp +++ /dev/null @@ -1,10 +0,0 @@ -#pragma once -#include "Resource.hpp" - -namespace cru::platform::graphics { -struct CRU_PLATFORM_GRAPHICS_API IImage : public virtual IGraphicsResource { - virtual float GetWidth() = 0; - virtual float GetHeight() = 0; - virtual std::unique_ptr CreateWithRect(const Rect& rect) = 0; -}; -} // namespace cru::platform::graphics diff --git a/include/cru/platform/graphics/ImageFactory.h b/include/cru/platform/graphics/ImageFactory.h new file mode 100644 index 00000000..2a7902b2 --- /dev/null +++ b/include/cru/platform/graphics/ImageFactory.h @@ -0,0 +1,11 @@ +#pragma once +#include "Image.h" +#include "Resource.h" +#include "cru/common/io/Stream.h" + +namespace cru::platform::graphics { +struct CRU_PLATFORM_GRAPHICS_API IImageFactory + : public virtual IGraphicsResource { + virtual std::unique_ptr DecodeFromStream(io::Stream* stream) = 0; +}; +} // namespace cru::platform::graphics diff --git a/include/cru/platform/graphics/ImageFactory.hpp b/include/cru/platform/graphics/ImageFactory.hpp deleted file mode 100644 index 3997f783..00000000 --- a/include/cru/platform/graphics/ImageFactory.hpp +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once -#include "Image.hpp" -#include "Resource.hpp" -#include "cru/common/io/Stream.hpp" - -namespace cru::platform::graphics { -struct CRU_PLATFORM_GRAPHICS_API IImageFactory - : public virtual IGraphicsResource { - virtual std::unique_ptr DecodeFromStream(io::Stream* stream) = 0; -}; -} // namespace cru::platform::graphics diff --git a/include/cru/platform/graphics/NullPainter.h b/include/cru/platform/graphics/NullPainter.h new file mode 100644 index 00000000..2c6e6cb1 --- /dev/null +++ b/include/cru/platform/graphics/NullPainter.h @@ -0,0 +1,84 @@ +#pragma once +#include "Painter.h" +#include "cru/common/Base.h" + +namespace cru::platform::graphics { +class CRU_PLATFORM_GRAPHICS_API NullPainter : public Object, + public virtual IPainter { + public: + NullPainter() = default; + + CRU_DELETE_COPY(NullPainter) + CRU_DELETE_MOVE(NullPainter) + + ~NullPainter() override = default; + + public: + String GetPlatformId() const override { return u"NULL"; } + + String GetDebugString() override { return u"NullPainter"; } + + Matrix GetTransform() override { return Matrix(); } + void SetTransform(const Matrix& matrix) override { CRU_UNUSED(matrix) } + + void ConcatTransform(const Matrix& matrix) override { CRU_UNUSED(matrix) } + + void Clear(const Color& color) override { CRU_UNUSED(color) } + + void DrawLine(const Point& start, const Point& end, IBrush* brush, + float width) override { + CRU_UNUSED(start) CRU_UNUSED(end) CRU_UNUSED(brush) CRU_UNUSED(width) + } + void StrokeRectangle(const Rect& rectangle, IBrush* brush, + float width) override { + CRU_UNUSED(rectangle) CRU_UNUSED(brush) CRU_UNUSED(width) + } + void FillRectangle(const Rect& rectangle, IBrush* brush) override { + CRU_UNUSED(rectangle) + CRU_UNUSED(brush) + } + void StrokeEllipse(const Rect& outline_rect, IBrush* brush, + float width) override { + CRU_UNUSED(outline_rect) + CRU_UNUSED(brush) + CRU_UNUSED(width) + } + void FillEllipse(const Rect& outline_rect, IBrush* brush) override { + CRU_UNUSED(outline_rect) + CRU_UNUSED(brush) + } + + void StrokeGeometry(IGeometry* geometry, IBrush* brush, + float width) override { + CRU_UNUSED(geometry) + CRU_UNUSED(brush) + CRU_UNUSED(width) + } + void FillGeometry(IGeometry* geometry, IBrush* brush) override { + CRU_UNUSED(geometry) + CRU_UNUSED(brush) + } + + void DrawText(const Point& offset, ITextLayout* text_layout, + IBrush* brush) override { + CRU_UNUSED(offset) + CRU_UNUSED(text_layout) + CRU_UNUSED(brush) + } + + void DrawImage(const Point& offset, IImage* image) override { + CRU_UNUSED(offset) + CRU_UNUSED(image) + } + + void PushLayer(const Rect& bounds) override { CRU_UNUSED(bounds) } + + void PopLayer() override {} + + void PushState() override {} + + void PopState() override {} + + void EndDraw() override {} +}; +} // namespace cru::platform::graphics diff --git a/include/cru/platform/graphics/NullPainter.hpp b/include/cru/platform/graphics/NullPainter.hpp deleted file mode 100644 index 54c610c1..00000000 --- a/include/cru/platform/graphics/NullPainter.hpp +++ /dev/null @@ -1,84 +0,0 @@ -#pragma once -#include "Painter.hpp" -#include "cru/common/Base.hpp" - -namespace cru::platform::graphics { -class CRU_PLATFORM_GRAPHICS_API NullPainter : public Object, - public virtual IPainter { - public: - NullPainter() = default; - - CRU_DELETE_COPY(NullPainter) - CRU_DELETE_MOVE(NullPainter) - - ~NullPainter() override = default; - - public: - String GetPlatformId() const override { return u"NULL"; } - - String GetDebugString() override { return u"NullPainter"; } - - Matrix GetTransform() override { return Matrix(); } - void SetTransform(const Matrix& matrix) override { CRU_UNUSED(matrix) } - - void ConcatTransform(const Matrix& matrix) override { CRU_UNUSED(matrix) } - - void Clear(const Color& color) override { CRU_UNUSED(color) } - - void DrawLine(const Point& start, const Point& end, IBrush* brush, - float width) override { - CRU_UNUSED(start) CRU_UNUSED(end) CRU_UNUSED(brush) CRU_UNUSED(width) - } - void StrokeRectangle(const Rect& rectangle, IBrush* brush, - float width) override { - CRU_UNUSED(rectangle) CRU_UNUSED(brush) CRU_UNUSED(width) - } - void FillRectangle(const Rect& rectangle, IBrush* brush) override { - CRU_UNUSED(rectangle) - CRU_UNUSED(brush) - } - void StrokeEllipse(const Rect& outline_rect, IBrush* brush, - float width) override { - CRU_UNUSED(outline_rect) - CRU_UNUSED(brush) - CRU_UNUSED(width) - } - void FillEllipse(const Rect& outline_rect, IBrush* brush) override { - CRU_UNUSED(outline_rect) - CRU_UNUSED(brush) - } - - void StrokeGeometry(IGeometry* geometry, IBrush* brush, - float width) override { - CRU_UNUSED(geometry) - CRU_UNUSED(brush) - CRU_UNUSED(width) - } - void FillGeometry(IGeometry* geometry, IBrush* brush) override { - CRU_UNUSED(geometry) - CRU_UNUSED(brush) - } - - void DrawText(const Point& offset, ITextLayout* text_layout, - IBrush* brush) override { - CRU_UNUSED(offset) - CRU_UNUSED(text_layout) - CRU_UNUSED(brush) - } - - void DrawImage(const Point& offset, IImage* image) override { - CRU_UNUSED(offset) - CRU_UNUSED(image) - } - - void PushLayer(const Rect& bounds) override { CRU_UNUSED(bounds) } - - void PopLayer() override {} - - void PushState() override {} - - void PopState() override {} - - void EndDraw() override {} -}; -} // namespace cru::platform::graphics diff --git a/include/cru/platform/graphics/Painter.h b/include/cru/platform/graphics/Painter.h new file mode 100644 index 00000000..38ff8849 --- /dev/null +++ b/include/cru/platform/graphics/Painter.h @@ -0,0 +1,42 @@ +#pragma once +#include "Resource.h" + +namespace cru::platform::graphics { + +struct CRU_PLATFORM_GRAPHICS_API IPainter : virtual IPlatformResource { + virtual Matrix GetTransform() = 0; + virtual void SetTransform(const Matrix& matrix) = 0; + + virtual void ConcatTransform(const Matrix& matrix) = 0; + + virtual void Clear(const Color& color) = 0; + + virtual void DrawLine(const Point& start, const Point& end, IBrush* brush, + float width) = 0; + virtual void StrokeRectangle(const Rect& rectangle, IBrush* brush, + float width) = 0; + virtual void FillRectangle(const Rect& rectangle, IBrush* brush) = 0; + virtual void StrokeEllipse(const Rect& outline_rect, IBrush* brush, + float width) = 0; + virtual void FillEllipse(const Rect& outline_rect, IBrush* brush) = 0; + + virtual void StrokeGeometry(IGeometry* geometry, IBrush* brush, + float width) = 0; + virtual void FillGeometry(IGeometry* geometry, IBrush* brush) = 0; + + virtual void DrawText(const Point& offset, ITextLayout* text_layout, + IBrush* brush) = 0; + + virtual void DrawImage(const Point& offset, IImage* image) = 0; + + virtual void PushLayer(const Rect& bounds) = 0; + + virtual void PopLayer() = 0; + + virtual void PushState() = 0; + + virtual void PopState() = 0; + + virtual void EndDraw() = 0; +}; +} // namespace cru::platform::graphics diff --git a/include/cru/platform/graphics/Painter.hpp b/include/cru/platform/graphics/Painter.hpp deleted file mode 100644 index 171e6260..00000000 --- a/include/cru/platform/graphics/Painter.hpp +++ /dev/null @@ -1,42 +0,0 @@ -#pragma once -#include "Resource.hpp" - -namespace cru::platform::graphics { - -struct CRU_PLATFORM_GRAPHICS_API IPainter : virtual IPlatformResource { - virtual Matrix GetTransform() = 0; - virtual void SetTransform(const Matrix& matrix) = 0; - - virtual void ConcatTransform(const Matrix& matrix) = 0; - - virtual void Clear(const Color& color) = 0; - - virtual void DrawLine(const Point& start, const Point& end, IBrush* brush, - float width) = 0; - virtual void StrokeRectangle(const Rect& rectangle, IBrush* brush, - float width) = 0; - virtual void FillRectangle(const Rect& rectangle, IBrush* brush) = 0; - virtual void StrokeEllipse(const Rect& outline_rect, IBrush* brush, - float width) = 0; - virtual void FillEllipse(const Rect& outline_rect, IBrush* brush) = 0; - - virtual void StrokeGeometry(IGeometry* geometry, IBrush* brush, - float width) = 0; - virtual void FillGeometry(IGeometry* geometry, IBrush* brush) = 0; - - virtual void DrawText(const Point& offset, ITextLayout* text_layout, - IBrush* brush) = 0; - - virtual void DrawImage(const Point& offset, IImage* image) = 0; - - virtual void PushLayer(const Rect& bounds) = 0; - - virtual void PopLayer() = 0; - - virtual void PushState() = 0; - - virtual void PopState() = 0; - - virtual void EndDraw() = 0; -}; -} // namespace cru::platform::graphics diff --git a/include/cru/platform/graphics/Resource.h b/include/cru/platform/graphics/Resource.h new file mode 100644 index 00000000..ab1b8de6 --- /dev/null +++ b/include/cru/platform/graphics/Resource.h @@ -0,0 +1,10 @@ +#pragma once +#include "Base.h" + +namespace cru::platform::graphics { +struct IGraphicsFactory; + +struct CRU_PLATFORM_GRAPHICS_API IGraphicsResource : virtual IPlatformResource { + virtual IGraphicsFactory* GetGraphicsFactory() = 0; +}; +} // namespace cru::platform::graphics diff --git a/include/cru/platform/graphics/Resource.hpp b/include/cru/platform/graphics/Resource.hpp deleted file mode 100644 index e559b0e9..00000000 --- a/include/cru/platform/graphics/Resource.hpp +++ /dev/null @@ -1,10 +0,0 @@ -#pragma once -#include "Base.hpp" - -namespace cru::platform::graphics { -struct IGraphicsFactory; - -struct CRU_PLATFORM_GRAPHICS_API IGraphicsResource : virtual IPlatformResource { - virtual IGraphicsFactory* GetGraphicsFactory() = 0; -}; -} // namespace cru::platform::graphics diff --git a/include/cru/platform/graphics/TextLayout.h b/include/cru/platform/graphics/TextLayout.h new file mode 100644 index 00000000..e060186b --- /dev/null +++ b/include/cru/platform/graphics/TextLayout.h @@ -0,0 +1,33 @@ +#pragma once +#include "Resource.h" + +#include +#include + +namespace cru::platform::graphics { +// Requirement: +// All text must be left-top aligned. +struct CRU_PLATFORM_GRAPHICS_API ITextLayout : virtual IGraphicsResource { + virtual String GetText() = 0; + virtual void SetText(String new_text) = 0; + + virtual std::shared_ptr GetFont() = 0; + virtual void SetFont(std::shared_ptr font) = 0; + + virtual void SetMaxWidth(float max_width) = 0; + virtual void SetMaxHeight(float max_height) = 0; + + virtual bool IsEditMode() = 0; + virtual void SetEditMode(bool enable) = 0; + + virtual Index GetLineIndexFromCharIndex(Index char_index) = 0; + virtual Index GetLineCount() = 0; + virtual float GetLineHeight(Index line_index) = 0; + + virtual Rect GetTextBounds(bool includingTrailingSpace = false) = 0; + virtual std::vector TextRangeRect(const TextRange& text_range) = 0; + // Width is always 0, height is line height. + virtual Rect TextSinglePoint(Index position, bool trailing) = 0; + virtual TextHitTestResult HitTest(const Point& point) = 0; +}; +} // namespace cru::platform::graphics diff --git a/include/cru/platform/graphics/TextLayout.hpp b/include/cru/platform/graphics/TextLayout.hpp deleted file mode 100644 index f9ccc824..00000000 --- a/include/cru/platform/graphics/TextLayout.hpp +++ /dev/null @@ -1,33 +0,0 @@ -#pragma once -#include "Resource.hpp" - -#include -#include - -namespace cru::platform::graphics { -// Requirement: -// All text must be left-top aligned. -struct CRU_PLATFORM_GRAPHICS_API ITextLayout : virtual IGraphicsResource { - virtual String GetText() = 0; - virtual void SetText(String new_text) = 0; - - virtual std::shared_ptr GetFont() = 0; - virtual void SetFont(std::shared_ptr font) = 0; - - virtual void SetMaxWidth(float max_width) = 0; - virtual void SetMaxHeight(float max_height) = 0; - - virtual bool IsEditMode() = 0; - virtual void SetEditMode(bool enable) = 0; - - virtual Index GetLineIndexFromCharIndex(Index char_index) = 0; - virtual Index GetLineCount() = 0; - virtual float GetLineHeight(Index line_index) = 0; - - virtual Rect GetTextBounds(bool includingTrailingSpace = false) = 0; - virtual std::vector TextRangeRect(const TextRange& text_range) = 0; - // Width is always 0, height is line height. - virtual Rect TextSinglePoint(Index position, bool trailing) = 0; - virtual TextHitTestResult HitTest(const Point& point) = 0; -}; -} // namespace cru::platform::graphics diff --git a/include/cru/platform/graphics/util/Painter.h b/include/cru/platform/graphics/util/Painter.h new file mode 100644 index 00000000..e36d5c55 --- /dev/null +++ b/include/cru/platform/graphics/util/Painter.h @@ -0,0 +1,18 @@ +#pragma once +#include "../Painter.h" + +#include +#include + +namespace cru::platform::graphics::util { +template +void WithTransform(IPainter* painter, const Matrix& matrix, const Fn& action) { + static_assert(std::is_invocable_v, + "Action must can be be invoked with painter."); + const auto old = painter->GetTransform(); + painter->PushState(); + painter->ConcatTransform(matrix); + action(painter); + painter->PopState(); +} +} // namespace cru::platform::graphics::util diff --git a/include/cru/platform/graphics/util/Painter.hpp b/include/cru/platform/graphics/util/Painter.hpp deleted file mode 100644 index 2e0fbb51..00000000 --- a/include/cru/platform/graphics/util/Painter.hpp +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once -#include "../Painter.hpp" - -#include -#include - -namespace cru::platform::graphics::util { -template -void WithTransform(IPainter* painter, const Matrix& matrix, const Fn& action) { - static_assert(std::is_invocable_v, - "Action must can be be invoked with painter."); - const auto old = painter->GetTransform(); - painter->PushState(); - painter->ConcatTransform(matrix); - action(painter); - painter->PopState(); -} -} // namespace cru::platform::graphics::util -- cgit v1.2.3