Main Page   Modules   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

Fl_Image.h

00001 /*
00002  * $Id: Fl_Image.h,v 1.20 2003/07/03 20:36:35 laza2000 Exp $
00003  *
00004  * Extended Fast Light Toolkit (EFLTK)
00005  * Copyright (C) 2002-2003 by EDE-Team
00006  * WWW: http://www.sourceforge.net/projects/ede
00007  *
00008  * Fast Light Toolkit (FLTK)
00009  * Copyright (C) 1998-2003 by Bill Spitzak and others.
00010  * WWW: http://www.fltk.org
00011  *
00012  * This library is distributed under the GNU LIBRARY GENERAL PUBLIC LICENSE
00013  * version 2. See COPYING for details.
00014  *
00015  * Author : Mikko Lahteenmaki
00016  * Email  : mikko@fltk.net
00017  *
00018  * Please report all bugs and problems to "efltk-bugs@fltk.net"
00019  *
00020  */
00021 
00022 #ifndef _FL_IMAGE_H_
00023 #define _FL_IMAGE_H_
00024 
00025 #include "Enumerations.h"
00026 #include "Fl_Renderer.h"
00027 #include "Fl_PtrList.h"
00028 #include "Fl_Export.h"
00029 #include "Fl_Flags.h"
00030 #include "Fl_Image_IO.h"
00031 
00032 #include <stdio.h> //For FILE
00033 
00034 class Fl_Image;
00035 
00036 typedef bool (check_mask_pixel)(const Fl_Image *i, uint8 *buf);
00037 
00041 class Fl_Image {
00042     friend class Fl_Image_Filter;
00043 
00044 public:
00045     // This reads all supported file formats from file or data stream.
00046     // Except XPM stream, from file it will work.
00047     static Fl_Image *read(const char *filename, const uint8 *data = 0, uint32 data_size=0);
00048     // XPM ONLY: from file or data stream.
00049     static Fl_Image *read_xpm(const char *filename, const char * const *data=0);
00050 
00056     Fl_Image(const char *filename, int quality=FL_QUALITY_NORMAL);
00057 
00064     Fl_Image(const uint8 *data, uint32 data_size, int quality=FL_QUALITY_NORMAL);
00065 
00069     Fl_Image(const char * const *data, int quality=FL_QUALITY_NORMAL); //XPM
00070 
00076     Fl_Image(int W, int H, Fl_PixelFormat *fmt, uint8 *data, bool allow_free=false);
00077 
00086     Fl_Image(int W, int H, int bits_pp, uint8 *data=0, bool allow_free=false, uint32 Rmask=0, uint32 Gmask=0, uint32 Bmask=0, uint32 Amask=0);
00087 
00091     Fl_Image(Fl_Image &i);
00092 
00098     virtual ~Fl_Image();
00099 
00100     // New read/write methods:
00101     // Read image:
00102     bool read_image(const char *filename, const uint8 *data = 0, uint32 data_size=0);
00103     bool read_image(const char *filename, const char * const *data);
00104     bool read_image(const char *filename, char **data) { return read_image(filename, (const char **)data); }
00105 
00106     // Write image to file,
00107     bool write_image(const char *filename, const char *io_name);
00108     bool write_image(const char *filename, Fl_Image_IO *io);
00109 
00110     // Write image to memory pointer 'data'. Size of allocated data is set to 'data_size'.
00111     bool write_image(uint8 *&data, int &data_size, const char *io_name);
00112     bool write_image(uint8 *&data, int &data_size, Fl_Image_IO *io);
00113 
00114     // Quality in read/write time
00115     int quality() const { return m_quality; }
00116     void quality(int q) { m_quality = q; }
00117 
00118     // Copies 'src' to 'dst'
00119     void copy(Fl_Image &src, Fl_Image &dst);
00120 
00129     virtual void measure(int &W, int &H) { W=width(); H=height(); }
00130 
00137     void draw(int dx, int dy, int dw, int dh, int sx, int sy, int sw, int sh, Fl_Flags f) { _draw(dx, dy, dw, dh, sx, sy, sw, sh, f); }
00143     void draw(int x, int y, int w=0, int h=0, Fl_Flags f=0) { if(!w) w=width(); if(!h) h=height(); _draw(x,y,w,h,0,0,0,0,f); }
00144 
00145     // Mask handling
00146     int mask_type() const { return m_fmt.masktype; }
00147     void mask_type(int mask) { m_fmt.masktype = mask; }
00148 
00149     void set_mask(Pixmap m, bool allow_free=false);
00150     Pixmap get_mask() const { return (Pixmap)mask; }
00151 
00152     void set_offscreen(Pixmap p, bool allow_free=false);
00153     Pixmap get_offscreen() const { return (Pixmap)id; }
00154 
00155     Region create_region_mask(check_mask_pixel *func = 0) const;
00156     Region create_scaled_region_mask(int w, int h, check_mask_pixel *func = 0);
00157 
00158     // Create masks.
00159     Pixmap create_bitmap_mask(check_mask_pixel *func = 0) const;
00160     Pixmap create_scaled_bitmap_mask(int w, int h, check_mask_pixel *func = 0);
00161     Pixmap create_mask(int w, int h) { return create_scaled_bitmap_mask(w,h); }
00162 
00167     Fl_Image *scale(int W, int H);
00168 
00173     Fl_Image *grayscale();
00174 
00180     Fl_Image *fore_blend(uint color);
00181 
00187     Fl_Image *back_blend(uint color);
00188 
00193     Fl_Image *blend(Fl_Image *back, int x, int y);
00194 
00195     // Frees all allocated buffers
00196     void clear();
00197 
00198     // Makes offscreen pixmaps redraw
00199     void invalidate();
00200 
00201     // Converts image to system screen depth
00202     void system_convert();
00203 
00204     // Image data
00205     uint8 *data() { return m_data; }
00206 
00207     int width()  const { return m_width; }
00208     int height() const { return m_height; }
00209 
00210     int pitch()   const { return m_pitch; }
00211     int bytespp() const { return m_fmt.bytespp; } //Bytes per pixel
00212     int bitspp()  const { return m_fmt.bitspp;  } //Bits per pixel
00213 
00214     int state() const { return m_state; }
00215     void state(int s) { m_state = s; }
00216 
00217     // For colorkey blitting and masking (colorkey in RGBA)
00218     inline uint32 colorkey() const { return m_fmt.colorkey; }
00219     inline void colorkey(uint32 c) { m_fmt.colorkey = c; }
00220 
00221     // 0 - 255 Surface alpha
00222     inline uint8 alpha() const { return m_fmt.alpha; }
00223     inline void alpha(uint8 a) { m_fmt.alpha = a; }
00224 
00225     // For masks:
00226     inline uint8 threshold() const { return m_threshold; }
00227     inline void threshold(uint8 t) { m_threshold = t; }
00228 
00229     // Indexed images colormap:
00230     inline Fl_Colormap *colormap() const { return m_fmt.palette; }
00231     Fl_Colormap *colormap(Fl_Colormap *new_map) { Fl_Colormap *old = m_fmt.palette; m_fmt.palette = new_map; return old; }
00232 
00233     Fl_PixelFormat *format() const { return (Fl_PixelFormat*)&m_fmt; }
00234 
00235     // Checks and maps format to other, if needed
00236     bool check_map(Fl_PixelFormat *cur_fmt, Fl_PixelFormat *new_fmt);
00237     bool check_map(Fl_PixelFormat *new_fmt);
00238 
00239     // Only draw to offscreen.
00240     void no_screen(bool v) { m_no_screen = v; }
00241     bool no_screen() const { return m_no_screen; }
00242 
00243     // Set this to false, to disable state effects in THIS image, e.g. DISABLED, SELECTED...
00244     void state_effect(bool value) { m_state_effect = value; }
00245     bool state_effect() const { return m_state_effect; }
00246 
00247     // Set this to false, to disable state effects in ALL images, e.g. DISABLED, SELECTED...
00248     static bool state_effect_all() { return m_state_effect_all; }
00249     static void state_effect_all(bool value) { m_state_effect_all = value; }
00250 
00251 protected:
00255     Fl_Image();
00256 
00257     void init(int W, int H, int bits_pp, uint8 *data, uint32 Rmask, uint32 Gmask, uint32 Bmask, uint32 Amask);
00258     virtual void _draw(int dx, int dy, int dw, int dh,
00259                        int sx, int sy, int sw, int sh,
00260                        Fl_Flags f);
00261 
00262     //Draws offscreen pixmap to screen
00263     void to_screen(int X, int Y, int W, int H, int cx, int cy);
00264     void to_screen_tiled(int X, int Y, int W, int H, int cx, int cy);
00265 
00266     int m_width;  
00267     int m_height; 
00268     int m_pitch;  
00269 
00270     uint8 *m_data; 
00271 
00272     bool m_data_alloc;   
00273     bool m_id_alloc;     
00274     bool m_mask_alloc;   
00275 
00276     void *id;   
00277     void *mask; 
00278 
00279 private:
00280     bool m_no_screen;
00281     uint8 m_threshold;
00282 
00283     Fl_PixelFormat m_fmt;
00284 
00285     bool m_state_effect;
00286     static bool m_state_effect_all;
00287 
00288     int m_state;
00289     int m_quality;
00290 
00291     int m_old_drawflags;  //last drawubg flags passed
00292     int m_lastw, m_lasth; //last scaled size
00293     // Data storage for selected, inactive...
00294     Fl_Image *m_mod_data;
00295 };
00296 
00297 #endif

Generated on Thu Jul 31 15:33:44 2003 for eFLTK by doxygen1.2.15