]> git.tdb.fi Git - libs/gui.git/blobdiff - source/graphics/quartz/quartzloader.cpp
Tweak QuartzLoader a bit
[libs/gui.git] / source / graphics / quartz / quartzloader.cpp
index a7c610d4ab62094fa88c8969ea8bdb5fe6e76cdf..3447f5f0672100e3318214f0392c4db2d4ca5c03 100644 (file)
@@ -82,12 +82,14 @@ bool QuartzLoader::detect(const string &sig)
        CFRelease(data);
        CFRelease(source);
 
-       return status==kCGImageStatusIncomplete;
+       return status==kCGImageStatusIncomplete || status==kCGImageStatusReadingHeader;
 }
 
 void QuartzLoader::load(Image::Data &data)
 {
        CGImageRef image = CGImageSourceCreateImageAtIndex(priv->source, 0, 0);
+       if(!image)
+               throw bad_image_data("null image");
 
        try
        {
@@ -102,7 +104,9 @@ void QuartzLoader::load(Image::Data &data)
                {
                        if(alpha==kCGImageAlphaLast)
                                data.fmt = RGBA;
-                       else if(alpha==kCGImageAlphaNone || alpha==kCGImageAlphaNoneSkipFirst || alpha==kCGImageAlphaNoneSkipLast)
+                       else if(alpha==kCGImageAlphaNoneSkipLast)
+                               data.fmt = RGBX;
+                       else if(alpha==kCGImageAlphaNone || alpha==kCGImageAlphaNoneSkipFirst)
                                data.fmt = RGB;
                        else
                                throw unsupported_image_format("unknown alpha mode");
@@ -118,7 +122,7 @@ void QuartzLoader::load(Image::Data &data)
 
                CFRelease(image);
 
-               if(alpha==kCGImageAlphaNoneSkipFirst || alpha==kCGImageAlphaNoneSkipLast)
+               if(alpha==kCGImageAlphaNoneSkipFirst)
                {
                        const char *src = data.data;
                        if(alpha==kCGImageAlphaNoneSkipFirst)