From c1f8ea13524f398f8d1720e5f03a17dd66352ebf Mon Sep 17 00:00:00 2001 From: crupest Date: Sun, 30 Jan 2022 20:40:59 +0800 Subject: ... --- include/cru/osx/graphics/quartz/Convert.hpp | 3 +++ include/cru/osx/graphics/quartz/Factory.hpp | 11 +++++++++-- include/cru/osx/graphics/quartz/Image.hpp | 24 ++++++++++++++++++++++++ include/cru/osx/graphics/quartz/ImageFactory.hpp | 19 +++++++++++++++++++ 4 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 include/cru/osx/graphics/quartz/Image.hpp create mode 100644 include/cru/osx/graphics/quartz/ImageFactory.hpp (limited to 'include/cru/osx/graphics') diff --git a/include/cru/osx/graphics/quartz/Convert.hpp b/include/cru/osx/graphics/quartz/Convert.hpp index 1b5a186a..ba2b1be1 100644 --- a/include/cru/osx/graphics/quartz/Convert.hpp +++ b/include/cru/osx/graphics/quartz/Convert.hpp @@ -1,6 +1,7 @@ #pragma once #include "cru/common/Range.hpp" #include "cru/common/String.hpp" +#include "cru/common/io/Stream.hpp" #include "cru/platform/Matrix.hpp" #include @@ -17,4 +18,6 @@ Size Convert(const CGSize& size); CGRect Convert(const Rect& rect); Rect Convert(const CGRect& rect); + +CGDataProviderRef ConvertStreamToCGDataProvider(io::Stream* stream); } // namespace cru::platform::graphics::osx::quartz diff --git a/include/cru/osx/graphics/quartz/Factory.hpp b/include/cru/osx/graphics/quartz/Factory.hpp index 454b2388..59433b54 100644 --- a/include/cru/osx/graphics/quartz/Factory.hpp +++ b/include/cru/osx/graphics/quartz/Factory.hpp @@ -1,18 +1,20 @@ #pragma once #include "Resource.hpp" #include "cru/common/Base.hpp" +#include "cru/osx/graphics/quartz/ImageFactory.hpp" #include "cru/platform/graphics/Factory.hpp" +#include "cru/platform/graphics/ImageFactory.hpp" namespace cru::platform::graphics::osx::quartz { class QuartzGraphicsFactory : public OsxQuartzResource, public virtual IGraphicsFactory { public: - QuartzGraphicsFactory() : OsxQuartzResource(this) {} + QuartzGraphicsFactory(); CRU_DELETE_COPY(QuartzGraphicsFactory) CRU_DELETE_MOVE(QuartzGraphicsFactory) - ~QuartzGraphicsFactory() override = default; + ~QuartzGraphicsFactory() override; public: std::unique_ptr CreateSolidColorBrush() override; @@ -24,5 +26,10 @@ class QuartzGraphicsFactory : public OsxQuartzResource, std::unique_ptr CreateTextLayout(std::shared_ptr font, String text) override; + + IImageFactory* GetImageFactory() override; + + private: + std::unique_ptr image_factory_; }; } // namespace cru::platform::graphics::osx::quartz diff --git a/include/cru/osx/graphics/quartz/Image.hpp b/include/cru/osx/graphics/quartz/Image.hpp new file mode 100644 index 00000000..66d7dca0 --- /dev/null +++ b/include/cru/osx/graphics/quartz/Image.hpp @@ -0,0 +1,24 @@ +#pragma once +#include "Resource.hpp" +#include "cru/platform/graphics/Image.hpp" +#include "cru/platform/graphics/ImageFactory.hpp" + +#include + +namespace cru::platform::graphics::osx::quartz { +class QuartzImage : public OsxQuartzResource, public virtual IImage { + public: + QuartzImage(IGraphicsFactory* graphics_factory, IImageFactory* image_factory, + CGImageRef image, bool auto_release); + + CRU_DELETE_COPY(QuartzImage) + CRU_DELETE_MOVE(QuartzImage) + + ~QuartzImage() override; + + public: + private: + CGImageRef image_; + bool auto_release_ = false; +}; +} // namespace cru::platform::graphics::osx::quartz diff --git a/include/cru/osx/graphics/quartz/ImageFactory.hpp b/include/cru/osx/graphics/quartz/ImageFactory.hpp new file mode 100644 index 00000000..027f3f2a --- /dev/null +++ b/include/cru/osx/graphics/quartz/ImageFactory.hpp @@ -0,0 +1,19 @@ +#pragma once +#include "Resource.hpp" +#include "cru/platform/graphics/ImageFactory.hpp" + +namespace cru::platform::graphics::osx::quartz { +class QuartzImageFactory : public OsxQuartzResource, + public virtual IImageFactory { + public: + explicit QuartzImageFactory(IGraphicsFactory* graphics_factory); + + CRU_DELETE_COPY(QuartzImageFactory) + CRU_DELETE_MOVE(QuartzImageFactory) + + ~QuartzImageFactory() override; + + public: + std::unique_ptr DecodeFromStream(io::Stream* stream) override; +}; +} // namespace cru::platform::graphics::osx::quartz -- cgit v1.2.3