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/x.H>
00037 #include <FL/Fl_Plugin.H>
00038 #include <FL/Fl_Image.H>
00039 #include <FL/Fl_Bitmap.H>
00040 #include <FL/Fl_Pixmap.H>
00041 #include <FL/Fl_RGB_Image.H>
00042 #ifdef WIN32
00043 #include <commdlg.h>
00044 #elif defined(__APPLE__)
00045 #else
00046 #include <stdio.h>
00047 #endif
00048
00049 class Fl_Graphics_Driver;
00050 class Fl_Display_Device;
00051 class Fl_Surface_Device;
00053 FL_EXPORT extern Fl_Graphics_Driver *fl_graphics_driver;
00055 FL_EXPORT extern Fl_Surface_Device *fl_surface;
00057 FL_EXPORT extern Fl_Display_Device *fl_display_device;
00058
00067 typedef void (*Fl_Draw_Image_Cb)(void* data,int x,int y,int w,uchar* buf);
00068
00072 class FL_EXPORT Fl_Device {
00073 protected:
00075 const char *type_;
00080 static const char *device_type;
00081 public:
00090 inline const char *type() {return type_;};
00091 };
00092
00101 class FL_EXPORT Fl_Graphics_Driver : public Fl_Device {
00102 protected:
00103
00104
00105
00106
00107
00108
00109 friend class Fl_Pixmap;
00110 friend class Fl_Bitmap;
00111 friend class Fl_RGB_Image;
00112 friend class Fl_PostScript_Graphics_Driver;
00113 friend void fl_rect(int x, int y, int w, int h);
00114 friend void fl_rectf(int x, int y, int w, int h);
00115 friend void fl_line_style(int style, int width, char* dashes);
00116 friend void fl_xyline(int x, int y, int x1);
00117 friend void fl_xyline(int x, int y, int x1, int y2);
00118 friend void fl_xyline(int x, int y, int x1, int y2, int x3);
00119 friend void fl_yxline(int x, int y, int y1);
00120 friend void fl_yxline(int x, int y, int y1, int x2);
00121 friend void fl_yxline(int x, int y, int y1, int x2, int y3);
00122 friend void fl_line(int x, int y, int x1, int y1);
00123 friend void fl_line(int x, int y, int x1, int y1, int x2, int y2);
00124 friend void fl_draw(const char *str, int n, int x, int y);
00125 #ifdef __APPLE__
00126 friend void fl_draw(const char *str, int n, float x, float y);
00127 #endif
00128 friend void fl_draw(int angle, const char *str, int n, int x, int y);
00129 friend void fl_rtl_draw(const char *str, int n, int x, int y);
00130 friend void fl_font(Fl_Font face, Fl_Fontsize size);
00131 friend void fl_color(Fl_Color c);
00132 friend void fl_color(uchar r, uchar g, uchar b);
00133 friend void fl_point(int x, int y);
00134 friend void fl_loop(int x0, int y0, int x1, int y1, int x2, int y2);
00135 friend void fl_loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
00136 friend void fl_polygon(int x0, int y0, int x1, int y1, int x2, int y2);
00137 friend void fl_polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
00138 friend void fl_begin_points();
00139 friend void fl_begin_line();
00140 friend void fl_begin_loop();
00141 friend void fl_begin_polygon();
00142 friend void fl_vertex(double x, double y);
00143 friend void fl_curve(double X0, double Y0, double X1, double Y1, double X2, double Y2, double X3, double Y3);
00144 friend void fl_circle(double x, double y, double r);
00145 friend void fl_arc(double x, double y, double r, double start, double end);
00146 friend void fl_arc(int x, int y, int w, int h, double a1, double a2);
00147 friend void fl_pie(int x, int y, int w, int h, double a1, double a2);
00148 friend void fl_end_points();
00149 friend void fl_end_line();
00150 friend void fl_end_loop();
00151 friend void fl_end_polygon();
00152 friend void fl_transformed_vertex(double xf, double yf);
00153 friend void fl_push_clip(int x, int y, int w, int h);
00154 friend int fl_clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H);
00155 friend int fl_not_clipped(int x, int y, int w, int h);
00156 friend void fl_push_no_clip();
00157 friend void fl_pop_clip();
00158 friend void fl_begin_complex_polygon();
00159 friend void fl_gap();
00160 friend void fl_end_complex_polygon();
00161 friend void fl_draw_image(const uchar* buf, int X,int Y,int W,int H, int D, int L);
00162 friend void fl_draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D, int L);
00163 friend void fl_draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D);
00164 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);
00165
00167 Fl_Graphics_Driver() {};
00169 virtual void rect(int x, int y, int w, int h);
00171 virtual void rectf(int x, int y, int w, int h);
00173 virtual void line_style(int style, int width=0, char* dashes=0);
00175 virtual void xyline(int x, int y, int x1);
00177 virtual void xyline(int x, int y, int x1, int y2);
00179 virtual void xyline(int x, int y, int x1, int y2, int x3);
00181 virtual void yxline(int x, int y, int y1);
00183 virtual void yxline(int x, int y, int y1, int x2);
00185 virtual void yxline(int x, int y, int y1, int x2, int y3);
00187 virtual void line(int x, int y, int x1, int y1);
00189 virtual void line(int x, int y, int x1, int y1, int x2, int y2);
00191 virtual void draw(const char *str, int n, int x, int y);
00193 virtual void draw(int angle, const char *str, int n, int x, int y);
00195 virtual void rtl_draw(const char *str, int n, int x, int y);
00197 virtual void font(Fl_Font face, Fl_Fontsize size);
00199 virtual void color(Fl_Color c);
00201 virtual void color(uchar r, uchar g, uchar b);
00203 virtual void point(int x, int y);
00205 virtual void loop(int x0, int y0, int x1, int y1, int x2, int y2);
00207 virtual void loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
00209 virtual void polygon(int x0, int y0, int x1, int y1, int x2, int y2);
00211 virtual void polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
00213 virtual void begin_points();
00215 virtual void begin_line();
00217 virtual void begin_loop();
00219 virtual void begin_polygon();
00221 virtual void vertex(double x, double y);
00223 virtual void curve(double X0, double Y0, double X1, double Y1, double X2, double Y2, double X3, double Y3);
00225 virtual void circle(double x, double y, double r);
00227 virtual void arc(double x, double y, double r, double start, double end);
00229 virtual void arc(int x, int y, int w, int h, double a1, double a2);
00231 virtual void pie(int x, int y, int w, int h, double a1, double a2);
00233 virtual void end_points();
00235 virtual void end_line();
00237 virtual void end_loop();
00239 virtual void end_polygon();
00241 virtual void begin_complex_polygon();
00243 virtual void gap();
00245 virtual void end_complex_polygon();
00247 virtual void transformed_vertex(double xf, double yf);
00249 virtual void push_clip(int x, int y, int w, int h);
00251 virtual int clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H);
00253 virtual int not_clipped(int x, int y, int w, int h);
00255 virtual void push_no_clip();
00257 virtual void pop_clip();
00258
00260 virtual void draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0);
00262 virtual void draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0);
00264 virtual void draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3);
00266 virtual void draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1);
00267
00273 virtual void draw(Fl_RGB_Image * rgb,int XP, int YP, int WP, int HP, int cx, int cy) {};
00279 virtual void draw(Fl_Pixmap * pxm,int XP, int YP, int WP, int HP, int cx, int cy) {};
00285 virtual void draw(Fl_Bitmap *bm, int XP, int YP, int WP, int HP, int cx, int cy) {};
00286
00287 public:
00288 static const char *device_type;
00290 virtual ~Fl_Graphics_Driver() {};
00291 };
00292
00293 #if defined(__APPLE__) || defined(FL_DOXYGEN)
00294
00299 class FL_EXPORT Fl_Quartz_Graphics_Driver : public Fl_Graphics_Driver {
00300 public:
00302 Fl_Quartz_Graphics_Driver() { type_ = device_type; };
00303 static const char *device_type;
00304 void draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
00305 void draw(Fl_Bitmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
00306 void draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int cx, int cy);
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 draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
00321 void draw(Fl_Bitmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
00322 void draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int cx, int cy);
00323 };
00324 #endif
00325 #if !(defined(__APPLE__) || defined(WIN32))
00326
00331 class Fl_Xlib_Graphics_Driver : public Fl_Graphics_Driver {
00332 public:
00334 Fl_Xlib_Graphics_Driver() { type_ = device_type; };
00335 static const char *device_type;
00336 void draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
00337 void draw(Fl_Bitmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
00338 void draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int cx, int cy);
00339 };
00340 #endif
00341
00345 class FL_EXPORT Fl_Surface_Device : public Fl_Device {
00347 Fl_Graphics_Driver *_driver;
00348 protected:
00350 Fl_Surface_Device(Fl_Graphics_Driver *graphics_driver) {_driver = graphics_driver; };
00351 public:
00352 static const char *device_type;
00353 virtual void set_current(void);
00355 inline void driver(Fl_Graphics_Driver *graphics_driver) {_driver = graphics_driver;};
00357 inline Fl_Graphics_Driver *driver() {return _driver; };
00359 static Fl_Surface_Device *surface() {return fl_surface; };
00361 virtual ~Fl_Surface_Device() {}
00362 };
00363
00367 class FL_EXPORT Fl_Display_Device : public Fl_Surface_Device {
00368 public:
00369 static const char *device_type;
00371 Fl_Display_Device(Fl_Graphics_Driver *graphics_driver) : Fl_Surface_Device( graphics_driver) { type_ = device_type; };
00375 static Fl_Display_Device *display_device() { return fl_display_device; };
00376 };
00377
00383 class FL_EXPORT Fl_Device_Plugin : public Fl_Plugin {
00384 public:
00386 Fl_Device_Plugin(const char *name)
00387 : Fl_Plugin(klass(), name) { }
00389 virtual const char *klass() { return "fltk:device"; }
00391 virtual const char *name() = 0;
00397 virtual int print(Fl_Widget* w, int x, int y, int height) { return 0; }
00398 };
00399
00400 #endif // Fl_Device_H
00401
00402
00403
00404