diff options
Diffstat (limited to 'include/cru')
-rw-r--r-- | include/cru/common/platform/osx/Convert.hpp | 2 | ||||
-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 | ||||
-rw-r--r-- | include/cru/platform/graphics/Factory.hpp | 4 | ||||
-rw-r--r-- | include/cru/platform/graphics/Image.hpp | 6 | ||||
-rw-r--r-- | include/cru/platform/graphics/ImageFactory.hpp | 11 |
8 files changed, 77 insertions, 3 deletions
diff --git a/include/cru/common/platform/osx/Convert.hpp b/include/cru/common/platform/osx/Convert.hpp index a583e8da..a2d8beae 100644 --- a/include/cru/common/platform/osx/Convert.hpp +++ b/include/cru/common/platform/osx/Convert.hpp @@ -4,7 +4,7 @@ #include "../../String.hpp" -#include <CoreFoundation/CFString.h> +#include <CoreFoundation/CoreFoundation.h> namespace cru::platform::osx { CFStringRef Convert(const String& string); 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 diff --git a/include/cru/platform/graphics/Factory.hpp b/include/cru/platform/graphics/Factory.hpp index f3802651..7aa88ebd 100644 --- a/include/cru/platform/graphics/Factory.hpp +++ b/include/cru/platform/graphics/Factory.hpp @@ -4,6 +4,8 @@ #include "Brush.hpp" #include "Font.hpp" #include "Geometry.hpp" +#include "Image.hpp" +#include "ImageFactory.hpp" #include "TextLayout.hpp" namespace cru::platform::graphics { @@ -24,5 +26,7 @@ struct CRU_PLATFORM_GRAPHICS_API IGraphicsFactory : virtual IPlatformResource { brush->SetColor(color); return brush; } + + virtual IImageFactory* GetImageFactory() = 0; }; } // namespace cru::platform::graphics diff --git a/include/cru/platform/graphics/Image.hpp b/include/cru/platform/graphics/Image.hpp new file mode 100644 index 00000000..bf1e8545 --- /dev/null +++ b/include/cru/platform/graphics/Image.hpp @@ -0,0 +1,6 @@ +#pragma once +#include "Resource.hpp" + +namespace cru::platform::graphics { +struct CRU_PLATFORM_GRAPHICS_API IImage : public virtual IGraphicsResource {}; +} // namespace cru::platform::graphics diff --git a/include/cru/platform/graphics/ImageFactory.hpp b/include/cru/platform/graphics/ImageFactory.hpp new file mode 100644 index 00000000..3997f783 --- /dev/null +++ b/include/cru/platform/graphics/ImageFactory.hpp @@ -0,0 +1,11 @@ +#pragma once +#include "Image.hpp" +#include "Resource.hpp" +#include "cru/common/io/Stream.hpp" + +namespace cru::platform::graphics { +struct CRU_PLATFORM_GRAPHICS_API IImageFactory + : public virtual IGraphicsResource { + virtual std::unique_ptr<IImage> DecodeFromStream(io::Stream* stream) = 0; +}; +} // namespace cru::platform::graphics |