aboutsummaryrefslogtreecommitdiff
path: root/include/cru/osx/graphics/quartz
diff options
context:
space:
mode:
Diffstat (limited to 'include/cru/osx/graphics/quartz')
-rw-r--r--include/cru/osx/graphics/quartz/Convert.hpp3
-rw-r--r--include/cru/osx/graphics/quartz/Factory.hpp11
-rw-r--r--include/cru/osx/graphics/quartz/Image.hpp24
-rw-r--r--include/cru/osx/graphics/quartz/ImageFactory.hpp19
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