X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgraphics%2Fquartz%2Fquartzloader.cpp;h=9a74862c590d04b53b0548f5a38b05742e91369c;hb=bc1a38d6d2c966a6aee74e483ca7a7d37a56909e;hp=3447f5f0672100e3318214f0392c4db2d4ca5c03;hpb=06bc1c43ef26b3256dd92a20dbdf7ed9e08bab04;p=libs%2Fgui.git diff --git a/source/graphics/quartz/quartzloader.cpp b/source/graphics/quartz/quartzloader.cpp index 3447f5f..9a74862 100644 --- a/source/graphics/quartz/quartzloader.cpp +++ b/source/graphics/quartz/quartzloader.cpp @@ -1,10 +1,6 @@ -#include -#include -#include -#include -// Avoid messing up sigc++ headers -#undef nil #include "quartzloader.h" +#include +#include using namespace std; @@ -57,8 +53,6 @@ struct QuartzLoader::Private }; -ImageLoader::Register QuartzLoader::reg; - QuartzLoader::QuartzLoader(IO::Seekable &io): priv(new Private) { @@ -85,7 +79,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) @@ -104,39 +98,15 @@ void QuartzLoader::load(Image::Data &data) { if(alpha==kCGImageAlphaLast) data.fmt = RGBA; - else if(alpha==kCGImageAlphaNoneSkipLast) + else if(alpha==kCGImageAlphaNoneSkipLast || alpha==kCGImageAlphaNoneSkipFirst) data.fmt = RGBX; - else if(alpha==kCGImageAlphaNone || alpha==kCGImageAlphaNoneSkipFirst) + else if(alpha==kCGImageAlphaNone) data.fmt = RGB; else throw unsupported_image_format("unknown alpha mode"); } else throw unsupported_image_format("unknown colorspace"); - - CGDataProviderRef dp = CGImageGetDataProvider(image); - CFDataRef image_data = CGDataProviderCopyData(dp); - data.data = new char[data.height*data.stride]; - CFDataGetBytes(image_data, CFRangeMake(0, CFDataGetLength(image_data)), reinterpret_cast(data.data)); - CFRelease(image_data); - - CFRelease(image); - - if(alpha==kCGImageAlphaNoneSkipFirst) - { - const char *src = data.data; - if(alpha==kCGImageAlphaNoneSkipFirst) - ++src; - char *dest = data.data; - for(unsigned y=0; y(data.pixels)); + CFRelease(image_data); + + CFRelease(image); +} + } // namespace Graphics } // namespace Msp