FLTK 1.3.x
|
00001 // 00002 // "$Id: Fl_Shared_Image.H 7903 2010-11-28 21:06:39Z matt $" 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 protected: 00051 00052 static Fl_Shared_Image **images_; // Shared images 00053 static int num_images_; // Number of shared images 00054 static int alloc_images_; // Allocated shared images 00055 static Fl_Shared_Handler *handlers_; // Additional format handlers 00056 static int num_handlers_; // Number of format handlers 00057 static int alloc_handlers_; // Allocated format handlers 00058 00059 const char *name_; // Name of image file 00060 int original_; // Original image? 00061 int refcount_; // Number of times this image has been used 00062 Fl_Image *image_; // The image that is shared 00063 int alloc_image_; // Was the image allocated? 00064 00065 static int compare(Fl_Shared_Image **i0, Fl_Shared_Image **i1); 00066 00067 // Use get() and release() to load/delete images in memory... 00068 Fl_Shared_Image(); 00069 Fl_Shared_Image(const char *n, Fl_Image *img = 0); 00070 virtual ~Fl_Shared_Image(); 00071 void add(); 00072 void update(); 00073 00074 public: 00076 const char *name() { return name_; } 00078 int refcount() { return refcount_; } 00079 void release(); 00080 void reload(); 00081 00082 virtual Fl_Image *copy(int W, int H); 00083 Fl_Image *copy() { return copy(w(), h()); } 00084 virtual void color_average(Fl_Color c, float i); 00085 virtual void desaturate(); 00086 virtual void draw(int X, int Y, int W, int H, int cx, int cy); 00087 void draw(int X, int Y) { draw(X, Y, w(), h(), 0, 0); } 00088 virtual void uncache(); 00089 00090 static Fl_Shared_Image *find(const char *n, int W = 0, int H = 0); 00091 static Fl_Shared_Image *get(const char *n, int W = 0, int H = 0); 00092 static Fl_Shared_Image **images(); 00093 static int num_images(); 00094 static void add_handler(Fl_Shared_Handler f); 00095 static void remove_handler(Fl_Shared_Handler f); 00096 }; 00097 00098 // 00099 // The following function is provided in the fltk_images library and 00100 // registers all of the "extra" image file formats that are not part 00101 // of the core FLTK library... 00102 // 00103 00104 FL_EXPORT extern void fl_register_images(); 00105 00106 #endif // !Fl_Shared_Image_H 00107 00108 // 00109 // End of "$Id: Fl_Shared_Image.H 7903 2010-11-28 21:06:39Z matt $" 00110 //