]> git.tdb.fi Git - libs/gui.git/blobdiff - source/graphics/imageloader.cpp
Split image loading into headers and pixels
[libs/gui.git] / source / graphics / imageloader.cpp
index da897984449993b56e3163b5ffd8830da06e22a9..fa6fcf802b2a57eb6d852e34c6363d375e521ba4 100644 (file)
@@ -22,7 +22,8 @@ namespace Msp {
 namespace Graphics {
 
 ImageLoader::ImageLoader():
-       source(0)
+       source(0),
+       state(INITIAL)
 { }
 
 ImageLoader::~ImageLoader()
@@ -85,8 +86,22 @@ ImageLoader *ImageLoader::open_io(IO::Seekable &io)
 
 void ImageLoader::load(Image::Data &data)
 {
-       load_headers(data);
-       load_data(data);
+       if(state>=FINISHED)
+               throw logic_error("already loaded");
+
+       if(state<HEADERS_LOADED)
+               load_headers_(data);
+       load_pixels_(data);
+       state = FINISHED;
+}
+
+void ImageLoader::load_headers(Image::Data &data)
+{
+       if(state>=HEADERS_LOADED)
+               throw logic_error("headers already loaded");
+
+       load_headers_(data);
+       state = HEADERS_LOADED;
 }
 
 ImageLoader::Registry &ImageLoader::get_registry()