aboutsummaryrefslogtreecommitdiff
path: root/src/osx/graphics/quartz/ImageFactory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/osx/graphics/quartz/ImageFactory.cpp')
-rw-r--r--src/osx/graphics/quartz/ImageFactory.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/osx/graphics/quartz/ImageFactory.cpp b/src/osx/graphics/quartz/ImageFactory.cpp
new file mode 100644
index 00000000..c59ff126
--- /dev/null
+++ b/src/osx/graphics/quartz/ImageFactory.cpp
@@ -0,0 +1,31 @@
+#include "cru/osx/graphics/quartz/ImageFactory.hpp"
+#include "cru/osx/graphics/quartz/Convert.hpp"
+#include "cru/osx/graphics/quartz/Image.hpp"
+#include "cru/platform/graphics/Image.hpp"
+
+#include <ImageIO/ImageIO.h>
+
+namespace cru::platform::graphics::osx::quartz {
+QuartzImageFactory::QuartzImageFactory(IGraphicsFactory* graphics_factory)
+ : OsxQuartzResource(graphics_factory) {}
+
+QuartzImageFactory::~QuartzImageFactory() {}
+
+std::unique_ptr<IImage> QuartzImageFactory::DecodeFromStream(
+ io::Stream* stream) {
+ CGDataProviderRef data_provider = ConvertStreamToCGDataProvider(stream);
+ CGImageSourceRef image_source =
+ CGImageSourceCreateWithDataProvider(data_provider, nullptr);
+
+ CGImageRef cg_image =
+ CGImageSourceCreateImageAtIndex(image_source, 0, nullptr);
+
+ QuartzImage* image =
+ new QuartzImage(GetGraphicsFactory(), this, cg_image, true);
+
+ CFRelease(cg_image);
+ CGDataProviderRelease(data_provider);
+
+ return std::unique_ptr<IImage>(image);
+}
+} // namespace cru::platform::graphics::osx::quartz