From 74bb9cd27242b9320f99ff4d2b50c3051576cc14 Mon Sep 17 00:00:00 2001 From: crupest Date: Tue, 8 Feb 2022 16:53:51 +0800 Subject: ... --- include/cru/win/graphics/direct/Base.h | 18 ++++ include/cru/win/graphics/direct/Base.hpp | 18 ---- include/cru/win/graphics/direct/Brush.h | 40 ++++++++ include/cru/win/graphics/direct/Brush.hpp | 40 -------- include/cru/win/graphics/direct/ComResource.h | 11 +++ include/cru/win/graphics/direct/ComResource.hpp | 11 --- include/cru/win/graphics/direct/ConvertUtil.h | 107 +++++++++++++++++++++ include/cru/win/graphics/direct/ConvertUtil.hpp | 107 --------------------- include/cru/win/graphics/direct/Exception.h | 7 ++ include/cru/win/graphics/direct/Exception.hpp | 7 -- include/cru/win/graphics/direct/Factory.h | 68 +++++++++++++ include/cru/win/graphics/direct/Factory.hpp | 68 ------------- include/cru/win/graphics/direct/Font.h | 34 +++++++ include/cru/win/graphics/direct/Font.hpp | 34 ------- include/cru/win/graphics/direct/Geometry.h | 59 ++++++++++++ include/cru/win/graphics/direct/Geometry.hpp | 59 ------------ include/cru/win/graphics/direct/Image.h | 31 ++++++ include/cru/win/graphics/direct/Image.hpp | 31 ------ include/cru/win/graphics/direct/ImageFactory.h | 27 ++++++ include/cru/win/graphics/direct/ImageFactory.hpp | 27 ------ include/cru/win/graphics/direct/Painter.h | 75 +++++++++++++++ include/cru/win/graphics/direct/Painter.hpp | 75 --------------- include/cru/win/graphics/direct/Resource.h | 52 ++++++++++ include/cru/win/graphics/direct/Resource.hpp | 52 ---------- include/cru/win/graphics/direct/TextLayout.h | 63 ++++++++++++ include/cru/win/graphics/direct/TextLayout.hpp | 63 ------------ include/cru/win/graphics/direct/WindowPainter.h | 22 +++++ include/cru/win/graphics/direct/WindowPainter.hpp | 22 ----- .../cru/win/graphics/direct/WindowRenderTarget.h | 43 +++++++++ .../cru/win/graphics/direct/WindowRenderTarget.hpp | 43 --------- 30 files changed, 657 insertions(+), 657 deletions(-) create mode 100644 include/cru/win/graphics/direct/Base.h delete mode 100644 include/cru/win/graphics/direct/Base.hpp create mode 100644 include/cru/win/graphics/direct/Brush.h delete mode 100644 include/cru/win/graphics/direct/Brush.hpp create mode 100644 include/cru/win/graphics/direct/ComResource.h delete mode 100644 include/cru/win/graphics/direct/ComResource.hpp create mode 100644 include/cru/win/graphics/direct/ConvertUtil.h delete mode 100644 include/cru/win/graphics/direct/ConvertUtil.hpp create mode 100644 include/cru/win/graphics/direct/Exception.h delete mode 100644 include/cru/win/graphics/direct/Exception.hpp create mode 100644 include/cru/win/graphics/direct/Factory.h delete mode 100644 include/cru/win/graphics/direct/Factory.hpp create mode 100644 include/cru/win/graphics/direct/Font.h delete mode 100644 include/cru/win/graphics/direct/Font.hpp create mode 100644 include/cru/win/graphics/direct/Geometry.h delete mode 100644 include/cru/win/graphics/direct/Geometry.hpp create mode 100644 include/cru/win/graphics/direct/Image.h delete mode 100644 include/cru/win/graphics/direct/Image.hpp create mode 100644 include/cru/win/graphics/direct/ImageFactory.h delete mode 100644 include/cru/win/graphics/direct/ImageFactory.hpp create mode 100644 include/cru/win/graphics/direct/Painter.h delete mode 100644 include/cru/win/graphics/direct/Painter.hpp create mode 100644 include/cru/win/graphics/direct/Resource.h delete mode 100644 include/cru/win/graphics/direct/Resource.hpp create mode 100644 include/cru/win/graphics/direct/TextLayout.h delete mode 100644 include/cru/win/graphics/direct/TextLayout.hpp create mode 100644 include/cru/win/graphics/direct/WindowPainter.h delete mode 100644 include/cru/win/graphics/direct/WindowPainter.hpp create mode 100644 include/cru/win/graphics/direct/WindowRenderTarget.h delete mode 100644 include/cru/win/graphics/direct/WindowRenderTarget.hpp (limited to 'include/cru/win/graphics/direct') diff --git a/include/cru/win/graphics/direct/Base.h b/include/cru/win/graphics/direct/Base.h new file mode 100644 index 00000000..5f6f8c99 --- /dev/null +++ b/include/cru/win/graphics/direct/Base.h @@ -0,0 +1,18 @@ +#pragma once +#include "../../WinPreConfig.h" + +#include +#include +#include +#include +#include + +#ifdef CRU_PLATFORM_WINDOWS +#ifdef CRU_WIN_GRAPHICS_DIRECT_EXPORT_API +#define CRU_WIN_GRAPHICS_DIRECT_API __declspec(dllexport) +#else +#define CRU_WIN_GRAPHICS_DIRECT_API __declspec(dllimport) +#endif +#else +#define CRU_WIN_GRAPHICS_DIRECT_API +#endif diff --git a/include/cru/win/graphics/direct/Base.hpp b/include/cru/win/graphics/direct/Base.hpp deleted file mode 100644 index 49fc7897..00000000 --- a/include/cru/win/graphics/direct/Base.hpp +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once -#include "../../WinPreConfig.hpp" - -#include -#include -#include -#include -#include - -#ifdef CRU_PLATFORM_WINDOWS -#ifdef CRU_WIN_GRAPHICS_DIRECT_EXPORT_API -#define CRU_WIN_GRAPHICS_DIRECT_API __declspec(dllexport) -#else -#define CRU_WIN_GRAPHICS_DIRECT_API __declspec(dllimport) -#endif -#else -#define CRU_WIN_GRAPHICS_DIRECT_API -#endif diff --git a/include/cru/win/graphics/direct/Brush.h b/include/cru/win/graphics/direct/Brush.h new file mode 100644 index 00000000..fe5321b7 --- /dev/null +++ b/include/cru/win/graphics/direct/Brush.h @@ -0,0 +1,40 @@ +#pragma once +#include "ComResource.h" +#include "Resource.h" + +#include "cru/platform/graphics/Brush.h" + +namespace cru::platform::graphics::win::direct { +struct CRU_WIN_GRAPHICS_DIRECT_API ID2DBrush : virtual IBrush { + virtual ID2D1Brush* GetD2DBrushInterface() const = 0; +}; + +class CRU_WIN_GRAPHICS_DIRECT_API D2DSolidColorBrush + : public DirectGraphicsResource, + public virtual ISolidColorBrush, + public virtual ID2DBrush, + public virtual IComResource { + public: + explicit D2DSolidColorBrush(DirectGraphicsFactory* factory); + + CRU_DELETE_COPY(D2DSolidColorBrush) + CRU_DELETE_MOVE(D2DSolidColorBrush) + + ~D2DSolidColorBrush() override = default; + + public: + Color GetColor() override { return color_; } + void SetColor(const Color& color) override; + + ID2D1Brush* GetD2DBrushInterface() const override { return brush_.Get(); } + + ID2D1SolidColorBrush* GetComInterface() const override { + return brush_.Get(); + } + + private: + Color color_ = colors::black; + + Microsoft::WRL::ComPtr brush_; +}; +} // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/Brush.hpp b/include/cru/win/graphics/direct/Brush.hpp deleted file mode 100644 index 22b0a8af..00000000 --- a/include/cru/win/graphics/direct/Brush.hpp +++ /dev/null @@ -1,40 +0,0 @@ -#pragma once -#include "ComResource.hpp" -#include "Resource.hpp" - -#include "cru/platform/graphics/Brush.hpp" - -namespace cru::platform::graphics::win::direct { -struct CRU_WIN_GRAPHICS_DIRECT_API ID2DBrush : virtual IBrush { - virtual ID2D1Brush* GetD2DBrushInterface() const = 0; -}; - -class CRU_WIN_GRAPHICS_DIRECT_API D2DSolidColorBrush - : public DirectGraphicsResource, - public virtual ISolidColorBrush, - public virtual ID2DBrush, - public virtual IComResource { - public: - explicit D2DSolidColorBrush(DirectGraphicsFactory* factory); - - CRU_DELETE_COPY(D2DSolidColorBrush) - CRU_DELETE_MOVE(D2DSolidColorBrush) - - ~D2DSolidColorBrush() override = default; - - public: - Color GetColor() override { return color_; } - void SetColor(const Color& color) override; - - ID2D1Brush* GetD2DBrushInterface() const override { return brush_.Get(); } - - ID2D1SolidColorBrush* GetComInterface() const override { - return brush_.Get(); - } - - private: - Color color_ = colors::black; - - Microsoft::WRL::ComPtr brush_; -}; -} // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/ComResource.h b/include/cru/win/graphics/direct/ComResource.h new file mode 100644 index 00000000..36023b84 --- /dev/null +++ b/include/cru/win/graphics/direct/ComResource.h @@ -0,0 +1,11 @@ +#pragma once +#include "Base.h" + +#include "cru/common/Base.h" + +namespace cru::platform::graphics::win::direct { +template +struct CRU_WIN_GRAPHICS_DIRECT_API IComResource : virtual Interface { + virtual TInterface* GetComInterface() const = 0; +}; +} // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/ComResource.hpp b/include/cru/win/graphics/direct/ComResource.hpp deleted file mode 100644 index f8738f6e..00000000 --- a/include/cru/win/graphics/direct/ComResource.hpp +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once -#include "Base.hpp" - -#include "cru/common/Base.hpp" - -namespace cru::platform::graphics::win::direct { -template -struct CRU_WIN_GRAPHICS_DIRECT_API IComResource : virtual Interface { - virtual TInterface* GetComInterface() const = 0; -}; -} // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/ConvertUtil.h b/include/cru/win/graphics/direct/ConvertUtil.h new file mode 100644 index 00000000..8066a265 --- /dev/null +++ b/include/cru/win/graphics/direct/ConvertUtil.h @@ -0,0 +1,107 @@ +#pragma once +#include "Base.h" + +#include "cru/platform/graphics/Base.h" + +namespace cru::platform::graphics::win::direct { +inline D2D1_MATRIX_3X2_F Convert(const platform::Matrix& matrix) { + D2D1_MATRIX_3X2_F m; + m._11 = matrix.m11; + m._12 = matrix.m12; + m._21 = matrix.m21; + m._22 = matrix.m22; + m._31 = matrix.m31; + m._32 = matrix.m32; + return m; +} + +inline D2D1_COLOR_F Convert(const Color& color) { + return D2D1::ColorF(color.red / 255.0f, color.green / 255.0f, + color.blue / 255.0f, color.alpha / 255.0f); +} + +inline D2D1_POINT_2F Convert(const Point& point) { + return D2D1::Point2F(point.x, point.y); +} + +inline D2D1_RECT_F Convert(const Rect& rect) { + return D2D1::RectF(rect.left, rect.top, rect.left + rect.width, + rect.top + rect.height); +} + +inline D2D1_ROUNDED_RECT Convert(const RoundedRect& rounded_rect) { + return D2D1::RoundedRect(Convert(rounded_rect.rect), rounded_rect.radius_x, + rounded_rect.radius_y); +} + +inline D2D1_ELLIPSE Convert(const Ellipse& ellipse) { + return D2D1::Ellipse(Convert(ellipse.center), ellipse.radius_x, + ellipse.radius_y); +} + +inline platform::Matrix Convert(const D2D1_MATRIX_3X2_F& matrix) { + return platform::Matrix{matrix._11, matrix._12, matrix._21, + matrix._22, matrix._31, matrix._32}; +} + +inline Color Convert(const D2D1_COLOR_F& color) { + auto floor = [](float n) { return static_cast(n + 0.5f); }; + return Color{floor(color.r * 255.0f), floor(color.g * 255.0f), + floor(color.b * 255.0f), floor(color.a * 255.0f)}; +} + +inline Point Convert(const D2D1_POINT_2F& point) { + return Point(point.x, point.y); +} + +inline Rect Convert(const D2D1_RECT_F& rect) { + return Rect(rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top); +} + +inline RoundedRect Convert(const D2D1_ROUNDED_RECT& rounded_rect) { + return RoundedRect(Convert(rounded_rect.rect), rounded_rect.radiusX, + rounded_rect.radiusY); +} + +inline Ellipse Convert(const D2D1_ELLIPSE& ellipse) { + return Ellipse(Convert(ellipse.point), ellipse.radiusX, ellipse.radiusY); +} + +inline bool operator==(const D2D1_POINT_2F& left, const D2D1_POINT_2F& right) { + return left.x == right.x && left.y == right.y; +} + +inline bool operator!=(const D2D1_POINT_2F& left, const D2D1_POINT_2F& right) { + return !(left == right); +} + +inline bool operator==(const D2D1_RECT_F& left, const D2D1_RECT_F& right) { + return left.left == right.left && left.top == right.top && + left.right == right.right && left.bottom == right.bottom; +} + +inline bool operator!=(const D2D1_RECT_F& left, const D2D1_RECT_F& right) { + return !(left == right); +} + +inline bool operator==(const D2D1_ROUNDED_RECT& left, + const D2D1_ROUNDED_RECT& right) { + return left.rect == right.rect && left.radiusX == right.radiusX && + left.radiusY == right.radiusY; +} + +inline bool operator!=(const D2D1_ROUNDED_RECT& left, + const D2D1_ROUNDED_RECT& right) { + return !(left == right); +} + +inline bool operator==(const D2D1_ELLIPSE& left, const D2D1_ELLIPSE& right) { + return left.point == right.point && left.radiusX == right.radiusX && + left.radiusY == right.radiusY; +} + +inline bool operator!=(const D2D1_ELLIPSE& left, const D2D1_ELLIPSE& right) { + return !(left == right); +} +} // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/ConvertUtil.hpp b/include/cru/win/graphics/direct/ConvertUtil.hpp deleted file mode 100644 index 963b22f3..00000000 --- a/include/cru/win/graphics/direct/ConvertUtil.hpp +++ /dev/null @@ -1,107 +0,0 @@ -#pragma once -#include "Base.hpp" - -#include "cru/platform/graphics/Base.hpp" - -namespace cru::platform::graphics::win::direct { -inline D2D1_MATRIX_3X2_F Convert(const platform::Matrix& matrix) { - D2D1_MATRIX_3X2_F m; - m._11 = matrix.m11; - m._12 = matrix.m12; - m._21 = matrix.m21; - m._22 = matrix.m22; - m._31 = matrix.m31; - m._32 = matrix.m32; - return m; -} - -inline D2D1_COLOR_F Convert(const Color& color) { - return D2D1::ColorF(color.red / 255.0f, color.green / 255.0f, - color.blue / 255.0f, color.alpha / 255.0f); -} - -inline D2D1_POINT_2F Convert(const Point& point) { - return D2D1::Point2F(point.x, point.y); -} - -inline D2D1_RECT_F Convert(const Rect& rect) { - return D2D1::RectF(rect.left, rect.top, rect.left + rect.width, - rect.top + rect.height); -} - -inline D2D1_ROUNDED_RECT Convert(const RoundedRect& rounded_rect) { - return D2D1::RoundedRect(Convert(rounded_rect.rect), rounded_rect.radius_x, - rounded_rect.radius_y); -} - -inline D2D1_ELLIPSE Convert(const Ellipse& ellipse) { - return D2D1::Ellipse(Convert(ellipse.center), ellipse.radius_x, - ellipse.radius_y); -} - -inline platform::Matrix Convert(const D2D1_MATRIX_3X2_F& matrix) { - return platform::Matrix{matrix._11, matrix._12, matrix._21, - matrix._22, matrix._31, matrix._32}; -} - -inline Color Convert(const D2D1_COLOR_F& color) { - auto floor = [](float n) { return static_cast(n + 0.5f); }; - return Color{floor(color.r * 255.0f), floor(color.g * 255.0f), - floor(color.b * 255.0f), floor(color.a * 255.0f)}; -} - -inline Point Convert(const D2D1_POINT_2F& point) { - return Point(point.x, point.y); -} - -inline Rect Convert(const D2D1_RECT_F& rect) { - return Rect(rect.left, rect.top, rect.right - rect.left, - rect.bottom - rect.top); -} - -inline RoundedRect Convert(const D2D1_ROUNDED_RECT& rounded_rect) { - return RoundedRect(Convert(rounded_rect.rect), rounded_rect.radiusX, - rounded_rect.radiusY); -} - -inline Ellipse Convert(const D2D1_ELLIPSE& ellipse) { - return Ellipse(Convert(ellipse.point), ellipse.radiusX, ellipse.radiusY); -} - -inline bool operator==(const D2D1_POINT_2F& left, const D2D1_POINT_2F& right) { - return left.x == right.x && left.y == right.y; -} - -inline bool operator!=(const D2D1_POINT_2F& left, const D2D1_POINT_2F& right) { - return !(left == right); -} - -inline bool operator==(const D2D1_RECT_F& left, const D2D1_RECT_F& right) { - return left.left == right.left && left.top == right.top && - left.right == right.right && left.bottom == right.bottom; -} - -inline bool operator!=(const D2D1_RECT_F& left, const D2D1_RECT_F& right) { - return !(left == right); -} - -inline bool operator==(const D2D1_ROUNDED_RECT& left, - const D2D1_ROUNDED_RECT& right) { - return left.rect == right.rect && left.radiusX == right.radiusX && - left.radiusY == right.radiusY; -} - -inline bool operator!=(const D2D1_ROUNDED_RECT& left, - const D2D1_ROUNDED_RECT& right) { - return !(left == right); -} - -inline bool operator==(const D2D1_ELLIPSE& left, const D2D1_ELLIPSE& right) { - return left.point == right.point && left.radiusX == right.radiusX && - left.radiusY == right.radiusY; -} - -inline bool operator!=(const D2D1_ELLIPSE& left, const D2D1_ELLIPSE& right) { - return !(left == right); -} -} // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/Exception.h b/include/cru/win/graphics/direct/Exception.h new file mode 100644 index 00000000..21dde875 --- /dev/null +++ b/include/cru/win/graphics/direct/Exception.h @@ -0,0 +1,7 @@ +#pragma once +#include "../../Exception.h" + +namespace cru::platform::graphics::win::direct { +using platform::win::HResultError; +using platform::win::ThrowIfFailed; +} // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/Exception.hpp b/include/cru/win/graphics/direct/Exception.hpp deleted file mode 100644 index 72493f2f..00000000 --- a/include/cru/win/graphics/direct/Exception.hpp +++ /dev/null @@ -1,7 +0,0 @@ -#pragma once -#include "../../Exception.hpp" - -namespace cru::platform::graphics::win::direct { -using platform::win::HResultError; -using platform::win::ThrowIfFailed; -} // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/Factory.h b/include/cru/win/graphics/direct/Factory.h new file mode 100644 index 00000000..368c68f0 --- /dev/null +++ b/include/cru/win/graphics/direct/Factory.h @@ -0,0 +1,68 @@ +#pragma once +#include "Resource.h" + +#include "ImageFactory.h" + +#include "cru/common/platform/win/ComAutoInit.h" +#include "cru/platform/graphics/Base.h" +#include "cru/platform/graphics/Factory.h" + +namespace cru::platform::graphics::win::direct { +class CRU_WIN_GRAPHICS_DIRECT_API DirectGraphicsFactory + : public DirectResource, + public virtual IGraphicsFactory { + public: + DirectGraphicsFactory(); + + CRU_DELETE_COPY(DirectGraphicsFactory) + CRU_DELETE_MOVE(DirectGraphicsFactory) + + ~DirectGraphicsFactory() override; + + public: + ID3D11Device* GetD3D11Device() const { return d3d11_device_.Get(); } + ID2D1Factory2* GetD2D1Factory() const { return d2d1_factory_.Get(); } + ID2D1Device1* GetD2D1Device() const { return d2d1_device_.Get(); } + IDXGIFactory2* GetDxgiFactory() const { return dxgi_factory_.Get(); } + IDWriteFactory* GetDWriteFactory() const { return dwrite_factory_.Get(); } + IDWriteFontCollection* GetSystemFontCollection() const { + return dwrite_system_font_collection_.Get(); + } + + public: + Microsoft::WRL::ComPtr CreateD2D1DeviceContext(); + + // This context should only be used to create graphic resources like brush. + // Because graphic resources can be shared if they are created in the same + // device. + ID2D1DeviceContext* GetDefaultD2D1DeviceContext() { + return d2d1_device_context_.Get(); + } + + public: + std::unique_ptr CreateSolidColorBrush() override; + + std::unique_ptr CreateGeometryBuilder() override; + + std::unique_ptr CreateFont(String font_family, + float font_size) override; + + std::unique_ptr CreateTextLayout(std::shared_ptr font, + String text) override; + + IImageFactory* GetImageFactory() override; + + private: + platform::win::ComAutoInit com_auto_init_; + + Microsoft::WRL::ComPtr d3d11_device_; + Microsoft::WRL::ComPtr d2d1_factory_; + Microsoft::WRL::ComPtr d2d1_device_; + Microsoft::WRL::ComPtr d2d1_device_context_; + Microsoft::WRL::ComPtr dxgi_factory_; + Microsoft::WRL::ComPtr dwrite_factory_; + Microsoft::WRL::ComPtr dwrite_system_font_collection_; + + std::unique_ptr image_factory_; +}; +} // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/Factory.hpp b/include/cru/win/graphics/direct/Factory.hpp deleted file mode 100644 index 4ceed7c5..00000000 --- a/include/cru/win/graphics/direct/Factory.hpp +++ /dev/null @@ -1,68 +0,0 @@ -#pragma once -#include "Resource.hpp" - -#include "ImageFactory.hpp" - -#include "cru/common/platform/win/ComAutoInit.hpp" -#include "cru/platform/graphics/Base.hpp" -#include "cru/platform/graphics/Factory.hpp" - -namespace cru::platform::graphics::win::direct { -class CRU_WIN_GRAPHICS_DIRECT_API DirectGraphicsFactory - : public DirectResource, - public virtual IGraphicsFactory { - public: - DirectGraphicsFactory(); - - CRU_DELETE_COPY(DirectGraphicsFactory) - CRU_DELETE_MOVE(DirectGraphicsFactory) - - ~DirectGraphicsFactory() override; - - public: - ID3D11Device* GetD3D11Device() const { return d3d11_device_.Get(); } - ID2D1Factory2* GetD2D1Factory() const { return d2d1_factory_.Get(); } - ID2D1Device1* GetD2D1Device() const { return d2d1_device_.Get(); } - IDXGIFactory2* GetDxgiFactory() const { return dxgi_factory_.Get(); } - IDWriteFactory* GetDWriteFactory() const { return dwrite_factory_.Get(); } - IDWriteFontCollection* GetSystemFontCollection() const { - return dwrite_system_font_collection_.Get(); - } - - public: - Microsoft::WRL::ComPtr CreateD2D1DeviceContext(); - - // This context should only be used to create graphic resources like brush. - // Because graphic resources can be shared if they are created in the same - // device. - ID2D1DeviceContext* GetDefaultD2D1DeviceContext() { - return d2d1_device_context_.Get(); - } - - public: - std::unique_ptr CreateSolidColorBrush() override; - - std::unique_ptr CreateGeometryBuilder() override; - - std::unique_ptr CreateFont(String font_family, - float font_size) override; - - std::unique_ptr CreateTextLayout(std::shared_ptr font, - String text) override; - - IImageFactory* GetImageFactory() override; - - private: - platform::win::ComAutoInit com_auto_init_; - - Microsoft::WRL::ComPtr d3d11_device_; - Microsoft::WRL::ComPtr d2d1_factory_; - Microsoft::WRL::ComPtr d2d1_device_; - Microsoft::WRL::ComPtr d2d1_device_context_; - Microsoft::WRL::ComPtr dxgi_factory_; - Microsoft::WRL::ComPtr dwrite_factory_; - Microsoft::WRL::ComPtr dwrite_system_font_collection_; - - std::unique_ptr image_factory_; -}; -} // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/Font.h b/include/cru/win/graphics/direct/Font.h new file mode 100644 index 00000000..e08ec5a3 --- /dev/null +++ b/include/cru/win/graphics/direct/Font.h @@ -0,0 +1,34 @@ +#pragma once +#include "ComResource.h" +#include "Resource.h" + +#include "cru/platform/graphics/Font.h" + +#include + +namespace cru::platform::graphics::win::direct { +class CRU_WIN_GRAPHICS_DIRECT_API DWriteFont + : public DirectGraphicsResource, + public virtual IFont, + public virtual IComResource { + public: + DWriteFont(DirectGraphicsFactory* factory, String font_family, + float font_size); + + CRU_DELETE_COPY(DWriteFont) + CRU_DELETE_MOVE(DWriteFont) + + ~DWriteFont() override = default; + + public: + IDWriteTextFormat* GetComInterface() const override { + return text_format_.Get(); + } + + float GetFontSize() override; + + private: + String font_family_; + Microsoft::WRL::ComPtr text_format_; +}; +} // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/Font.hpp b/include/cru/win/graphics/direct/Font.hpp deleted file mode 100644 index 3bf423a0..00000000 --- a/include/cru/win/graphics/direct/Font.hpp +++ /dev/null @@ -1,34 +0,0 @@ -#pragma once -#include "ComResource.hpp" -#include "Resource.hpp" - -#include "cru/platform/graphics/Font.hpp" - -#include - -namespace cru::platform::graphics::win::direct { -class CRU_WIN_GRAPHICS_DIRECT_API DWriteFont - : public DirectGraphicsResource, - public virtual IFont, - public virtual IComResource { - public: - DWriteFont(DirectGraphicsFactory* factory, String font_family, - float font_size); - - CRU_DELETE_COPY(DWriteFont) - CRU_DELETE_MOVE(DWriteFont) - - ~DWriteFont() override = default; - - public: - IDWriteTextFormat* GetComInterface() const override { - return text_format_.Get(); - } - - float GetFontSize() override; - - private: - String font_family_; - Microsoft::WRL::ComPtr text_format_; -}; -} // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/Geometry.h b/include/cru/win/graphics/direct/Geometry.h new file mode 100644 index 00000000..8e40c383 --- /dev/null +++ b/include/cru/win/graphics/direct/Geometry.h @@ -0,0 +1,59 @@ +#pragma once +#include "ComResource.h" +#include "Resource.h" + +#include "cru/platform/graphics/Geometry.h" + +namespace cru::platform::graphics::win::direct { +class CRU_WIN_GRAPHICS_DIRECT_API D2DGeometryBuilder + : public DirectGraphicsResource, + public virtual IGeometryBuilder { + public: + explicit D2DGeometryBuilder(DirectGraphicsFactory* factory); + + CRU_DELETE_COPY(D2DGeometryBuilder) + CRU_DELETE_MOVE(D2DGeometryBuilder) + + ~D2DGeometryBuilder() override = default; + + public: + void BeginFigure(const Point& point) override; + void LineTo(const Point& point) override; + void QuadraticBezierTo(const Point& control_point, + const Point& end_point) override; + void CloseFigure(bool close) override; + + std::unique_ptr Build() override; + + private: + bool IsValid() { return geometry_ != nullptr; } + void CheckValidation(); + + private: + Microsoft::WRL::ComPtr geometry_; + Microsoft::WRL::ComPtr geometry_sink_; +}; + +class CRU_WIN_GRAPHICS_DIRECT_API D2DGeometry + : public DirectGraphicsResource, + public virtual IGeometry, + public IComResource { + public: + D2DGeometry(DirectGraphicsFactory* factory, + Microsoft::WRL::ComPtr geometry); + + CRU_DELETE_COPY(D2DGeometry) + CRU_DELETE_MOVE(D2DGeometry) + + ~D2DGeometry() override = default; + + public: + ID2D1Geometry* GetComInterface() const override { return geometry_.Get(); } + + public: + bool FillContains(const Point& point) override; + + private: + Microsoft::WRL::ComPtr geometry_; +}; +} // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/Geometry.hpp b/include/cru/win/graphics/direct/Geometry.hpp deleted file mode 100644 index 3849045e..00000000 --- a/include/cru/win/graphics/direct/Geometry.hpp +++ /dev/null @@ -1,59 +0,0 @@ -#pragma once -#include "ComResource.hpp" -#include "Resource.hpp" - -#include "cru/platform/graphics/Geometry.hpp" - -namespace cru::platform::graphics::win::direct { -class CRU_WIN_GRAPHICS_DIRECT_API D2DGeometryBuilder - : public DirectGraphicsResource, - public virtual IGeometryBuilder { - public: - explicit D2DGeometryBuilder(DirectGraphicsFactory* factory); - - CRU_DELETE_COPY(D2DGeometryBuilder) - CRU_DELETE_MOVE(D2DGeometryBuilder) - - ~D2DGeometryBuilder() override = default; - - public: - void BeginFigure(const Point& point) override; - void LineTo(const Point& point) override; - void QuadraticBezierTo(const Point& control_point, - const Point& end_point) override; - void CloseFigure(bool close) override; - - std::unique_ptr Build() override; - - private: - bool IsValid() { return geometry_ != nullptr; } - void CheckValidation(); - - private: - Microsoft::WRL::ComPtr geometry_; - Microsoft::WRL::ComPtr geometry_sink_; -}; - -class CRU_WIN_GRAPHICS_DIRECT_API D2DGeometry - : public DirectGraphicsResource, - public virtual IGeometry, - public IComResource { - public: - D2DGeometry(DirectGraphicsFactory* factory, - Microsoft::WRL::ComPtr geometry); - - CRU_DELETE_COPY(D2DGeometry) - CRU_DELETE_MOVE(D2DGeometry) - - ~D2DGeometry() override = default; - - public: - ID2D1Geometry* GetComInterface() const override { return geometry_.Get(); } - - public: - bool FillContains(const Point& point) override; - - private: - Microsoft::WRL::ComPtr geometry_; -}; -} // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/Image.h b/include/cru/win/graphics/direct/Image.h new file mode 100644 index 00000000..0b51f350 --- /dev/null +++ b/include/cru/win/graphics/direct/Image.h @@ -0,0 +1,31 @@ +#pragma once +#include "Resource.h" +#include "cru/platform/graphics/Image.h" + +namespace cru::platform::graphics::win::direct { +class CRU_WIN_GRAPHICS_DIRECT_API Direct2DImage : public DirectGraphicsResource, + public virtual IImage { + public: + Direct2DImage(DirectGraphicsFactory* graphics_factory, + Microsoft::WRL::ComPtr d2d_bitmap); + + CRU_DELETE_COPY(Direct2DImage) + CRU_DELETE_MOVE(Direct2DImage) + + ~Direct2DImage() override; + + public: + float GetWidth() override; + float GetHeight() override; + + std::unique_ptr CreateWithRect(const Rect& rect) override; + + const Microsoft::WRL::ComPtr& GetD2DBitmap() const { + return d2d_bitmap_; + } + + private: + Microsoft::WRL::ComPtr d2d_bitmap_; +}; + +} // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/Image.hpp b/include/cru/win/graphics/direct/Image.hpp deleted file mode 100644 index 06448621..00000000 --- a/include/cru/win/graphics/direct/Image.hpp +++ /dev/null @@ -1,31 +0,0 @@ -#pragma once -#include "Resource.hpp" -#include "cru/platform/graphics/Image.hpp" - -namespace cru::platform::graphics::win::direct { -class CRU_WIN_GRAPHICS_DIRECT_API Direct2DImage : public DirectGraphicsResource, - public virtual IImage { - public: - Direct2DImage(DirectGraphicsFactory* graphics_factory, - Microsoft::WRL::ComPtr d2d_bitmap); - - CRU_DELETE_COPY(Direct2DImage) - CRU_DELETE_MOVE(Direct2DImage) - - ~Direct2DImage() override; - - public: - float GetWidth() override; - float GetHeight() override; - - std::unique_ptr CreateWithRect(const Rect& rect) override; - - const Microsoft::WRL::ComPtr& GetD2DBitmap() const { - return d2d_bitmap_; - } - - private: - Microsoft::WRL::ComPtr d2d_bitmap_; -}; - -} // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/ImageFactory.h b/include/cru/win/graphics/direct/ImageFactory.h new file mode 100644 index 00000000..34d363b0 --- /dev/null +++ b/include/cru/win/graphics/direct/ImageFactory.h @@ -0,0 +1,27 @@ +#pragma once + +#include "Resource.h" +#include "cru/platform/graphics/Image.h" +#include "cru/platform/graphics/ImageFactory.h" + +namespace cru::platform::graphics::win::direct { +class CRU_WIN_GRAPHICS_DIRECT_API WinImageFactory + : public DirectGraphicsResource, + public virtual IImageFactory { + public: + explicit WinImageFactory(DirectGraphicsFactory* graphics_factory); + + CRU_DELETE_COPY(WinImageFactory) + CRU_DELETE_MOVE(WinImageFactory) + + ~WinImageFactory() override; + + public: + std::unique_ptr DecodeFromStream(io::Stream* stream) override; + + private: + DirectGraphicsFactory* graphics_factory_; + + Microsoft::WRL::ComPtr wic_imaging_factory_; +}; +} // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/ImageFactory.hpp b/include/cru/win/graphics/direct/ImageFactory.hpp deleted file mode 100644 index fa450039..00000000 --- a/include/cru/win/graphics/direct/ImageFactory.hpp +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once - -#include "Resource.hpp" -#include "cru/platform/graphics/Image.hpp" -#include "cru/platform/graphics/ImageFactory.hpp" - -namespace cru::platform::graphics::win::direct { -class CRU_WIN_GRAPHICS_DIRECT_API WinImageFactory - : public DirectGraphicsResource, - public virtual IImageFactory { - public: - explicit WinImageFactory(DirectGraphicsFactory* graphics_factory); - - CRU_DELETE_COPY(WinImageFactory) - CRU_DELETE_MOVE(WinImageFactory) - - ~WinImageFactory() override; - - public: - std::unique_ptr DecodeFromStream(io::Stream* stream) override; - - private: - DirectGraphicsFactory* graphics_factory_; - - Microsoft::WRL::ComPtr wic_imaging_factory_; -}; -} // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/Painter.h b/include/cru/win/graphics/direct/Painter.h new file mode 100644 index 00000000..b1795395 --- /dev/null +++ b/include/cru/win/graphics/direct/Painter.h @@ -0,0 +1,75 @@ +#pragma once +#include "ComResource.h" +#include "Resource.h" + +#include "cru/platform/graphics/Painter.h" + +#include + +namespace cru::platform::graphics::win::direct { +class CRU_WIN_GRAPHICS_DIRECT_API D2DDeviceContextPainter + : public DirectResource, + public virtual IPainter, + public virtual IComResource { + public: + explicit D2DDeviceContextPainter(ID2D1DeviceContext1* device_context); + + CRU_DELETE_COPY(D2DDeviceContextPainter) + CRU_DELETE_MOVE(D2DDeviceContextPainter) + + ~D2DDeviceContextPainter() override = default; + + public: + ID2D1DeviceContext1* GetComInterface() const override { + return device_context_; + } + + public: + Matrix GetTransform() override; + void SetTransform(const platform::Matrix& matrix) override; + void ConcatTransform(const Matrix& matrix) override; + + void Clear(const Color& color) override; + + void DrawLine(const Point& start, const Point& end, IBrush* brush, + float width) override; + 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; + + void DrawText(const Point& offset, ITextLayout* text_layout, + IBrush* brush) override; + + void DrawImage(const Point& offset, IImage* image) override; + + void PushLayer(const Rect& bounds) override; + void PopLayer() override; + + void PushState() override; + void PopState() override; + + void EndDraw() override final; + + protected: + virtual void DoEndDraw() = 0; + + private: + bool IsValid() { return is_drawing_; } + void CheckValidation(); + + private: + ID2D1DeviceContext1* device_context_; + + std::vector> layers_; + std::vector> + drawing_state_stack_; + + bool is_drawing_ = true; +}; +} // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/Painter.hpp b/include/cru/win/graphics/direct/Painter.hpp deleted file mode 100644 index 57a59357..00000000 --- a/include/cru/win/graphics/direct/Painter.hpp +++ /dev/null @@ -1,75 +0,0 @@ -#pragma once -#include "ComResource.hpp" -#include "Resource.hpp" - -#include "cru/platform/graphics/Painter.hpp" - -#include - -namespace cru::platform::graphics::win::direct { -class CRU_WIN_GRAPHICS_DIRECT_API D2DDeviceContextPainter - : public DirectResource, - public virtual IPainter, - public virtual IComResource { - public: - explicit D2DDeviceContextPainter(ID2D1DeviceContext1* device_context); - - CRU_DELETE_COPY(D2DDeviceContextPainter) - CRU_DELETE_MOVE(D2DDeviceContextPainter) - - ~D2DDeviceContextPainter() override = default; - - public: - ID2D1DeviceContext1* GetComInterface() const override { - return device_context_; - } - - public: - Matrix GetTransform() override; - void SetTransform(const platform::Matrix& matrix) override; - void ConcatTransform(const Matrix& matrix) override; - - void Clear(const Color& color) override; - - void DrawLine(const Point& start, const Point& end, IBrush* brush, - float width) override; - 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; - - void DrawText(const Point& offset, ITextLayout* text_layout, - IBrush* brush) override; - - void DrawImage(const Point& offset, IImage* image) override; - - void PushLayer(const Rect& bounds) override; - void PopLayer() override; - - void PushState() override; - void PopState() override; - - void EndDraw() override final; - - protected: - virtual void DoEndDraw() = 0; - - private: - bool IsValid() { return is_drawing_; } - void CheckValidation(); - - private: - ID2D1DeviceContext1* device_context_; - - std::vector> layers_; - std::vector> - drawing_state_stack_; - - bool is_drawing_ = true; -}; -} // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/Resource.h b/include/cru/win/graphics/direct/Resource.h new file mode 100644 index 00000000..df558686 --- /dev/null +++ b/include/cru/win/graphics/direct/Resource.h @@ -0,0 +1,52 @@ +#pragma once +#include "Base.h" + +#include "cru/platform/graphics/Resource.h" + +#include + +namespace cru::platform::graphics::win::direct { +class DirectGraphicsFactory; + +class CRU_WIN_GRAPHICS_DIRECT_API DirectResource + : public Object, + public virtual IPlatformResource { + public: + static String kPlatformId; + + protected: + DirectResource() = default; + + public: + CRU_DELETE_COPY(DirectResource) + CRU_DELETE_MOVE(DirectResource) + + ~DirectResource() override = default; + + public: + String GetPlatformId() const final { return kPlatformId; } +}; + +class CRU_WIN_GRAPHICS_DIRECT_API DirectGraphicsResource + : public DirectResource, + public virtual IGraphicsResource { + protected: + // Param factory can't be null. + explicit DirectGraphicsResource(DirectGraphicsFactory* factory); + + public: + CRU_DELETE_COPY(DirectGraphicsResource) + CRU_DELETE_MOVE(DirectGraphicsResource) + + ~DirectGraphicsResource() override = default; + + public: + IGraphicsFactory* GetGraphicsFactory() final; + + public: + DirectGraphicsFactory* GetDirectFactory() const { return factory_; } + + private: + DirectGraphicsFactory* factory_; +}; +} // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/Resource.hpp b/include/cru/win/graphics/direct/Resource.hpp deleted file mode 100644 index 112af26f..00000000 --- a/include/cru/win/graphics/direct/Resource.hpp +++ /dev/null @@ -1,52 +0,0 @@ -#pragma once -#include "Base.hpp" - -#include "cru/platform/graphics/Resource.hpp" - -#include - -namespace cru::platform::graphics::win::direct { -class DirectGraphicsFactory; - -class CRU_WIN_GRAPHICS_DIRECT_API DirectResource - : public Object, - public virtual IPlatformResource { - public: - static String kPlatformId; - - protected: - DirectResource() = default; - - public: - CRU_DELETE_COPY(DirectResource) - CRU_DELETE_MOVE(DirectResource) - - ~DirectResource() override = default; - - public: - String GetPlatformId() const final { return kPlatformId; } -}; - -class CRU_WIN_GRAPHICS_DIRECT_API DirectGraphicsResource - : public DirectResource, - public virtual IGraphicsResource { - protected: - // Param factory can't be null. - explicit DirectGraphicsResource(DirectGraphicsFactory* factory); - - public: - CRU_DELETE_COPY(DirectGraphicsResource) - CRU_DELETE_MOVE(DirectGraphicsResource) - - ~DirectGraphicsResource() override = default; - - public: - IGraphicsFactory* GetGraphicsFactory() final; - - public: - DirectGraphicsFactory* GetDirectFactory() const { return factory_; } - - private: - DirectGraphicsFactory* factory_; -}; -} // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/TextLayout.h b/include/cru/win/graphics/direct/TextLayout.h new file mode 100644 index 00000000..fca5d68f --- /dev/null +++ b/include/cru/win/graphics/direct/TextLayout.h @@ -0,0 +1,63 @@ +#pragma once +#include "ComResource.h" +#include "Resource.h" + +#include "cru/platform/graphics/TextLayout.h" + +#include +#include + +namespace cru::platform::graphics::win::direct { +class DWriteFont; + +class CRU_WIN_GRAPHICS_DIRECT_API DWriteTextLayout + : public DirectGraphicsResource, + public virtual ITextLayout, + public virtual IComResource { + public: + DWriteTextLayout(DirectGraphicsFactory* factory, std::shared_ptr font, + String text); + + CRU_DELETE_COPY(DWriteTextLayout) + CRU_DELETE_MOVE(DWriteTextLayout) + + ~DWriteTextLayout() override; + + public: + IDWriteTextLayout* GetComInterface() const override { + return text_layout_.Get(); + } + + public: + String GetText() override; + void SetText(String new_text) override; + + std::shared_ptr GetFont() override; + void SetFont(std::shared_ptr font) override; + + 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 TextRangeRect(const TextRange& text_range) override; + Rect TextSinglePoint(Index position, bool trailing) override; + TextHitTestResult HitTest(const Point& point) override; + + private: + bool edit_mode_ = false; + String text_; + std::shared_ptr font_; + float max_width_ = std::numeric_limits::max(); + float max_height_ = std::numeric_limits::max(); + Microsoft::WRL::ComPtr text_layout_; +}; +} // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/TextLayout.hpp b/include/cru/win/graphics/direct/TextLayout.hpp deleted file mode 100644 index 41698862..00000000 --- a/include/cru/win/graphics/direct/TextLayout.hpp +++ /dev/null @@ -1,63 +0,0 @@ -#pragma once -#include "ComResource.hpp" -#include "Resource.hpp" - -#include "cru/platform/graphics/TextLayout.hpp" - -#include -#include - -namespace cru::platform::graphics::win::direct { -class DWriteFont; - -class CRU_WIN_GRAPHICS_DIRECT_API DWriteTextLayout - : public DirectGraphicsResource, - public virtual ITextLayout, - public virtual IComResource { - public: - DWriteTextLayout(DirectGraphicsFactory* factory, std::shared_ptr font, - String text); - - CRU_DELETE_COPY(DWriteTextLayout) - CRU_DELETE_MOVE(DWriteTextLayout) - - ~DWriteTextLayout() override; - - public: - IDWriteTextLayout* GetComInterface() const override { - return text_layout_.Get(); - } - - public: - String GetText() override; - void SetText(String new_text) override; - - std::shared_ptr GetFont() override; - void SetFont(std::shared_ptr font) override; - - 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 TextRangeRect(const TextRange& text_range) override; - Rect TextSinglePoint(Index position, bool trailing) override; - TextHitTestResult HitTest(const Point& point) override; - - private: - bool edit_mode_ = false; - String text_; - std::shared_ptr font_; - float max_width_ = std::numeric_limits::max(); - float max_height_ = std::numeric_limits::max(); - Microsoft::WRL::ComPtr text_layout_; -}; -} // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/WindowPainter.h b/include/cru/win/graphics/direct/WindowPainter.h new file mode 100644 index 00000000..67ff91e1 --- /dev/null +++ b/include/cru/win/graphics/direct/WindowPainter.h @@ -0,0 +1,22 @@ +#pragma once +#include "Painter.h" +#include "WindowRenderTarget.h" + +namespace cru::platform::graphics::win::direct { +class CRU_WIN_GRAPHICS_DIRECT_API D2DWindowPainter + : public graphics::win::direct::D2DDeviceContextPainter { + public: + explicit D2DWindowPainter(D2DWindowRenderTarget* window); + + CRU_DELETE_COPY(D2DWindowPainter) + CRU_DELETE_MOVE(D2DWindowPainter) + + ~D2DWindowPainter() override; + + protected: + void DoEndDraw() override; + + private: + D2DWindowRenderTarget* render_target_; +}; +} // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/WindowPainter.hpp b/include/cru/win/graphics/direct/WindowPainter.hpp deleted file mode 100644 index 3d66bc2e..00000000 --- a/include/cru/win/graphics/direct/WindowPainter.hpp +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once -#include "Painter.hpp" -#include "WindowRenderTarget.hpp" - -namespace cru::platform::graphics::win::direct { -class CRU_WIN_GRAPHICS_DIRECT_API D2DWindowPainter - : public graphics::win::direct::D2DDeviceContextPainter { - public: - explicit D2DWindowPainter(D2DWindowRenderTarget* window); - - CRU_DELETE_COPY(D2DWindowPainter) - CRU_DELETE_MOVE(D2DWindowPainter) - - ~D2DWindowPainter() override; - - protected: - void DoEndDraw() override; - - private: - D2DWindowRenderTarget* render_target_; -}; -} // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/WindowRenderTarget.h b/include/cru/win/graphics/direct/WindowRenderTarget.h new file mode 100644 index 00000000..c588f261 --- /dev/null +++ b/include/cru/win/graphics/direct/WindowRenderTarget.h @@ -0,0 +1,43 @@ +#pragma once +#include "Factory.h" + +namespace cru::platform::graphics::win::direct { +// Represents a window render target. +class CRU_WIN_GRAPHICS_DIRECT_API D2DWindowRenderTarget : public Object { + public: + D2DWindowRenderTarget(gsl::not_null factory, + HWND hwnd); + + CRU_DELETE_COPY(D2DWindowRenderTarget) + CRU_DELETE_MOVE(D2DWindowRenderTarget) + + ~D2DWindowRenderTarget() override = default; + + public: + graphics::win::direct::DirectGraphicsFactory* GetDirectFactory() const { + return factory_; + } + + ID2D1DeviceContext1* GetD2D1DeviceContext() { + return d2d1_device_context_.Get(); + } + + void SetDpi(float x, float y); + + // Resize the underlying buffer. + void ResizeBuffer(int width, int height); + + // Present the data of the underlying buffer to the window. + void Present(); + + private: + void CreateTargetBitmap(); + + private: + DirectGraphicsFactory* factory_; + HWND hwnd_; + Microsoft::WRL::ComPtr d2d1_device_context_; + Microsoft::WRL::ComPtr dxgi_swap_chain_; + Microsoft::WRL::ComPtr target_bitmap_; +}; +} // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/WindowRenderTarget.hpp b/include/cru/win/graphics/direct/WindowRenderTarget.hpp deleted file mode 100644 index 6b775241..00000000 --- a/include/cru/win/graphics/direct/WindowRenderTarget.hpp +++ /dev/null @@ -1,43 +0,0 @@ -#pragma once -#include "Factory.hpp" - -namespace cru::platform::graphics::win::direct { -// Represents a window render target. -class CRU_WIN_GRAPHICS_DIRECT_API D2DWindowRenderTarget : public Object { - public: - D2DWindowRenderTarget(gsl::not_null factory, - HWND hwnd); - - CRU_DELETE_COPY(D2DWindowRenderTarget) - CRU_DELETE_MOVE(D2DWindowRenderTarget) - - ~D2DWindowRenderTarget() override = default; - - public: - graphics::win::direct::DirectGraphicsFactory* GetDirectFactory() const { - return factory_; - } - - ID2D1DeviceContext1* GetD2D1DeviceContext() { - return d2d1_device_context_.Get(); - } - - void SetDpi(float x, float y); - - // Resize the underlying buffer. - void ResizeBuffer(int width, int height); - - // Present the data of the underlying buffer to the window. - void Present(); - - private: - void CreateTargetBitmap(); - - private: - DirectGraphicsFactory* factory_; - HWND hwnd_; - Microsoft::WRL::ComPtr d2d1_device_context_; - Microsoft::WRL::ComPtr dxgi_swap_chain_; - Microsoft::WRL::ComPtr target_bitmap_; -}; -} // namespace cru::platform::graphics::win::direct -- cgit v1.2.3