]> git.tdb.fi Git - libs/gui.git/blobdiff - source/graphics/quartz/quartzloader.cpp
Make it possible to load an image into an externally allocated buffer
[libs/gui.git] / source / graphics / quartz / quartzloader.cpp
index d1baaef549761aac2b50157ab0f4392dc3f09249..3799bcde6681fe7ccac941f43bc179ceb70392b2 100644 (file)
@@ -55,8 +55,6 @@ struct QuartzLoader::Private
 };
 
 
-ImageLoader::Register<QuartzLoader> QuartzLoader::reg;
-
 QuartzLoader::QuartzLoader(IO::Seekable &io):
        priv(new Private)
 {
@@ -83,7 +81,7 @@ bool QuartzLoader::detect(const string &sig)
        return status==kCGImageStatusIncomplete || status==kCGImageStatusReadingHeader;
 }
 
-void QuartzLoader::load(Image::Data &data)
+void QuartzLoader::load_(Image::Data &data)
 {
        CGImageRef image = CGImageSourceCreateImageAtIndex(priv->source, 0, 0);
        if(!image)
@@ -111,16 +109,6 @@ void QuartzLoader::load(Image::Data &data)
                }
                else
                        throw unsupported_image_format("unknown colorspace");
-
-               CGDataProviderRef dp = CGImageGetDataProvider(image);
-               CFDataRef image_data = CGDataProviderCopyData(dp);
-               data.data = new char[data.height*data.stride];
-               unsigned offset = (alpha==kCGImageAlphaNoneSkipFirst);
-               CFRange range = CFRangeMake(offset, CFDataGetLength(image_data)-offset);
-               CFDataGetBytes(image_data, range, reinterpret_cast<UInt8 *>(data.data));
-               CFRelease(image_data);
-
-               CFRelease(image);
        }
        catch(...)
        {
@@ -129,5 +117,17 @@ void QuartzLoader::load(Image::Data &data)
        }
 }
 
+void QuartzLoader::load_(Image::Data &data)
+{
+       CGDataProviderRef dp = CGImageGetDataProvider(image);
+       CFDataRef image_data = CGDataProviderCopyData(dp);
+       unsigned offset = (alpha==kCGImageAlphaNoneSkipFirst);
+       CFRange range = CFRangeMake(offset, CFDataGetLength(image_data)-offset);
+       CFDataGetBytes(image_data, range, reinterpret_cast<UInt8 *>(data.pixels));
+       CFRelease(image_data);
+
+       CFRelease(image);
+}
+
 } // namespace Graphics
 } // namespace Msp