aboutsummaryrefslogtreecommitdiff
path: root/include/cru/win/graphics
diff options
context:
space:
mode:
Diffstat (limited to 'include/cru/win/graphics')
-rw-r--r--include/cru/win/graphics/direct/Brush.hpp4
-rw-r--r--include/cru/win/graphics/direct/Factory.hpp15
-rw-r--r--include/cru/win/graphics/direct/Font.hpp6
-rw-r--r--include/cru/win/graphics/direct/Geometry.hpp8
-rw-r--r--include/cru/win/graphics/direct/Painter.hpp10
-rw-r--r--include/cru/win/graphics/direct/Resource.hpp20
-rw-r--r--include/cru/win/graphics/direct/TextLayout.hpp23
-rw-r--r--include/cru/win/graphics/direct/WindowRenderTarget.hpp6
8 files changed, 54 insertions, 38 deletions
diff --git a/include/cru/win/graphics/direct/Brush.hpp b/include/cru/win/graphics/direct/Brush.hpp
index fbff83b5..9d8e5384 100644
--- a/include/cru/win/graphics/direct/Brush.hpp
+++ b/include/cru/win/graphics/direct/Brush.hpp
@@ -9,12 +9,12 @@ struct ID2DBrush : virtual IBrush {
virtual ID2D1Brush* GetD2DBrushInterface() const = 0;
};
-class D2DSolidColorBrush : public DirectGraphResource,
+class D2DSolidColorBrush : public DirectGraphicsResource,
public virtual ISolidColorBrush,
public virtual ID2DBrush,
public virtual IComResource<ID2D1SolidColorBrush> {
public:
- explicit D2DSolidColorBrush(DirectGraphFactory* factory);
+ explicit D2DSolidColorBrush(DirectGraphicsFactory* factory);
CRU_DELETE_COPY(D2DSolidColorBrush)
CRU_DELETE_MOVE(D2DSolidColorBrush)
diff --git a/include/cru/win/graphics/direct/Factory.hpp b/include/cru/win/graphics/direct/Factory.hpp
index 70f3ede1..efcebba7 100644
--- a/include/cru/win/graphics/direct/Factory.hpp
+++ b/include/cru/win/graphics/direct/Factory.hpp
@@ -4,14 +4,15 @@
#include "cru/platform/graphics/Factory.hpp"
namespace cru::platform::graphics::win::direct {
-class DirectGraphFactory : public DirectResource, public virtual IGraphFactory {
+class DirectGraphicsFactory : public DirectResource,
+ public virtual IGraphicsFactory {
public:
- DirectGraphFactory();
+ DirectGraphicsFactory();
- CRU_DELETE_COPY(DirectGraphFactory)
- CRU_DELETE_MOVE(DirectGraphFactory)
+ CRU_DELETE_COPY(DirectGraphicsFactory)
+ CRU_DELETE_MOVE(DirectGraphicsFactory)
- ~DirectGraphFactory() override;
+ ~DirectGraphicsFactory() override;
public:
ID3D11Device* GetD3D11Device() const { return d3d11_device_.Get(); }
@@ -38,11 +39,11 @@ class DirectGraphFactory : public DirectResource, public virtual IGraphFactory {
std::unique_ptr<IGeometryBuilder> CreateGeometryBuilder() override;
- std::unique_ptr<IFont> CreateFont(std::u16string font_family,
+ std::unique_ptr<IFont> CreateFont(String font_family,
float font_size) override;
std::unique_ptr<ITextLayout> CreateTextLayout(std::shared_ptr<IFont> font,
- std::u16string text) override;
+ String text) override;
private:
Microsoft::WRL::ComPtr<ID3D11Device> d3d11_device_;
diff --git a/include/cru/win/graphics/direct/Font.hpp b/include/cru/win/graphics/direct/Font.hpp
index fd3921a3..3cd94f82 100644
--- a/include/cru/win/graphics/direct/Font.hpp
+++ b/include/cru/win/graphics/direct/Font.hpp
@@ -7,11 +7,11 @@
#include <string_view>
namespace cru::platform::graphics::win::direct {
-class DWriteFont : public DirectGraphResource,
+class DWriteFont : public DirectGraphicsResource,
public virtual IFont,
public virtual IComResource<IDWriteTextFormat> {
public:
- DWriteFont(DirectGraphFactory* factory, std::u16string font_family,
+ DWriteFont(DirectGraphicsFactory* factory, String font_family,
float font_size);
CRU_DELETE_COPY(DWriteFont)
@@ -27,7 +27,7 @@ class DWriteFont : public DirectGraphResource,
float GetFontSize() override;
private:
- std::u16string font_family_;
+ String font_family_;
Microsoft::WRL::ComPtr<IDWriteTextFormat> text_format_;
};
} // namespace cru::platform::graphics::win::direct
diff --git a/include/cru/win/graphics/direct/Geometry.hpp b/include/cru/win/graphics/direct/Geometry.hpp
index edfec590..b3b82f9c 100644
--- a/include/cru/win/graphics/direct/Geometry.hpp
+++ b/include/cru/win/graphics/direct/Geometry.hpp
@@ -5,10 +5,10 @@
#include "cru/platform/graphics/Geometry.hpp"
namespace cru::platform::graphics::win::direct {
-class D2DGeometryBuilder : public DirectGraphResource,
+class D2DGeometryBuilder : public DirectGraphicsResource,
public virtual IGeometryBuilder {
public:
- explicit D2DGeometryBuilder(DirectGraphFactory* factory);
+ explicit D2DGeometryBuilder(DirectGraphicsFactory* factory);
CRU_DELETE_COPY(D2DGeometryBuilder)
CRU_DELETE_MOVE(D2DGeometryBuilder)
@@ -33,11 +33,11 @@ class D2DGeometryBuilder : public DirectGraphResource,
Microsoft::WRL::ComPtr<ID2D1GeometrySink> geometry_sink_;
};
-class D2DGeometry : public DirectGraphResource,
+class D2DGeometry : public DirectGraphicsResource,
public virtual IGeometry,
public IComResource<ID2D1Geometry> {
public:
- D2DGeometry(DirectGraphFactory* factory,
+ D2DGeometry(DirectGraphicsFactory* factory,
Microsoft::WRL::ComPtr<ID2D1PathGeometry> geometry);
CRU_DELETE_COPY(D2DGeometry)
diff --git a/include/cru/win/graphics/direct/Painter.hpp b/include/cru/win/graphics/direct/Painter.hpp
index b34c1563..d7b90d19 100644
--- a/include/cru/win/graphics/direct/Painter.hpp
+++ b/include/cru/win/graphics/direct/Painter.hpp
@@ -24,6 +24,7 @@ class D2DPainter : public DirectResource,
public:
Matrix GetTransform() override;
void SetTransform(const platform::Matrix& matrix) override;
+ void ConcatTransform(const Matrix& matrix) override;
void Clear(const Color& color) override;
@@ -32,6 +33,9 @@ class D2DPainter : public DirectResource,
void StrokeRectangle(const Rect& rectangle, IBrush* brush,
float width) override;
void FillRectangle(const Rect& rectangle, IBrush* brush) override;
+ void StrokeEllipse(const Rect& outline_rect, IBrush* brush,
+ float width) override;
+ void FillEllipse(const Rect& outline_rect, IBrush* brush) override;
void StrokeGeometry(IGeometry* geometry, IBrush* brush, float width) override;
void FillGeometry(IGeometry* geometry, IBrush* brush) override;
@@ -40,9 +44,11 @@ class D2DPainter : public DirectResource,
IBrush* brush) override;
void PushLayer(const Rect& bounds) override;
-
void PopLayer() override;
+ void PushState() override;
+ void PopState() override;
+
void EndDraw() override final;
protected:
@@ -56,6 +62,8 @@ class D2DPainter : public DirectResource,
ID2D1RenderTarget* render_target_;
std::vector<Microsoft::WRL::ComPtr<ID2D1Layer>> layers_;
+ std::vector<Microsoft::WRL::ComPtr<ID2D1DrawingStateBlock>>
+ drawing_state_stack_;
bool is_drawing_ = true;
};
diff --git a/include/cru/win/graphics/direct/Resource.hpp b/include/cru/win/graphics/direct/Resource.hpp
index e6ffb203..c376628d 100644
--- a/include/cru/win/graphics/direct/Resource.hpp
+++ b/include/cru/win/graphics/direct/Resource.hpp
@@ -6,7 +6,7 @@
#include <string_view>
namespace cru::platform::graphics::win::direct {
-class DirectGraphFactory;
+class DirectGraphicsFactory;
class DirectResource : public Object, public virtual IPlatformResource {
public:
@@ -25,25 +25,25 @@ class DirectResource : public Object, public virtual IPlatformResource {
String GetPlatformId() const final { return kPlatformId; }
};
-class DirectGraphResource : public DirectResource,
- public virtual IGraphResource {
+class DirectGraphicsResource : public DirectResource,
+ public virtual IGraphicsResource {
protected:
// Param factory can't be null.
- explicit DirectGraphResource(DirectGraphFactory* factory);
+ explicit DirectGraphicsResource(DirectGraphicsFactory* factory);
public:
- CRU_DELETE_COPY(DirectGraphResource)
- CRU_DELETE_MOVE(DirectGraphResource)
+ CRU_DELETE_COPY(DirectGraphicsResource)
+ CRU_DELETE_MOVE(DirectGraphicsResource)
- ~DirectGraphResource() override = default;
+ ~DirectGraphicsResource() override = default;
public:
- IGraphFactory* GetGraphFactory() final;
+ IGraphicsFactory* GetGraphicsFactory() final;
public:
- DirectGraphFactory* GetDirectFactory() const { return factory_; }
+ DirectGraphicsFactory* GetDirectFactory() const { return factory_; }
private:
- DirectGraphFactory* factory_;
+ DirectGraphicsFactory* factory_;
};
} // namespace cru::platform::graphics::win::direct
diff --git a/include/cru/win/graphics/direct/TextLayout.hpp b/include/cru/win/graphics/direct/TextLayout.hpp
index aa040278..b1843dd7 100644
--- a/include/cru/win/graphics/direct/TextLayout.hpp
+++ b/include/cru/win/graphics/direct/TextLayout.hpp
@@ -10,12 +10,12 @@
namespace cru::platform::graphics::win::direct {
class DWriteFont;
-class DWriteTextLayout : public DirectGraphResource,
+class DWriteTextLayout : public DirectGraphicsResource,
public virtual ITextLayout,
public virtual IComResource<IDWriteTextLayout> {
public:
- DWriteTextLayout(DirectGraphFactory* factory, std::shared_ptr<IFont> font,
- std::u16string text);
+ DWriteTextLayout(DirectGraphicsFactory* factory, std::shared_ptr<IFont> font,
+ String text);
CRU_DELETE_COPY(DWriteTextLayout)
CRU_DELETE_MOVE(DWriteTextLayout)
@@ -28,9 +28,8 @@ class DWriteTextLayout : public DirectGraphResource,
}
public:
- std::u16string GetText() override;
- std::u16string_view GetTextView() override;
- void SetText(std::u16string new_text) override;
+ String GetText() override;
+ void SetText(String new_text) override;
std::shared_ptr<IFont> GetFont() override;
void SetFont(std::shared_ptr<IFont> font) override;
@@ -38,15 +37,23 @@ class DWriteTextLayout : public DirectGraphResource,
void SetMaxWidth(float max_width) override;
void SetMaxHeight(float max_height) override;
+ bool IsEditMode() override;
+ void SetEditMode(bool enable) override;
+
+ Index GetLineIndexFromCharIndex(Index char_index) override;
+ float GetLineHeight(Index line_index) override;
+ Index GetLineCount() override;
+
Rect GetTextBounds(bool includingTrailingSpace = false) override;
// Return empty vector if text_range.count is 0. Text range could be in
// reverse direction, it should be normalized first in implementation.
std::vector<Rect> TextRangeRect(const TextRange& text_range) override;
- Point TextSinglePoint(Index position, bool trailing) override;
+ Rect TextSinglePoint(Index position, bool trailing) override;
TextHitTestResult HitTest(const Point& point) override;
private:
- std::u16string text_;
+ bool edit_mode_ = false;
+ String text_;
std::shared_ptr<DWriteFont> font_;
float max_width_ = std::numeric_limits<float>::max();
float max_height_ = std::numeric_limits<float>::max();
diff --git a/include/cru/win/graphics/direct/WindowRenderTarget.hpp b/include/cru/win/graphics/direct/WindowRenderTarget.hpp
index 75b1bf20..c197841d 100644
--- a/include/cru/win/graphics/direct/WindowRenderTarget.hpp
+++ b/include/cru/win/graphics/direct/WindowRenderTarget.hpp
@@ -5,7 +5,7 @@ namespace cru::platform::graphics::win::direct {
// Represents a window render target.
class D2DWindowRenderTarget : public Object {
public:
- D2DWindowRenderTarget(gsl::not_null<DirectGraphFactory*> factory, HWND hwnd);
+ D2DWindowRenderTarget(gsl::not_null<DirectGraphicsFactory*> factory, HWND hwnd);
CRU_DELETE_COPY(D2DWindowRenderTarget)
CRU_DELETE_MOVE(D2DWindowRenderTarget)
@@ -13,7 +13,7 @@ class D2DWindowRenderTarget : public Object {
~D2DWindowRenderTarget() override = default;
public:
- graphics::win::direct::DirectGraphFactory* GetDirectFactory() const {
+ graphics::win::direct::DirectGraphicsFactory* GetDirectFactory() const {
return factory_;
}
@@ -33,7 +33,7 @@ class D2DWindowRenderTarget : public Object {
void CreateTargetBitmap();
private:
- DirectGraphFactory* factory_;
+ DirectGraphicsFactory* factory_;
HWND hwnd_;
Microsoft::WRL::ComPtr<ID2D1DeviceContext> d2d1_device_context_;
Microsoft::WRL::ComPtr<IDXGISwapChain1> dxgi_swap_chain_;