FLTK 1.3.0
|
00001 // 00002 // "$Id$" 00003 // 00004 // Shared image header file for the Fast Light Tool Kit (FLTK). 00005 // 00006 // Copyright 1998-2010 by Bill Spitzak and others. 00007 // 00008 // This library is free software; you can redistribute it and/or 00009 // modify it under the terms of the GNU Library General Public 00010 // License as published by the Free Software Foundation; either 00011 // version 2 of the License, or (at your option) any later version. 00012 // 00013 // This library is distributed in the hope that it will be useful, 00014 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00016 // Library General Public License for more details. 00017 // 00018 // You should have received a copy of the GNU Library General Public 00019 // License along with this library; if not, write to the Free Software 00020 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 00021 // USA. 00022 // 00023 // Please report all bugs and problems on the following page: 00024 // 00025 // http://www.fltk.org/str.php 00026 // 00027 00031 #ifndef Fl_Shared_Image_H 00032 # define Fl_Shared_Image_H 00033 00034 # include "Fl_Image.H" 00035 00036 00037 // Test function for adding new formats 00038 typedef Fl_Image *(*Fl_Shared_Handler)(const char *name, uchar *header, 00039 int headerlen); 00040 00041 // Shared images class. 00049 class FL_EXPORT Fl_Shared_Image : public Fl_Image { 00050 00051 friend class Fl_JPEG_Image; 00052 friend class Fl_PNG_Image; 00053 00054 protected: 00055 00056 static Fl_Shared_Image **images_; // Shared images 00057 static int num_images_; // Number of shared images 00058 static int alloc_images_; // Allocated shared images 00059 static Fl_Shared_Handler *handlers_; // Additional format handlers 00060 static int num_handlers_; // Number of format handlers 00061 static int alloc_handlers_; // Allocated format handlers 00062 00063 const char *name_; // Name of image file 00064 int original_; // Original image? 00065 int refcount_; // Number of times this image has been used 00066 Fl_Image *image_; // The image that is shared 00067 int alloc_image_; // Was the image allocated? 00068 00069 static int compare(Fl_Shared_Image **i0, Fl_Shared_Image **i1); 00070 00071 // Use get() and release() to load/delete images in memory... 00072 Fl_Shared_Image(); 00073 Fl_Shared_Image(const char *n, Fl_Image *img = 0); 00074 virtual ~Fl_Shared_Image(); 00075 void add(); 00076 void update(); 00077 00078 public: 00080 const char *name() { return name_; } 00082 int refcount() { return refcount_; } 00083 void release(); 00084 void reload(); 00085 00086 virtual Fl_Image *copy(int W, int H); 00087 Fl_Image *copy() { return copy(w(), h()); } 00088 virtual void color_average(Fl_Color c, float i); 00089 virtual void desaturate(); 00090 virtual void draw(int X, int Y, int W, int H, int cx, int cy); 00091 void draw(int X, int Y) { draw(X, Y, w(), h(), 0, 0); } 00092 virtual void uncache(); 00093 00094 static Fl_Shared_Image *find(const char *n, int W = 0, int H = 0); 00095 static Fl_Shared_Image *get(const char *n, int W = 0, int H = 0); 00096 static Fl_Shared_Image **images(); 00097 static int num_images(); 00098 static void add_handler(Fl_Shared_Handler f); 00099 static void remove_handler(Fl_Shared_Handler f); 00100 }; 00101 00102 // 00103 // The following function is provided in the fltk_images library and 00104 // registers all of the "extra" image file formats that are not part 00105 // of the core FLTK library... 00106 // 00107 00108 FL_EXPORT extern void fl_register_images(); 00109 00110 #endif // !Fl_Shared_Image_H 00111 00112 // 00113 // End of "$Id$" 00114 //