X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgraphics%2Fimage.cpp;h=3e1124faaf06800158413189c054529db2ca4060;hb=cfd3548464e6424fc9decf0539d6cd04b031ba10;hp=46c2b3fab3c29f0ce952133b1d55966531252e94;hpb=12df88ecf9787f4ed59051646775165b74301cf0;p=libs%2Fgui.git diff --git a/source/graphics/image.cpp b/source/graphics/image.cpp index 46c2b3f..3e1124f 100644 --- a/source/graphics/image.cpp +++ b/source/graphics/image.cpp @@ -1,107 +1,43 @@ -#ifdef WITH_DEVIL -#include -#endif +#include #include #include #include #include "image.h" -#include "image_devil.h" -#include "image_png.h" -#include "image_private.h" +#include "imageloader.h" using namespace std; namespace Msp { namespace Graphics { -Image::Private::Private() -{ -#ifdef WITH_DEVIL - id = 0; -#endif - fmt = RGB; - width = 0; - height = 0; - data = 0; -} +Image::Data::Data(): + fmt(RGB), + width(0), + height(0), + data(0) +{ } - -Image::Image(): - priv(new Private) +Image::Data::~Data() { -#if !defined(WITH_DEVIL) && !defined(WITH_LIBPNG) - throw runtime_error("no image support"); -#endif + delete[] data; } -Image::~Image() -{ -#ifdef WITH_DEVIL - if(priv->id) - ilDeleteImages(1, &priv->id); - else -#endif - delete[] priv->data; - delete priv; -} void Image::load_file(const string &fn) { - string ext = FS::extpart(fn); -#ifdef WITH_LIBPNG - if(ext==".png") - { - IO::BufferedFile file(fn); - load_png(file, *priv, 0, 0); - } - else -#endif - { -#ifdef WITH_DEVIL - load_devil_file(fn, *priv); -#else - throw unsupported_image_format("DevIL needed for non-PNG images"); -#endif - } - (void)fn; + RefPtr loader = ImageLoader::open_file(fn); + load(*loader); } void Image::load_io(IO::Base &io) { - char sig_buf[8]; - unsigned sig_len = io.read(sig_buf, sizeof(sig_buf)); -#ifdef WITH_LIBPNG - if(sig_len==sizeof(sig_buf) && is_png(sig_buf, sig_len)) - load_png(io, *priv, sig_buf, sig_len); - else -#endif - { -#ifdef WITH_DEVIL - load_devil_io(io, *priv, sig_buf, sig_len); -#else - throw unsupported_image_format("DevIL needed for non-PNG images"); -#endif - } -} - -PixelFormat Image::get_format() const -{ - return priv->fmt; -} - -unsigned Image::get_width() const -{ - return priv->width; -} - -unsigned Image::get_height() const -{ - return priv->height; + RefPtr loader = ImageLoader::open_io(io); + load(*loader); } -const void *Image::get_data() const +void Image::load(ImageLoader &loader) { - return priv->data; + loader.load(data); } } // namespace Graphics