FLTK 1.3.x

Fl_Device.H

Go to the documentation of this file.
00001 //
00002 // "$Id: Fl_Device.H 8190 2011-01-05 10:21:45Z manolo $"
00003 //
00004 // Definition of classes Fl_Device, Fl_Graphics_Driver, Fl_Surface_Device, Fl_Display_Device
00005 // for the Fast Light Tool Kit (FLTK).
00006 //
00007 // Copyright 2010 by Bill Spitzak and others.
00008 //
00009 // This library is free software; you can redistribute it and/or
00010 // modify it under the terms of the GNU Library General Public
00011 // License as published by the Free Software Foundation; either
00012 // version 2 of the License, or (at your option) any later version.
00013 //
00014 // This library is distributed in the hope that it will be useful,
00015 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00016 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00017 // Library General Public License for more details.
00018 //
00019 // You should have received a copy of the GNU Library General Public
00020 // License along with this library; if not, write to the Free Software
00021 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
00022 // USA.
00023 //
00024 // Please report all bugs and problems on the following page:
00025 //
00026 //     http://www.fltk.org/str.php
00027 //
00033 #ifndef Fl_Device_H
00034 #define Fl_Device_H
00035 
00036 #include <FL/Fl_Plugin.H>
00037 #include <FL/Fl_Image.H>
00038 #include <FL/Fl_Bitmap.H>
00039 #include <FL/Fl_Pixmap.H>
00040 #include <FL/Fl_RGB_Image.H>
00041 
00042 class Fl_Graphics_Driver;
00043 class Fl_Display_Device;
00044 class Fl_Surface_Device;
00046 FL_EXPORT extern Fl_Graphics_Driver *fl_graphics_driver;
00048 FL_EXPORT extern Fl_Surface_Device *fl_surface;
00050 FL_EXPORT extern Fl_Display_Device *fl_display_device;
00051 
00060 typedef void (*Fl_Draw_Image_Cb)(void* data,int x,int y,int w,uchar* buf);
00061 
00065 class FL_EXPORT Fl_Device {
00066 private:
00067   const char *type_; // pointer to class name
00068 protected:
00070   inline void class_name(const char *name) { type_ = name;};
00075   static const char *class_id;
00076 public:
00085   inline const char *class_name() {return type_;};
00086 };
00087 
00096 class FL_EXPORT Fl_Graphics_Driver : public Fl_Device {
00097 protected:
00098 /*  ** \brief red color for background and/or mixing if device does not support masking or alpha *
00099   uchar bg_r_; 
00100   ** \brief green color for background and/or mixing if device does not support masking or alpha *
00101   uchar bg_g_; 
00102   ** \brief blue color for background and/or mixing if device does not support masking or alpha *
00103   uchar bg_b_; */
00104   friend class Fl_Pixmap;
00105   friend class Fl_Bitmap;
00106   friend class Fl_RGB_Image;
00107   friend class Fl_PostScript_Graphics_Driver;
00108   friend void fl_rect(int x, int y, int w, int h);
00109   friend void fl_rectf(int x, int y, int w, int h);
00110   friend void fl_line_style(int style, int width, char* dashes);
00111   friend void fl_xyline(int x, int y, int x1);
00112   friend void fl_xyline(int x, int y, int x1, int y2);
00113   friend void fl_xyline(int x, int y, int x1, int y2, int x3);
00114   friend void fl_yxline(int x, int y, int y1);
00115   friend void fl_yxline(int x, int y, int y1, int x2);
00116   friend void fl_yxline(int x, int y, int y1, int x2, int y3);
00117   friend void fl_line(int x, int y, int x1, int y1);
00118   friend void fl_line(int x, int y, int x1, int y1, int x2, int y2);
00119   friend void fl_draw(const char *str, int n, int x, int y);
00120   friend void fl_draw(int angle, const char *str, int n, int x, int y);
00121   friend void fl_rtl_draw(const char *str, int n, int x, int y);
00122   friend void fl_font(Fl_Font face, Fl_Fontsize size);
00123   friend void fl_color(Fl_Color c);
00124   friend void fl_color(uchar r, uchar g, uchar b);
00125   friend void fl_point(int x, int y);
00126   friend void fl_loop(int x0, int y0, int x1, int y1, int x2, int y2);
00127   friend void fl_loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
00128   friend void fl_polygon(int x0, int y0, int x1, int y1, int x2, int y2);
00129   friend void fl_polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
00130   friend void fl_begin_points();
00131   friend void fl_begin_line();
00132   friend void fl_begin_loop();
00133   friend void fl_begin_polygon();
00134   friend void fl_vertex(double x, double y);
00135   friend void fl_curve(double X0, double Y0, double X1, double Y1, double X2, double Y2, double X3, double Y3);
00136   friend void fl_circle(double x, double y, double r);
00137   friend void fl_arc(double x, double y, double r, double start, double end);
00138   friend void fl_arc(int x, int y, int w, int h, double a1, double a2);
00139   friend void fl_pie(int x, int y, int w, int h, double a1, double a2);
00140   friend void fl_end_points();
00141   friend void fl_end_line();
00142   friend void fl_end_loop();
00143   friend void fl_end_polygon();
00144   friend void fl_transformed_vertex(double xf, double yf);
00145   friend void fl_push_clip(int x, int y, int w, int h);
00146   friend int fl_clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H);
00147   friend int fl_not_clipped(int x, int y, int w, int h);
00148   friend void fl_push_no_clip();
00149   friend void fl_pop_clip();
00150   friend void fl_begin_complex_polygon();
00151   friend void fl_gap();
00152   friend void fl_end_complex_polygon();
00153   friend void fl_draw_image(const uchar* buf, int X,int Y,int W,int H, int D, int L);
00154   friend void fl_draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D, int L);
00155   friend void fl_draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D);
00156   friend FL_EXPORT void fl_draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D);
00157   
00159   Fl_Graphics_Driver() {};
00161   virtual void rect(int x, int y, int w, int h);
00163   virtual void rectf(int x, int y, int w, int h);
00165   virtual void line_style(int style, int width=0, char* dashes=0);
00167   virtual void xyline(int x, int y, int x1);
00169   virtual void xyline(int x, int y, int x1, int y2);
00171   virtual void xyline(int x, int y, int x1, int y2, int x3);
00173   virtual void yxline(int x, int y, int y1);
00175   virtual void yxline(int x, int y, int y1, int x2);
00177   virtual void yxline(int x, int y, int y1, int x2, int y3);
00179   virtual void line(int x, int y, int x1, int y1);
00181   virtual void line(int x, int y, int x1, int y1, int x2, int y2);
00183   virtual void draw(const char *str, int n, int x, int y) {};
00185   virtual void draw(int angle, const char *str, int n, int x, int y) {};
00187   virtual void rtl_draw(const char *str, int n, int x, int y) {};
00189   virtual void font(Fl_Font face, Fl_Fontsize size) {};
00191   virtual void color(Fl_Color c) {};
00193   virtual void color(uchar r, uchar g, uchar b) {};
00195   virtual void point(int x, int y);
00197   virtual void loop(int x0, int y0, int x1, int y1, int x2, int y2);
00199   virtual void loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
00201   virtual void polygon(int x0, int y0, int x1, int y1, int x2, int y2);
00203   virtual void polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
00205   virtual void begin_points();
00207   virtual void begin_line();
00209   virtual void begin_loop();
00211   virtual void begin_polygon();
00213   virtual void vertex(double x, double y);
00215   virtual void curve(double X0, double Y0, double X1, double Y1, double X2, double Y2, double X3, double Y3);
00217   virtual void circle(double x, double y, double r);
00219   virtual void arc(double x, double y, double r, double start, double end);
00221   virtual void arc(int x, int y, int w, int h, double a1, double a2);
00223   virtual void pie(int x, int y, int w, int h, double a1, double a2);
00225   virtual void end_points();
00227   virtual void end_line();
00229   virtual void end_loop();
00231   virtual void end_polygon();
00233   virtual void begin_complex_polygon();
00235   virtual void gap();
00237   virtual void end_complex_polygon();
00239   virtual void transformed_vertex(double xf, double yf);
00241   virtual void push_clip(int x, int y, int w, int h);
00243   virtual int clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H);
00245   virtual int not_clipped(int x, int y, int w, int h);
00247   virtual void push_no_clip();
00249   virtual void pop_clip();
00250   // Images
00252   virtual   void draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0) {};
00254   virtual   void draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0) {};
00256   virtual   void draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3) {};
00258   virtual   void draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1) {};
00259   // Image classes
00265   virtual   void draw(Fl_RGB_Image * rgb,int XP, int YP, int WP, int HP, int cx, int cy) {};
00271   virtual   void draw(Fl_Pixmap * pxm,int XP, int YP, int WP, int HP, int cx, int cy) {};
00277   virtual void draw(Fl_Bitmap *bm, int XP, int YP, int WP, int HP, int cx, int cy) {};
00278     
00279 public:
00280   static const char *class_id;
00282   virtual ~Fl_Graphics_Driver() {};
00283 };
00284 
00285 #if defined(__APPLE__) || defined(FL_DOXYGEN)
00286 
00291 class FL_EXPORT Fl_Quartz_Graphics_Driver : public Fl_Graphics_Driver {
00292 public:
00294   Fl_Quartz_Graphics_Driver() { class_name( class_id); };
00295   static const char *class_id;
00296   void color(Fl_Color c);
00297   void color(uchar r, uchar g, uchar b);
00298   void draw(const char* str, int n, int x, int y);
00299   void draw(int angle, const char *str, int n, int x, int y);
00300   void rtl_draw(const char* str, int n, int x, int y);
00301   void font(Fl_Font face, Fl_Fontsize size);
00302   void draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
00303   void draw(Fl_Bitmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
00304   void draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int cx, int cy);
00305   void draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0);
00306   void draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3);
00307   void draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0);
00308   void draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1);
00309 };
00310 #endif
00311 #if defined(WIN32) || defined(FL_DOXYGEN)
00312 
00317 class FL_EXPORT Fl_GDI_Graphics_Driver : public Fl_Graphics_Driver {
00318 public:
00320   Fl_GDI_Graphics_Driver() { class_name ( class_id); };
00321   static const char *class_id;
00322   void color(Fl_Color c);
00323   void color(uchar r, uchar g, uchar b);
00324   void draw(const char* str, int n, int x, int y);
00325   void draw(int angle, const char *str, int n, int x, int y);
00326   void rtl_draw(const char* str, int n, int x, int y);
00327   void font(Fl_Font face, Fl_Fontsize size);
00328   void draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
00329   void draw(Fl_Bitmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
00330   void draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int cx, int cy);
00331   void draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0);
00332   void draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3);
00333   void draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0);
00334   void draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1);
00335 };
00336 #endif
00337 #if !(defined(__APPLE__) || defined(WIN32))
00338 
00343 class Fl_Xlib_Graphics_Driver : public Fl_Graphics_Driver {
00344 public:
00346   Fl_Xlib_Graphics_Driver() { class_name ( class_id); };
00347   static const char *class_id;
00348   void color(Fl_Color c);
00349   void color(uchar r, uchar g, uchar b);
00350   void draw(const char* str, int n, int x, int y);
00351   void draw(int angle, const char *str, int n, int x, int y);
00352   void rtl_draw(const char* str, int n, int x, int y);
00353   void font(Fl_Font face, Fl_Fontsize size);
00354   void draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
00355   void draw(Fl_Bitmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
00356   void draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int cx, int cy);
00357   void draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0);
00358   void draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3);
00359   void draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0);
00360   void draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1);
00361 };
00362 #endif
00363 
00367 class FL_EXPORT Fl_Surface_Device : public Fl_Device {
00369   Fl_Graphics_Driver *_driver;
00370 protected:
00372   Fl_Surface_Device(Fl_Graphics_Driver *graphics_driver) {_driver = graphics_driver; };
00373 public:
00374   static const char *class_id;
00375   virtual void set_current(void);
00377   inline void driver(Fl_Graphics_Driver *graphics_driver) {_driver = graphics_driver;};
00379   inline Fl_Graphics_Driver *driver() {return _driver; };
00381   static Fl_Surface_Device *surface() {return fl_surface; }; 
00383   virtual ~Fl_Surface_Device() {}
00384 };
00385 
00389 class FL_EXPORT Fl_Display_Device : public Fl_Surface_Device {
00390 public:
00391   static const char *class_id;
00393   Fl_Display_Device(Fl_Graphics_Driver *graphics_driver) : Fl_Surface_Device( graphics_driver) { class_name( class_id); };
00397   static Fl_Display_Device *display_device() { return fl_display_device; };
00398 };
00399 
00405 class FL_EXPORT Fl_Device_Plugin : public Fl_Plugin {
00406 public:
00408   Fl_Device_Plugin(const char *name)
00409   : Fl_Plugin(klass(), name) { }
00411   virtual const char *klass() { return "fltk:device"; }
00413   virtual const char *name() = 0;
00419   virtual int print(Fl_Widget* w, int x, int y, int height) { return 0; }
00420 };
00421 
00422 #endif // Fl_Device_H
00423 
00424 //
00425 // End of "$Id: Fl_Device.H 8190 2011-01-05 10:21:45Z manolo $".
00426 //