00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
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 protected:
00068 const char *type_;
00073 static const char *device_type;
00074 public:
00083 inline const char *type() {return type_;};
00084 };
00085
00094 class FL_EXPORT Fl_Graphics_Driver : public Fl_Device {
00095 protected:
00096
00097
00098
00099
00100
00101
00102 friend class Fl_Pixmap;
00103 friend class Fl_Bitmap;
00104 friend class Fl_RGB_Image;
00105 friend class Fl_PostScript_Graphics_Driver;
00106 friend void fl_rect(int x, int y, int w, int h);
00107 friend void fl_rectf(int x, int y, int w, int h);
00108 friend void fl_line_style(int style, int width, char* dashes);
00109 friend void fl_xyline(int x, int y, int x1);
00110 friend void fl_xyline(int x, int y, int x1, int y2);
00111 friend void fl_xyline(int x, int y, int x1, int y2, int x3);
00112 friend void fl_yxline(int x, int y, int y1);
00113 friend void fl_yxline(int x, int y, int y1, int x2);
00114 friend void fl_yxline(int x, int y, int y1, int x2, int y3);
00115 friend void fl_line(int x, int y, int x1, int y1);
00116 friend void fl_line(int x, int y, int x1, int y1, int x2, int y2);
00117 friend void fl_draw(const char *str, int n, int x, int y);
00118 friend void fl_draw(int angle, const char *str, int n, int x, int y);
00119 friend void fl_rtl_draw(const char *str, int n, int x, int y);
00120 friend void fl_font(Fl_Font face, Fl_Fontsize size);
00121 friend void fl_color(Fl_Color c);
00122 friend void fl_color(uchar r, uchar g, uchar b);
00123 friend void fl_point(int x, int y);
00124 friend void fl_loop(int x0, int y0, int x1, int y1, int x2, int y2);
00125 friend void fl_loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
00126 friend void fl_polygon(int x0, int y0, int x1, int y1, int x2, int y2);
00127 friend void fl_polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
00128 friend void fl_begin_points();
00129 friend void fl_begin_line();
00130 friend void fl_begin_loop();
00131 friend void fl_begin_polygon();
00132 friend void fl_vertex(double x, double y);
00133 friend void fl_curve(double X0, double Y0, double X1, double Y1, double X2, double Y2, double X3, double Y3);
00134 friend void fl_circle(double x, double y, double r);
00135 friend void fl_arc(double x, double y, double r, double start, double end);
00136 friend void fl_arc(int x, int y, int w, int h, double a1, double a2);
00137 friend void fl_pie(int x, int y, int w, int h, double a1, double a2);
00138 friend void fl_end_points();
00139 friend void fl_end_line();
00140 friend void fl_end_loop();
00141 friend void fl_end_polygon();
00142 friend void fl_transformed_vertex(double xf, double yf);
00143 friend void fl_push_clip(int x, int y, int w, int h);
00144 friend int fl_clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H);
00145 friend int fl_not_clipped(int x, int y, int w, int h);
00146 friend void fl_push_no_clip();
00147 friend void fl_pop_clip();
00148 friend void fl_begin_complex_polygon();
00149 friend void fl_gap();
00150 friend void fl_end_complex_polygon();
00151 friend void fl_draw_image(const uchar* buf, int X,int Y,int W,int H, int D, int L);
00152 friend void fl_draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D, int L);
00153 friend void fl_draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D);
00154 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);
00155
00157 Fl_Graphics_Driver() {};
00159 virtual void rect(int x, int y, int w, int h);
00161 virtual void rectf(int x, int y, int w, int h);
00163 virtual void line_style(int style, int width=0, char* dashes=0);
00165 virtual void xyline(int x, int y, int x1);
00167 virtual void xyline(int x, int y, int x1, int y2);
00169 virtual void xyline(int x, int y, int x1, int y2, int x3);
00171 virtual void yxline(int x, int y, int y1);
00173 virtual void yxline(int x, int y, int y1, int x2);
00175 virtual void yxline(int x, int y, int y1, int x2, int y3);
00177 virtual void line(int x, int y, int x1, int y1);
00179 virtual void line(int x, int y, int x1, int y1, int x2, int y2);
00181 virtual void draw(const char *str, int n, int x, int y) {};
00183 virtual void draw(int angle, const char *str, int n, int x, int y) {};
00185 virtual void rtl_draw(const char *str, int n, int x, int y) {};
00187 virtual void font(Fl_Font face, Fl_Fontsize size) {};
00189 virtual void color(Fl_Color c) {};
00191 virtual void color(uchar r, uchar g, uchar b) {};
00193 virtual void point(int x, int y);
00195 virtual void loop(int x0, int y0, int x1, int y1, int x2, int y2);
00197 virtual void loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
00199 virtual void polygon(int x0, int y0, int x1, int y1, int x2, int y2);
00201 virtual void polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
00203 virtual void begin_points();
00205 virtual void begin_line();
00207 virtual void begin_loop();
00209 virtual void begin_polygon();
00211 virtual void vertex(double x, double y);
00213 virtual void curve(double X0, double Y0, double X1, double Y1, double X2, double Y2, double X3, double Y3);
00215 virtual void circle(double x, double y, double r);
00217 virtual void arc(double x, double y, double r, double start, double end);
00219 virtual void arc(int x, int y, int w, int h, double a1, double a2);
00221 virtual void pie(int x, int y, int w, int h, double a1, double a2);
00223 virtual void end_points();
00225 virtual void end_line();
00227 virtual void end_loop();
00229 virtual void end_polygon();
00231 virtual void begin_complex_polygon();
00233 virtual void gap();
00235 virtual void end_complex_polygon();
00237 virtual void transformed_vertex(double xf, double yf);
00239 virtual void push_clip(int x, int y, int w, int h);
00241 virtual int clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H);
00243 virtual int not_clipped(int x, int y, int w, int h);
00245 virtual void push_no_clip();
00247 virtual void pop_clip();
00248
00250 virtual void draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0) {};
00252 virtual void draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0) {};
00254 virtual void draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3) {};
00256 virtual void draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1) {};
00257
00263 virtual void draw(Fl_RGB_Image * rgb,int XP, int YP, int WP, int HP, int cx, int cy) {};
00269 virtual void draw(Fl_Pixmap * pxm,int XP, int YP, int WP, int HP, int cx, int cy) {};
00275 virtual void draw(Fl_Bitmap *bm, int XP, int YP, int WP, int HP, int cx, int cy) {};
00276
00277 public:
00278 static const char *device_type;
00280 virtual ~Fl_Graphics_Driver() {};
00281 };
00282
00283 #if defined(__APPLE__) || defined(FL_DOXYGEN)
00284
00289 class FL_EXPORT Fl_Quartz_Graphics_Driver : public Fl_Graphics_Driver {
00290 public:
00292 Fl_Quartz_Graphics_Driver() { type_ = device_type; };
00293 static const char *device_type;
00294 void color(Fl_Color c);
00295 void color(uchar r, uchar g, uchar b);
00296 void draw(const char* str, int n, int x, int y);
00297 void draw(int angle, const char *str, int n, int x, int y);
00298 void rtl_draw(const char* str, int n, int x, int y);
00299 void font(Fl_Font face, Fl_Fontsize size);
00300 void draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
00301 void draw(Fl_Bitmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
00302 void draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int cx, int cy);
00303 void draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0);
00304 void draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3);
00305 void draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0);
00306 void draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1);
00307 };
00308 #endif
00309 #if defined(WIN32) || defined(FL_DOXYGEN)
00310
00315 class FL_EXPORT Fl_GDI_Graphics_Driver : public Fl_Graphics_Driver {
00316 public:
00318 Fl_GDI_Graphics_Driver() { type_ = device_type; };
00319 static const char *device_type;
00320 void color(Fl_Color c);
00321 void color(uchar r, uchar g, uchar b);
00322 void draw(const char* str, int n, int x, int y);
00323 void draw(int angle, const char *str, int n, int x, int y);
00324 void rtl_draw(const char* str, int n, int x, int y);
00325 void font(Fl_Font face, Fl_Fontsize size);
00326 void draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
00327 void draw(Fl_Bitmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
00328 void draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int cx, int cy);
00329 void draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0);
00330 void draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3);
00331 void draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0);
00332 void draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1);
00333 };
00334 #endif
00335 #if !(defined(__APPLE__) || defined(WIN32))
00336
00341 class Fl_Xlib_Graphics_Driver : public Fl_Graphics_Driver {
00342 public:
00344 Fl_Xlib_Graphics_Driver() { type_ = device_type; };
00345 static const char *device_type;
00346 void color(Fl_Color c);
00347 void color(uchar r, uchar g, uchar b);
00348 void draw(const char* str, int n, int x, int y);
00349 void draw(int angle, const char *str, int n, int x, int y);
00350 void rtl_draw(const char* str, int n, int x, int y);
00351 void font(Fl_Font face, Fl_Fontsize size);
00352 void draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
00353 void draw(Fl_Bitmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
00354 void draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int cx, int cy);
00355 void draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0);
00356 void draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3);
00357 void draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0);
00358 void draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1);
00359 };
00360 #endif
00361
00365 class FL_EXPORT Fl_Surface_Device : public Fl_Device {
00367 Fl_Graphics_Driver *_driver;
00368 protected:
00370 Fl_Surface_Device(Fl_Graphics_Driver *graphics_driver) {_driver = graphics_driver; };
00371 public:
00372 static const char *device_type;
00373 virtual void set_current(void);
00375 inline void driver(Fl_Graphics_Driver *graphics_driver) {_driver = graphics_driver;};
00377 inline Fl_Graphics_Driver *driver() {return _driver; };
00379 static Fl_Surface_Device *surface() {return fl_surface; };
00381 virtual ~Fl_Surface_Device() {}
00382 };
00383
00387 class FL_EXPORT Fl_Display_Device : public Fl_Surface_Device {
00388 public:
00389 static const char *device_type;
00391 Fl_Display_Device(Fl_Graphics_Driver *graphics_driver) : Fl_Surface_Device( graphics_driver) { type_ = device_type; };
00395 static Fl_Display_Device *display_device() { return fl_display_device; };
00396 };
00397
00403 class FL_EXPORT Fl_Device_Plugin : public Fl_Plugin {
00404 public:
00406 Fl_Device_Plugin(const char *name)
00407 : Fl_Plugin(klass(), name) { }
00409 virtual const char *klass() { return "fltk:device"; }
00411 virtual const char *name() = 0;
00417 virtual int print(Fl_Widget* w, int x, int y, int height) { return 0; }
00418 };
00419
00420 #endif // Fl_Device_H
00421
00422
00423
00424