FLTK 1.3.x
|
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 //