diff options
Diffstat (limited to 'fluid/app/Image_Asset.cxx')
| -rw-r--r-- | fluid/app/Image_Asset.cxx | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/fluid/app/Image_Asset.cxx b/fluid/app/Image_Asset.cxx index cea3cc058..36fa4d443 100644 --- a/fluid/app/Image_Asset.cxx +++ b/fluid/app/Image_Asset.cxx @@ -39,7 +39,6 @@ #include <stdlib.h> #include <stdarg.h> #include <string.h> -#include <string> /** Simple string-to-Image_Asset map entry */ struct Image_Asset_Entry { @@ -210,7 +209,8 @@ void Image_Asset::write_static_rgb(fld::io::Code_Writer& f, const char* idata_na void Image_Asset::write_static(fld::io::Code_Writer& f, int compressed) { if (!image_) return; const char *idata_name = f.unique_id(this, "idata", fl_filename_name(filename()), 0); - initializer_function_ = f.unique_id(this, "image", fl_filename_name(filename()), 0); + if (initializer_function_) free(initializer_function_); + initializer_function_ = fl_strdup(f.unique_id(this, "image", fl_filename_name(filename()), 0)); if (is_animated_gif_) { // Write animated gif image data... @@ -370,7 +370,7 @@ void Image_Asset::write_file_error(fld::io::Code_Writer& f, const char *fmt) { void Image_Asset::write_initializer(fld::io::Code_Writer& f, const char *image_class, const char *format, ...) { va_list ap; va_start(ap, format); - f.write_c("static Fl_Image *%s() {\n", initializer_function_.c_str()); + f.write_c("static Fl_Image *%s() {\n", initializer_function_); if (is_animated_gif_) f.write_c("%sFl_GIF_Image::animate = true;\n", f.indent(1)); f.write_c("%sstatic Fl_Image *image = 0L;\n", f.indent(1)); @@ -402,11 +402,11 @@ void Image_Asset::write_code(fld::io::Code_Writer& f, int bind, const char *var, var, bind ? "bind_" : "", inactive ? "deimage" : "image", - initializer_function_.c_str()); + initializer_function_); if (is_animated_gif_) f.write_c("%s((Fl_Anim_GIF_Image*)(%s()))->canvas(%s, Fl_Anim_GIF_Image::DONT_RESIZE_CANVAS);\n", f.indent(), - initializer_function_.c_str(), + initializer_function_, var); } } @@ -424,7 +424,7 @@ void Image_Asset::write_code(fld::io::Code_Writer& f, int bind, const char *var, void Image_Asset::write_inline(fld::io::Code_Writer& f, int inactive) { (void)inactive; if (image_) { - f.write_c("%s()", initializer_function_.c_str()); + f.write_c("%s()", initializer_function_); } } @@ -492,13 +492,16 @@ Image_Asset* Image_Asset::find(const char *iname) { */ Image_Asset::Image_Asset(const char *iname) { - filename_ = iname; + is_animated_gif_ = 0; + filename_ = iname ? fl_strdup(iname) : 0; + refcount_ = 0; + initializer_function_ = 0; image_ = Fl_Shared_Image::get(iname); if (image_ && iname) { const char *ext = fl_filename_ext(iname); if (fl_ascii_strcasecmp(ext, ".gif")==0) { int fc = Fl_Anim_GIF_Image::frame_count(iname); - if (fc > 0) is_animated_gif_ = true; + if (fc > 0) is_animated_gif_ = 1; } } } @@ -538,8 +541,10 @@ void Image_Asset::dec_ref() { when the object is destroyed. */ Image_Asset::~Image_Asset() { - image_asset_map.erase(filename_.c_str()); + image_asset_map.erase(filename_); if (image_) image_->release(); + if (filename_) free(filename_); + if (initializer_function_) free(initializer_function_); } //////////////////////////////////////////////////////////////// |
