diff options
Diffstat (limited to 'include/cru/osx')
-rw-r--r-- | include/cru/osx/graphics/quartz/Convert.hpp | 3 | ||||
-rw-r--r-- | include/cru/osx/graphics/quartz/Factory.hpp | 11 | ||||
-rw-r--r-- | include/cru/osx/graphics/quartz/Image.hpp | 24 | ||||
-rw-r--r-- | include/cru/osx/graphics/quartz/ImageFactory.hpp | 19 |
4 files changed, 55 insertions, 2 deletions
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 <CoreGraphics/CoreGraphics.h> @@ -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<ISolidColorBrush> CreateSolidColorBrush() override; @@ -24,5 +26,10 @@ class QuartzGraphicsFactory : public OsxQuartzResource, std::unique_ptr<ITextLayout> CreateTextLayout(std::shared_ptr<IFont> font, String text) override; + + IImageFactory* GetImageFactory() override; + + private: + std::unique_ptr<QuartzImageFactory> 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 <CoreGraphics/CoreGraphics.h> + +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<IImage> DecodeFromStream(io::Stream* stream) override; +}; +} // namespace cru::platform::graphics::osx::quartz |