28#ifndef FL_GRAPHICS_DRIVER_H
29#define FL_GRAPHICS_DRIVER_H
33#include <FL/Fl_Bitmap.H>
34#include <FL/Fl_Pixmap.H>
35#include <FL/Fl_RGB_Image.H>
37class Fl_Graphics_Driver;
38class Fl_Font_Descriptor;
50typedef void (*Fl_Draw_Image_Cb)(
void* data,
int x,
int y,
int w,
uchar* buf);
53typedef struct _PangoFontDescription PangoFontDescription;
55#define FL_REGION_STACK_SIZE 10
56#define FL_MATRIX_STACK_SIZE 32
76class FL_EXPORT Fl_Graphics_Driver {
84 friend void fl_draw_image_mono(Fl_Draw_Image_Cb cb,
void* data,
int X,
int Y,
int W,
int H,
int D);
85 friend void fl_draw_image(Fl_Draw_Image_Cb cb,
void* data,
int X,
int Y,
int W,
int H,
int D);
87 friend int fl_convert_pixmap(
const char*
const* cdata,
uchar* out,
Fl_Color bg);
133 virtual void draw_fixed(
Fl_Pixmap *pxm,
int XP,
int YP,
int WP,
int HP,
int cx,
int cy);
134 virtual void draw_fixed(
Fl_Bitmap *bm,
int XP,
int YP,
int WP,
int HP,
int cx,
int cy);
135 virtual void draw_fixed(
Fl_RGB_Image *rgb,
int XP,
int YP,
int WP,
int HP,
int cx,
int cy);
137 virtual void make_unused_color_(
unsigned char &r,
unsigned char &g,
unsigned char &b,
int color_count,
void **data);
139 virtual void set_current_();
143 static Fl_Graphics_Driver *newMainGraphicsDriver();
145 struct matrix {
double a, b, c, d, x, y;};
153 int fl_clip_state_number;
154 static const matrix m0;
159 static const int matrix_stack_size = FL_MATRIX_STACK_SIZE;
160 matrix stack[FL_MATRIX_STACK_SIZE];
164 enum SHAPE {NONE=0, LINE, LOOP, POLYGON, POINTS, COMPLEX_POLYGON} what;
166 static const int region_stack_max = FL_REGION_STACK_SIZE - 1;
168 Fl_Font_Descriptor *font_descriptor_;
170 typedef struct {
float x;
float y; } XPOINT;
172 virtual void global_gc();
178 virtual void draw_image(
const uchar* buf,
int X,
int Y,
int W,
int H,
int D=3,
int L=0);
179 virtual void draw_image_mono(
const uchar* buf,
int X,
int Y,
int W,
int H,
int D=1,
int L=0);
180 virtual void draw_image(Fl_Draw_Image_Cb cb,
void* data,
int X,
int Y,
int W,
int H,
int D=3);
181 virtual void draw_image_mono(Fl_Draw_Image_Cb cb,
void* data,
int X,
int Y,
int W,
int H,
int D=1);
182 virtual void draw_rgb(
Fl_RGB_Image * rgb,
int XP,
int YP,
int WP,
int HP,
int cx,
int cy);
183 virtual void draw_pixmap(
Fl_Pixmap * pxm,
int XP,
int YP,
int WP,
int HP,
int cx,
int cy);
184 virtual void draw_bitmap(
Fl_Bitmap *bm,
int XP,
int YP,
int WP,
int HP,
int cx,
int cy);
185 virtual void copy_offscreen(
int x,
int y,
int w,
int h,
Fl_Offscreen pixmap,
int srcx,
int srcy);
188 static void change_image_size(
Fl_Image *img,
int W,
int H) {
195 int start_image(
Fl_Image *img,
int XP,
int YP,
int WP,
int HP,
int &cx,
int &cy,
196 int &X,
int &Y,
int &W,
int &H);
208 static void cache_w_h(
Fl_Pixmap *pm,
int*& pwidth,
int*& pheight) {
209 pwidth = &(pm->cache_w_);
210 pheight = &(pm->cache_h_);
213 static void cache_w_h(
Fl_Bitmap *bm,
int*& pwidth,
int*& pheight) {
214 pwidth = &(bm->cache_w_);
215 pheight = &(bm->cache_h_);
218 static void cache_w_h(
Fl_RGB_Image *rgb,
int*& pwidth,
int*& pheight) {
219 pwidth = &(rgb->cache_w_);
220 pheight = &(rgb->cache_h_);
226 Fl_Graphics_Driver();
227 virtual void cache_size(
Fl_Image *img,
int &width,
int &height);
228 void cache_size_finalize(
Fl_Image *img,
int &width,
int &height);
229 static unsigned need_pixmap_bg_color;
231 virtual ~Fl_Graphics_Driver();
232 static Fl_Graphics_Driver &default_driver();
236 void load_identity();
237 void load_matrix(
double a,
double b,
double c,
double d,
double x,
double y);
238 void mult_matrix(
double a,
double b,
double c,
double d,
double x,
double y);
239 void rotate(
double d);
240 void translate(
double x,
double y);
241 double transform_x(
double x,
double y);
242 double transform_y(
double x,
double y);
243 double transform_dx(
double x,
double y);
244 double transform_dy(
double x,
double y);
246 inline Fl_Font_Descriptor *font_descriptor() {
return font_descriptor_;}
248 inline void font_descriptor(Fl_Font_Descriptor *d) { font_descriptor_ = d;}
250 float scale() {
return scale_; }
252 virtual void scale(
float f);
254 virtual char can_do_alpha_blending();
255 virtual void point(
int x,
int y);
256 virtual void rect(
int x,
int y,
int w,
int h);
257 virtual void focus_rect(
int x,
int y,
int w,
int h);
258 virtual void rectf(
int x,
int y,
int w,
int h);
259 virtual void _rbox(
int fill,
int x,
int y,
int w,
int h,
int r);
260 virtual void rounded_rect(
int x,
int y,
int w,
int h,
int r);
261 virtual void rounded_rectf(
int x,
int y,
int w,
int h,
int r);
263 virtual void colored_rectf(
int x,
int y,
int w,
int h,
uchar r,
uchar g,
uchar b);
264 virtual void line(
int x,
int y,
int x1,
int y1);
266 virtual void line(
int x,
int y,
int x1,
int y1,
int x2,
int y2);
268 virtual void xyline(
int x,
int y,
int x1);
270 virtual void xyline(
int x,
int y,
int x1,
int y2);
272 virtual void xyline(
int x,
int y,
int x1,
int y2,
int x3);
274 virtual void yxline(
int x,
int y,
int y1);
276 virtual void yxline(
int x,
int y,
int y1,
int x2);
278 virtual void yxline(
int x,
int y,
int y1,
int x2,
int y3);
280 virtual void loop(
int x0,
int y0,
int x1,
int y1,
int x2,
int y2);
282 virtual void loop(
int x0,
int y0,
int x1,
int y1,
int x2,
int y2,
int x3,
int y3);
283 virtual void polygon(
int x0,
int y0,
int x1,
int y1,
int x2,
int y2);
285 virtual void polygon(
int x0,
int y0,
int x1,
int y1,
int x2,
int y2,
int x3,
int y3);
287 virtual void push_clip(
int x,
int y,
int w,
int h);
288 virtual int clip_box(
int x,
int y,
int w,
int h,
int &X,
int &Y,
int &W,
int &H);
289 virtual int not_clipped(
int x,
int y,
int w,
int h);
291 virtual void push_no_clip();
293 virtual void pop_clip();
296 virtual void restore_clip();
297 virtual void begin_points();
298 virtual void begin_line();
299 virtual void begin_loop();
300 virtual void begin_polygon();
301 virtual void begin_complex_polygon();
302 virtual void transformed_vertex(
double xf,
double yf);
303 virtual void transformed_vertex0(
float x,
float y);
304 virtual void vertex(
double x,
double y);
305 virtual void end_points();
306 virtual void end_line();
307 virtual void end_loop();
308 virtual void fixloop();
309 virtual void end_polygon();
310 virtual void end_complex_polygon();
312 virtual bool can_fill_non_convex_polygon() {
return true; }
314 virtual void circle(
double x,
double y,
double r);
315 virtual void arc(
double x,
double y,
double r,
double start,
double end);
316 virtual void arc(
int x,
int y,
int w,
int h,
double a1,
double a2);
317 virtual void pie(
int x,
int y,
int w,
int h,
double a1,
double a2);
320 virtual void draw_circle(
int x,
int y,
int d,
Fl_Color c);
321 virtual void curve(
double X0,
double Y0,
double X1,
double Y1,
double X2,
double Y2,
double X3,
double Y3);
322 virtual void line_style(
int style,
int width=0,
char* dashes=0);
324 virtual void set_color(
Fl_Color i,
unsigned int c);
325 virtual void free_color(
Fl_Color i,
int overlay);
328 virtual void draw(
const char *str,
int nChars,
int x,
int y);
329 virtual void draw(
const char *str,
int nChars,
float x,
float y);
330 virtual void draw(
int angle,
const char *str,
int nChars,
int x,
int y);
331 virtual void rtl_draw(
const char *str,
int nChars,
int x,
int y);
332 virtual int has_feature(driver_feature feature);
336 virtual double width(
const char *str,
int nChars);
337 virtual double width(
unsigned int c);
338 virtual void text_extents(
const char*,
int n,
int& dx,
int& dy,
int& w,
int& h);
339 virtual int height();
340 virtual int descent();
341 virtual void gc(
void*);
342 virtual void *gc(
void);
343 virtual uchar **mask_bitmap();
345 virtual float scale_font_for_PostScript(Fl_Font_Descriptor *desc,
int s);
347 virtual float scale_bitmap_for_PostScript();
349 virtual void add_rectangle_to_region(
Fl_Region r,
int x,
int y,
int w,
int h);
350 virtual Fl_Region XRectangleRegion(
int x,
int y,
int w,
int h);
351 virtual void XDestroyRegion(
Fl_Region r);
352 virtual const char* get_font_name(
Fl_Font fnum,
int* ap);
353 virtual int get_font_sizes(
Fl_Font fnum,
int*& sizep);
354 virtual Fl_Font set_fonts(
const char *name);
355 virtual Fl_Fontdesc* calc_fl_fonts(
void);
356 virtual unsigned font_desc_size();
357 virtual const char *font_name(
int num);
358 virtual void font_name(
int num,
const char *name);
360 virtual void overlay_rect(
int x,
int y,
int w ,
int h);
361 virtual float override_scale();
362 virtual void restore_scale(
float);
363 virtual PangoFontDescription* pango_font_description() {
return NULL; }
364 virtual void antialias(
int state);
365 virtual int antialias();
379class Fl_Font_Descriptor {
382 Fl_Font_Descriptor *next;
384 Fl_Font_Descriptor(
const char* fontname,
Fl_Fontsize size);
385 virtual FL_EXPORT ~Fl_Font_Descriptor() {}
387 unsigned int listbase;
394 Fl_Font_Descriptor *first;
412class FL_EXPORT Fl_Scalable_Graphics_Driver :
public Fl_Graphics_Driver {
414 Fl_Scalable_Graphics_Driver();
418 static inline int floor(
int x,
float s) {
return int(x * s + 0.001f); }
419 inline int floor(
int x) {
return Fl_Scalable_Graphics_Driver::floor(x, scale()); }
425 virtual void point_unscaled(
float x,
float y);
427 void rectf(
int x,
int y,
int w,
int h)
FL_OVERRIDE;
428 virtual void rectf_unscaled(
int x,
int y,
int w,
int h);
429 void line(
int x,
int y,
int x1,
int y1)
FL_OVERRIDE;
430 virtual void line_unscaled(
int x,
int y,
int x1,
int y1);
431 void line(
int x,
int y,
int x1,
int y1,
int x2,
int y2)
FL_OVERRIDE;
432 virtual void line_unscaled(
int x,
int y,
int x1,
int y1,
int x2,
int y2);
434 virtual void xyline_unscaled(
int x,
int y,
int x1);
435 void xyline(
int x,
int y,
int x1,
int y2)
FL_OVERRIDE {Fl_Graphics_Driver::xyline(x, y, x1, y2);}
436 void xyline(
int x,
int y,
int x1,
int y2,
int x3)
FL_OVERRIDE {Fl_Graphics_Driver::xyline(x, y, x1, y2, x3);}
438 virtual void yxline_unscaled(
int x,
int y,
int y1);
439 void yxline(
int x,
int y,
int y1,
int x2)
FL_OVERRIDE {Fl_Graphics_Driver::yxline(x, y, y1, x2);}
440 void yxline(
int x,
int y,
int y1,
int x2,
int y3)
FL_OVERRIDE {Fl_Graphics_Driver::yxline(x, y, y1, x2, y3);}
441 void loop(
int x0,
int y0,
int x1,
int y1,
int x2,
int y2)
FL_OVERRIDE;
442 virtual void loop_unscaled(
int x0,
int y0,
int x1,
int y1,
int x2,
int y2);
443 void loop(
int x0,
int y0,
int x1,
int y1,
int x2,
int y2,
int x3,
int y3)
FL_OVERRIDE;
444 virtual void loop_unscaled(
int x0,
int y0,
int x1,
int y1,
int x2,
int y2,
int x3,
int y3);
445 void polygon(
int x0,
int y0,
int x1,
int y1,
int x2,
int y2)
FL_OVERRIDE;
446 virtual void polygon_unscaled(
int x0,
int y0,
int x1,
int y1,
int x2,
int y2);
447 void polygon(
int x0,
int y0,
int x1,
int y1,
int x2,
int y2,
int x3,
int y3)
FL_OVERRIDE;
448 virtual void polygon_unscaled(
int x0,
int y0,
int x1,
int y1,
int x2,
int y2,
int x3,
int y3);
449 void circle(
double x,
double y,
double r)
FL_OVERRIDE;
450 virtual void ellipse_unscaled(
double xt,
double yt,
double rx,
double ry);
456 virtual
double width_unscaled(const
char *str,
int n);
457 virtual
double width_unscaled(
unsigned int c);
460 void text_extents(const
char *str,
int n,
int &dx,
int &dy,
int &w,
int &h)
FL_OVERRIDE;
461 virtual
void text_extents_unscaled(const
char *str,
int n,
int &dx,
int &dy,
int &w,
int &h);
464 virtual
int height_unscaled();
465 virtual
int descent_unscaled();
466 void draw(const
char *str,
int n,
int x,
int y)
FL_OVERRIDE;
467 virtual
void draw_unscaled(const
char *str,
int n,
int x,
int y);
468 void draw(
int angle, const
char *str,
int n,
int x,
int y)
FL_OVERRIDE;
469 virtual
void draw_unscaled(
int angle, const
char *str,
int n,
int x,
int y);
470 void draw(const
char *str,
int nChars,
float x,
float y)
FL_OVERRIDE;
471 void rtl_draw(const
char* str,
int n,
int x,
int y)
FL_OVERRIDE;
472 virtual
void rtl_draw_unscaled(const
char* str,
int n,
int x,
int y);
473 void arc(
double x,
double y,
double r,
double start,
double end)
FL_OVERRIDE;
474 void arc(
int x,
int y,
int w,
int h,
double a1,
double a2)
FL_OVERRIDE;
475 virtual
void arc_unscaled(
int x,
int y,
int w,
int h,
double a1,
double a2);
476 void pie(
int x,
int y,
int w,
int h,
double a1,
double a2)
FL_OVERRIDE;
477 virtual
void pie_unscaled(
int x,
int y,
int w,
int h,
double a1,
double a2);
479 void line_style(
int style,
int width=0,
char* dashes=0)
FL_OVERRIDE;
480 virtual
void line_style_unscaled(
int style,
int width,
char* dashes);
481 void draw_image_rescale(
void *buf, Fl_Draw_Image_Cb cb,
int X,
int Y,
int W,
int H,
int D,
int L,
bool mono);
482 virtual
void draw_image_unscaled(const
uchar* buf,
int X,
int Y,
int W,
int H,
int D=3,
int L=0);
483 virtual
void draw_image_unscaled(Fl_Draw_Image_Cb cb,
void* data,
int X,
int Y,
int W,
int H,
int D=3);
484 void draw_image(const
uchar* buf,
int X,
int Y,
int W,
int H,
int D=3,
int L=0)
FL_OVERRIDE;
485 void draw_image(Fl_Draw_Image_Cb cb,
void* data,
int X,
int Y,
int W,
int H,
int D=3)
FL_OVERRIDE;
486 virtual
void draw_image_mono_unscaled(const
uchar* buf,
int x,
int y,
int w,
int h,
int d,
int l);
487 void draw_image_mono(const
uchar* buf,
int X,
int Y,
int W,
int H,
int D=1,
int L=0)
FL_OVERRIDE;
488 virtual
void draw_image_mono_unscaled(Fl_Draw_Image_Cb cb,
void* data,
int X,
int Y,
int W,
int H,
int D=1);
489 void draw_image_mono(Fl_Draw_Image_Cb cb,
void* data,
int X,
int Y,
int W,
int H,
int D=1)
FL_OVERRIDE;
491 void transformed_vertex(
double xf,
double yf)
FL_OVERRIDE;
495 virtual
void *change_pen_width(
int lwidth);
496 virtual
void reset_pen_width(
void *data);
int Fl_Font
A font number is an index into the internal font table.
Definition Enumerations.H:1044
unsigned int Fl_Color
An FLTK color value; see also Colors
Definition Enumerations.H:1101
int Fl_Fontsize
Size of a font in pixels.
Definition Enumerations.H:1073
declaration of classes Fl_Surface_Device, Fl_Display_Device, Fl_Device_Plugin.
Fl_Graphics_Driver * fl_graphics_driver
Points to the driver that currently receives all graphics requests.
Definition Fl_Graphics_Driver.cxx:23
Fl_Image, Fl_RGB_Image classes.
The Fl_Bitmap class supports caching and drawing of mono-color (bitmap) images.
Definition Fl_Bitmap.H:32
Directs all graphics requests to an Fl_Image.
Definition Fl_Image_Surface.H:65
Base class for image caching, scaling and drawing.
Definition Fl_Image.H:60
void h(int H)
Sets the height of the image data.
Definition Fl_Image.H:93
void w(int W)
Sets the width of the image data.
Definition Fl_Image.H:87
void draw_empty(int X, int Y)
The protected method draw_empty() draws a box with an X in it.
Definition Fl_Image.cxx:71
The Fl_Pixmap class supports caching and drawing of colormap (pixmap) images, including transparency.
Definition Fl_Pixmap.H:36
The Fl_RGB_Image class supports caching and drawing of full-color images with 1 to 4 channels of colo...
Definition Fl_Image.H:339
The Fl_SVG_Image class supports loading, caching and drawing of scalable vector graphics (SVG) images...
Definition Fl_SVG_Image.H:135
A drawing surface that's susceptible to receive graphical output.
Definition Fl_Device.H:66
#define FL_OVERRIDE
This macro makes it safe to use the C++11 keyword override with older compilers.
Definition fl_attr.h:46
unsigned char uchar
unsigned char
Definition fl_types.h:30
void gl_start()
Creates an OpenGL context.
Definition gl_start.cxx:58
void fl_copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy)
Copy a rectangular area of the given offscreen buffer into the current drawing destination.
Definition fl_draw.H:769
void fl_draw_image(const uchar *buf, int X, int Y, int W, int H, int D=3, int L=0)
Draw an 8-bit per color RGB or luminance image.
Definition fl_draw.H:1026
void fl_draw_image_mono(const uchar *buf, int X, int Y, int W, int H, int D=1, int L=0)
Draw a gray-scale (1 channel) image.
Definition fl_draw.H:1034