aboutsummaryrefslogtreecommitdiff
path: root/include/cru
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-02-01 18:49:55 +0800
committercrupest <crupest@outlook.com>2022-02-01 18:49:55 +0800
commitd1c14725443399f7145e314d79597ec35b639eeb (patch)
tree50c6743d6766cdc6fd04921d305380143b42d3dc /include/cru
parentb9a553d4acc15ec981636b30db537be280d593e5 (diff)
downloadcru-d1c14725443399f7145e314d79597ec35b639eeb.tar.gz
cru-d1c14725443399f7145e314d79597ec35b639eeb.tar.bz2
cru-d1c14725443399f7145e314d79597ec35b639eeb.zip
...
Diffstat (limited to 'include/cru')
-rw-r--r--include/cru/platform/graphics/NullPainter.hpp4
-rw-r--r--include/cru/platform/graphics/Painter.hpp2
-rw-r--r--include/cru/win/graphics/direct/Factory.hpp7
-rw-r--r--include/cru/win/graphics/direct/Image.hpp25
-rw-r--r--include/cru/win/graphics/direct/ImageFactory.hpp27
-rw-r--r--include/cru/win/graphics/direct/Painter.hpp2
6 files changed, 64 insertions, 3 deletions
diff --git a/include/cru/platform/graphics/NullPainter.hpp b/include/cru/platform/graphics/NullPainter.hpp
index a47546b6..54c610c1 100644
--- a/include/cru/platform/graphics/NullPainter.hpp
+++ b/include/cru/platform/graphics/NullPainter.hpp
@@ -66,8 +66,8 @@ class CRU_PLATFORM_GRAPHICS_API NullPainter : public Object,
CRU_UNUSED(brush)
}
- void DrawImage(const Rect& rect, IImage* image) override {
- CRU_UNUSED(rect)
+ void DrawImage(const Point& offset, IImage* image) override {
+ CRU_UNUSED(offset)
CRU_UNUSED(image)
}
diff --git a/include/cru/platform/graphics/Painter.hpp b/include/cru/platform/graphics/Painter.hpp
index eb5bf8e1..171e6260 100644
--- a/include/cru/platform/graphics/Painter.hpp
+++ b/include/cru/platform/graphics/Painter.hpp
@@ -27,7 +27,7 @@ struct CRU_PLATFORM_GRAPHICS_API IPainter : virtual IPlatformResource {
virtual void DrawText(const Point& offset, ITextLayout* text_layout,
IBrush* brush) = 0;
- virtual void DrawImage(const Rect& rect, IImage* image) = 0;
+ virtual void DrawImage(const Point& offset, IImage* image) = 0;
virtual void PushLayer(const Rect& bounds) = 0;
diff --git a/include/cru/win/graphics/direct/Factory.hpp b/include/cru/win/graphics/direct/Factory.hpp
index 932d302b..ffa8c764 100644
--- a/include/cru/win/graphics/direct/Factory.hpp
+++ b/include/cru/win/graphics/direct/Factory.hpp
@@ -1,6 +1,9 @@
#pragma once
#include "Resource.hpp"
+#include "ImageFactory.hpp"
+
+#include "cru/platform/graphics/Base.hpp"
#include "cru/platform/graphics/Factory.hpp"
namespace cru::platform::graphics::win::direct {
@@ -46,6 +49,8 @@ class CRU_WIN_GRAPHICS_DIRECT_API DirectGraphicsFactory
std::unique_ptr<ITextLayout> CreateTextLayout(std::shared_ptr<IFont> font,
String text) override;
+ IImageFactory* GetImageFactory() override;
+
private:
Microsoft::WRL::ComPtr<ID3D11Device> d3d11_device_;
// ID2D1Factory1 is a interface only available in Windows 8 and Windows 7 with
@@ -56,5 +61,7 @@ class CRU_WIN_GRAPHICS_DIRECT_API DirectGraphicsFactory
Microsoft::WRL::ComPtr<IDXGIFactory2> dxgi_factory_;
Microsoft::WRL::ComPtr<IDWriteFactory> dwrite_factory_;
Microsoft::WRL::ComPtr<IDWriteFontCollection> dwrite_system_font_collection_;
+
+ std::unique_ptr<WinImageFactory> image_factory_;
};
} // namespace cru::platform::graphics::win::direct
diff --git a/include/cru/win/graphics/direct/Image.hpp b/include/cru/win/graphics/direct/Image.hpp
new file mode 100644
index 00000000..33d848bd
--- /dev/null
+++ b/include/cru/win/graphics/direct/Image.hpp
@@ -0,0 +1,25 @@
+#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:
+ explicit Direct2DImage(DirectGraphicsFactory* graphics_factory,
+ ID2D1Image* d2d_image, bool auto_release);
+
+ CRU_DELETE_COPY(Direct2DImage)
+ CRU_DELETE_MOVE(Direct2DImage)
+
+ ~Direct2DImage() override;
+
+ public:
+ ID2D1Image* GetD2DImage() const { return d2d_image_; }
+
+ private:
+ ID2D1Image* d2d_image_;
+ bool auto_release_;
+};
+
+} // namespace cru::platform::graphics::win::direct
diff --git a/include/cru/win/graphics/direct/ImageFactory.hpp b/include/cru/win/graphics/direct/ImageFactory.hpp
new file mode 100644
index 00000000..fa450039
--- /dev/null
+++ b/include/cru/win/graphics/direct/ImageFactory.hpp
@@ -0,0 +1,27 @@
+#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<IImage> DecodeFromStream(io::Stream* stream) override;
+
+ private:
+ DirectGraphicsFactory* graphics_factory_;
+
+ Microsoft::WRL::ComPtr<IWICImagingFactory> wic_imaging_factory_;
+};
+} // namespace cru::platform::graphics::win::direct
diff --git a/include/cru/win/graphics/direct/Painter.hpp b/include/cru/win/graphics/direct/Painter.hpp
index 81d102f1..11fb5619 100644
--- a/include/cru/win/graphics/direct/Painter.hpp
+++ b/include/cru/win/graphics/direct/Painter.hpp
@@ -44,6 +44,8 @@ class CRU_WIN_GRAPHICS_DIRECT_API D2DPainter
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;