Move the sources to trunk
[opencv] / otherlibs / _fltk / include / FL / Fl_Shared_Image.H
1 //
2 // "$Id: Fl_Shared_Image.H,v 1.2 2002/12/01 15:38:37 neurosurg Exp $"
3 //
4 // Shared image header file for the Fast Light Tool Kit (FLTK).
5 //
6 // Copyright 1998-2002 by Bill Spitzak and others.
7 //
8 // This library is free software; you can redistribute it and/or
9 // modify it under the terms of the GNU Library General Public
10 // License as published by the Free Software Foundation; either
11 // version 2 of the License, or (at your option) any later version.
12 //
13 // This library is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16 // Library General Public License for more details.
17 //
18 // You should have received a copy of the GNU Library General Public
19 // License along with this library; if not, write to the Free Software
20 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
21 // USA.
22 //
23 // Please report all bugs and problems to "fltk-bugs@fltk.org".
24 //
25
26 #ifndef Fl_Shared_Image_H
27 #  define Fl_Shared_Image_H
28
29 #  include "Fl_Image.H"
30
31
32 // Test function for adding new formats
33 typedef Fl_Image *(*Fl_Shared_Handler)(const char *name, uchar *header,
34                                        int headerlen);
35
36 // Shared images class. 
37 class FL_EXPORT Fl_Shared_Image : public Fl_Image {
38   protected:
39
40   static Fl_Shared_Image **images_;     // Shared images
41   static int    num_images_;            // Number of shared images
42   static int    alloc_images_;          // Allocated shared images
43   static Fl_Shared_Handler *handlers_;  // Additional format handlers
44   static int    num_handlers_;          // Number of format handlers
45   static int    alloc_handlers_;        // Allocated format handlers
46
47   const char    *name_;                 // Name of image file
48   int           original_;              // Original image?
49   int           refcount_;              // Number of times this image has been used
50   Fl_Image      *image_;                // The image that is shared
51   int           alloc_image_;           // Was the image allocated?
52
53   static int    compare(Fl_Shared_Image **i0, Fl_Shared_Image **i1);
54
55   // Use get() and release() to load/delete images in memory...
56   Fl_Shared_Image();
57   Fl_Shared_Image(const char *n, Fl_Image *img = 0);
58   virtual ~Fl_Shared_Image();
59   void add();
60   void update();
61
62   public:
63
64   const char    *name() { return name_; }
65   int           refcount() { return refcount_; }
66   void          release();
67   void          reload();
68
69   virtual Fl_Image *copy(int W, int H);
70   Fl_Image *copy() { return copy(w(), h()); }
71   virtual void color_average(Fl_Color c, float i);
72   virtual void desaturate();
73   virtual void draw(int X, int Y, int W, int H, int cx, int cy);
74   void draw(int X, int Y) { draw(X, Y, w(), h(), 0, 0); }
75   virtual void uncache();
76
77   static Fl_Shared_Image *find(const char *n, int W = 0, int H = 0);
78   static Fl_Shared_Image *get(const char *n, int W = 0, int H = 0);
79   static Fl_Shared_Image **images();
80   static int            num_images();
81   static void           add_handler(Fl_Shared_Handler f);
82   static void           remove_handler(Fl_Shared_Handler f);
83 };
84
85 //
86 // The following function is provided in the fltk_images library and
87 // registers all of the "extra" image file formats that are not part
88 // of the core FLTK library...
89 //
90
91 FL_EXPORT extern void fl_register_images();
92
93 #endif // !Fl_Shared_Image_H
94
95 //
96 // End of "$Id: Fl_Shared_Image.H,v 1.2 2002/12/01 15:38:37 neurosurg Exp $"
97 //