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;
60#if FL_ABI_VERSION >= 10401
61# define FL_REGION_STACK_SIZE 64
63# define FL_REGION_STACK_SIZE 10
66#define FL_MATRIX_STACK_SIZE 32
86class FL_EXPORT Fl_Graphics_Driver {
94 friend void fl_draw_image_mono(Fl_Draw_Image_Cb cb,
void* data,
int X,
int Y,
int W,
int H,
int D);
95 friend void fl_draw_image(Fl_Draw_Image_Cb cb,
void* data,
int X,
int Y,
int W,
int H,
int D);
97 friend int fl_convert_pixmap(
const char*
const* cdata,
uchar* out,
Fl_Color bg);
144 virtual void draw_fixed(
Fl_Pixmap *pxm,
int XP,
int YP,
int WP,
int HP,
int cx,
int cy);
145 virtual void draw_fixed(
Fl_Bitmap *bm,
int XP,
int YP,
int WP,
int HP,
int cx,
int cy);
146 virtual void draw_fixed(
Fl_RGB_Image *rgb,
int XP,
int YP,
int WP,
int HP,
int cx,
int cy);
148 virtual void make_unused_color_(
unsigned char &r,
unsigned char &g,
unsigned char &b,
int color_count,
void **data);
150 virtual void set_current_();
151 void draw_image_general_(
const uchar *buf,
int X,
int Y,
int W,
int H,
int D,
int L);
152 void draw_image_mono_general_(
const uchar *buf,
int X,
int Y,
int W,
int H,
int D,
int L);
156 static Fl_Graphics_Driver *newMainGraphicsDriver();
158 struct matrix {
double a, b, c, d, x, y;};
166 int fl_clip_state_number;
167 static const matrix m0;
172 static const int matrix_stack_size = FL_MATRIX_STACK_SIZE;
173 matrix stack[FL_MATRIX_STACK_SIZE];
177 enum SHAPE {NONE=0, LINE, LOOP, POLYGON, POINTS, COMPLEX_POLYGON} what;
179 static const int region_stack_max = FL_REGION_STACK_SIZE - 1;
181 Fl_Font_Descriptor *font_descriptor_;
183 typedef struct {
float x;
float y; } XPOINT;
185 virtual void global_gc();
191 virtual void draw_image(
const uchar* buf,
int X,
int Y,
int W,
int H,
int D=3,
int L=0);
192 virtual void draw_image_mono(
const uchar* buf,
int X,
int Y,
int W,
int H,
int D=1,
int L=0);
193 virtual void draw_image(Fl_Draw_Image_Cb cb,
void* data,
int X,
int Y,
int W,
int H,
int D=3);
194 virtual void draw_image_mono(Fl_Draw_Image_Cb cb,
void* data,
int X,
int Y,
int W,
int H,
int D=1);
195 virtual void draw_rgb(
Fl_RGB_Image * rgb,
int XP,
int YP,
int WP,
int HP,
int cx,
int cy);
196 virtual void draw_pixmap(
Fl_Pixmap * pxm,
int XP,
int YP,
int WP,
int HP,
int cx,
int cy);
197 virtual void draw_bitmap(
Fl_Bitmap *bm,
int XP,
int YP,
int WP,
int HP,
int cx,
int cy);
198 virtual void copy_offscreen(
int x,
int y,
int w,
int h,
Fl_Offscreen pixmap,
int srcx,
int srcy);
201 static void change_image_size(
Fl_Image *img,
int W,
int H) {
208 int start_image(
Fl_Image *img,
int XP,
int YP,
int WP,
int HP,
int &cx,
int &cy,
209 int &X,
int &Y,
int &W,
int &H);
221 static void cache_w_h(
Fl_Pixmap *pm,
int*& pwidth,
int*& pheight) {
222 pwidth = &(pm->cache_w_);
223 pheight = &(pm->cache_h_);
226 static void cache_w_h(
Fl_Bitmap *bm,
int*& pwidth,
int*& pheight) {
227 pwidth = &(bm->cache_w_);
228 pheight = &(bm->cache_h_);
231 static void cache_w_h(
Fl_RGB_Image *rgb,
int*& pwidth,
int*& pheight) {
232 pwidth = &(rgb->cache_w_);
233 pheight = &(rgb->cache_h_);
239 Fl_Graphics_Driver();
240 virtual void cache_size(
Fl_Image *img,
int &width,
int &height);
241 void cache_size_finalize(
Fl_Image *img,
int &width,
int &height);
242 static unsigned need_pixmap_bg_color;
244 virtual ~Fl_Graphics_Driver();
245 static Fl_Graphics_Driver &default_driver();
249 void load_identity();
250 void load_matrix(
double a,
double b,
double c,
double d,
double x,
double y);
251 void mult_matrix(
double a,
double b,
double c,
double d,
double x,
double y);
252 void rotate(
double d);
253 void translate(
double x,
double y);
254 double transform_x(
double x,
double y);
255 double transform_y(
double x,
double y);
256 double transform_dx(
double x,
double y);
257 double transform_dy(
double x,
double y);
259 inline Fl_Font_Descriptor *font_descriptor() {
return font_descriptor_;}
261 inline void font_descriptor(Fl_Font_Descriptor *d) { font_descriptor_ = d;}
263 float scale() {
return scale_; }
265 virtual void scale(
float f);
267 virtual char can_do_alpha_blending();
268 virtual void point(
int x,
int y);
269 virtual void rect(
int x,
int y,
int w,
int h);
270 virtual void focus_rect(
int x,
int y,
int w,
int h);
271 virtual void rectf(
int x,
int y,
int w,
int h);
272 virtual void _rbox(
int fill,
int x,
int y,
int w,
int h,
int r);
273 virtual void rounded_rect(
int x,
int y,
int w,
int h,
int r);
274 virtual void rounded_rectf(
int x,
int y,
int w,
int h,
int r);
276 virtual void colored_rectf(
int x,
int y,
int w,
int h,
uchar r,
uchar g,
uchar b);
277 virtual void line(
int x,
int y,
int x1,
int y1);
279 virtual void line(
int x,
int y,
int x1,
int y1,
int x2,
int y2);
281 virtual void xyline(
int x,
int y,
int x1);
283 virtual void xyline(
int x,
int y,
int x1,
int y2);
285 virtual void xyline(
int x,
int y,
int x1,
int y2,
int x3);
287 virtual void yxline(
int x,
int y,
int y1);
289 virtual void yxline(
int x,
int y,
int y1,
int x2);
291 virtual void yxline(
int x,
int y,
int y1,
int x2,
int y3);
293 virtual void loop(
int x0,
int y0,
int x1,
int y1,
int x2,
int y2);
295 virtual void loop(
int x0,
int y0,
int x1,
int y1,
int x2,
int y2,
int x3,
int y3);
296 virtual void polygon(
int x0,
int y0,
int x1,
int y1,
int x2,
int y2);
298 virtual void polygon(
int x0,
int y0,
int x1,
int y1,
int x2,
int y2,
int x3,
int y3);
300 virtual void push_clip(
int x,
int y,
int w,
int h);
301 virtual int clip_box(
int x,
int y,
int w,
int h,
int &X,
int &Y,
int &W,
int &H);
302 virtual int not_clipped(
int x,
int y,
int w,
int h);
304 virtual void push_no_clip();
306 virtual void pop_clip();
309 virtual void restore_clip();
310 virtual void begin_points();
311 virtual void begin_line();
312 virtual void begin_loop();
313 virtual void begin_polygon();
314 virtual void begin_complex_polygon();
315 virtual void transformed_vertex(
double xf,
double yf);
316 virtual void transformed_vertex0(
float x,
float y);
317 virtual void vertex(
double x,
double y);
318 virtual void end_points();
319 virtual void end_line();
320 virtual void end_loop();
321 virtual void fixloop();
322 virtual void end_polygon();
323 virtual void end_complex_polygon();
325 virtual bool can_fill_non_convex_polygon() {
return true; }
327 virtual void circle(
double x,
double y,
double r);
328 virtual void arc(
double x,
double y,
double r,
double start,
double end);
329 virtual void arc(
int x,
int y,
int w,
int h,
double a1,
double a2);
330 virtual void pie(
int x,
int y,
int w,
int h,
double a1,
double a2);
333 virtual void draw_circle(
int x,
int y,
int d,
Fl_Color c);
334 virtual void curve(
double X0,
double Y0,
double X1,
double Y1,
double X2,
double Y2,
double X3,
double Y3);
335 virtual void line_style(
int style,
int width=0,
char* dashes=0);
337 virtual void set_color(
Fl_Color i,
unsigned int c);
338 virtual void free_color(
Fl_Color i,
int overlay);
341 virtual void draw(
const char *str,
int nChars,
int x,
int y);
342 virtual void draw(
const char *str,
int nChars,
float x,
float y);
343 virtual void draw(
int angle,
const char *str,
int nChars,
int x,
int y);
344 virtual void rtl_draw(
const char *str,
int nChars,
int x,
int y);
345 virtual int has_feature(driver_feature feature);
349 virtual double width(
const char *str,
int nChars);
350 virtual double width(
unsigned int c);
351 virtual void text_extents(
const char*,
int n,
int& dx,
int& dy,
int& w,
int& h);
352 virtual int height();
353 virtual int descent();
354 virtual void gc(
void*);
355 virtual void *gc(
void);
356 virtual uchar **mask_bitmap();
358 virtual float scale_font_for_PostScript(Fl_Font_Descriptor *desc,
int s);
360 virtual float scale_bitmap_for_PostScript();
362 virtual void add_rectangle_to_region(
Fl_Region r,
int x,
int y,
int w,
int h);
363 virtual Fl_Region XRectangleRegion(
int x,
int y,
int w,
int h);
364 virtual void XDestroyRegion(
Fl_Region r);
365 virtual const char* get_font_name(
Fl_Font fnum,
int* ap);
366 virtual int get_font_sizes(
Fl_Font fnum,
int*& sizep);
367 virtual Fl_Font set_fonts(
const char *name);
368 virtual Fl_Fontdesc* calc_fl_fonts(
void);
369 virtual unsigned font_desc_size();
370 virtual const char *font_name(
int num);
371 virtual void font_name(
int num,
const char *name);
373 virtual void overlay_rect(
int x,
int y,
int w ,
int h);
374 virtual float override_scale();
375 virtual void restore_scale(
float);
376 virtual PangoFontDescription* pango_font_description() {
return NULL; }
377 virtual void antialias(
int state);
378 virtual int antialias();
392class Fl_Font_Descriptor {
395 Fl_Font_Descriptor *next;
397 Fl_Font_Descriptor(
const char* fontname,
Fl_Fontsize size);
398 virtual FL_EXPORT ~Fl_Font_Descriptor() {}
400 unsigned int listbase;
407 Fl_Font_Descriptor *first;
425class FL_EXPORT Fl_Scalable_Graphics_Driver :
public Fl_Graphics_Driver {
428 Fl_Scalable_Graphics_Driver();
429 static int floor(
int x,
float s);
430 inline int floor(
int x) {
return Fl_Scalable_Graphics_Driver::floor(x, scale()); }
437 virtual void point_unscaled(
float x,
float y);
439 void rectf(
int x,
int y,
int w,
int h)
FL_OVERRIDE;
440 virtual void rect_unscaled(
int x,
int y,
int w,
int h);
441 virtual void rectf_unscaled(
int x,
int y,
int w,
int h);
442 void line(
int x,
int y,
int x1,
int y1)
FL_OVERRIDE;
443 virtual void line_unscaled(
int x,
int y,
int x1,
int y1);
444 void line(
int x,
int y,
int x1,
int y1,
int x2,
int y2)
FL_OVERRIDE;
445 virtual void line_unscaled(
int x,
int y,
int x1,
int y1,
int x2,
int y2);
447 virtual void xyline_unscaled(
int x,
int y,
int x1);
448 void xyline(
int x,
int y,
int x1,
int y2)
FL_OVERRIDE {Fl_Graphics_Driver::xyline(x, y, x1, y2);}
449 void xyline(
int x,
int y,
int x1,
int y2,
int x3)
FL_OVERRIDE {Fl_Graphics_Driver::xyline(x, y, x1, y2, x3);}
451 virtual void yxline_unscaled(
int x,
int y,
int y1);
452 void yxline(
int x,
int y,
int y1,
int x2)
FL_OVERRIDE {Fl_Graphics_Driver::yxline(x, y, y1, x2);}
453 void yxline(
int x,
int y,
int y1,
int x2,
int y3)
FL_OVERRIDE {Fl_Graphics_Driver::yxline(x, y, y1, x2, y3);}
454 void loop(
int x0,
int y0,
int x1,
int y1,
int x2,
int y2)
FL_OVERRIDE;
455 virtual void loop_unscaled(
int x0,
int y0,
int x1,
int y1,
int x2,
int y2);
456 void loop(
int x0,
int y0,
int x1,
int y1,
int x2,
int y2,
int x3,
int y3)
FL_OVERRIDE;
457 virtual void loop_unscaled(
int x0,
int y0,
int x1,
int y1,
int x2,
int y2,
int x3,
int y3);
458 void polygon(
int x0,
int y0,
int x1,
int y1,
int x2,
int y2)
FL_OVERRIDE;
459 virtual void polygon_unscaled(
int x0,
int y0,
int x1,
int y1,
int x2,
int y2);
460 void polygon(
int x0,
int y0,
int x1,
int y1,
int x2,
int y2,
int x3,
int y3)
FL_OVERRIDE;
461 virtual void polygon_unscaled(
int x0,
int y0,
int x1,
int y1,
int x2,
int y2,
int x3,
int y3);
462 void circle(
double x,
double y,
double r)
FL_OVERRIDE;
463 virtual void ellipse_unscaled(
double xt,
double yt,
double rx,
double ry);
469 virtual
double width_unscaled(const
char *str,
int n);
470 virtual
double width_unscaled(
unsigned int c);
473 void text_extents(const
char *str,
int n,
int &dx,
int &dy,
int &w,
int &h)
FL_OVERRIDE;
474 virtual
void text_extents_unscaled(const
char *str,
int n,
int &dx,
int &dy,
int &w,
int &h);
477 virtual
int height_unscaled();
478 virtual
int descent_unscaled();
479 void draw(const
char *str,
int n,
int x,
int y)
FL_OVERRIDE;
480 virtual
void draw_unscaled(const
char *str,
int n,
int x,
int y);
481 void draw(
int angle, const
char *str,
int n,
int x,
int y)
FL_OVERRIDE;
482 virtual
void draw_unscaled(
int angle, const
char *str,
int n,
int x,
int y);
483 void draw(const
char *str,
int nChars,
float x,
float y)
FL_OVERRIDE;
484 void rtl_draw(const
char* str,
int n,
int x,
int y)
FL_OVERRIDE;
485 virtual
void rtl_draw_unscaled(const
char* str,
int n,
int x,
int y);
486 void arc(
double x,
double y,
double r,
double start,
double end)
FL_OVERRIDE;
487 void arc(
int x,
int y,
int w,
int h,
double a1,
double a2)
FL_OVERRIDE;
488 virtual
void arc_unscaled(
int x,
int y,
int w,
int h,
double a1,
double a2);
489 void pie(
int x,
int y,
int w,
int h,
double a1,
double a2)
FL_OVERRIDE;
490 virtual
void pie_unscaled(
int x,
int y,
int w,
int h,
double a1,
double a2);
492 void line_style(
int style,
int width=0,
char* dashes=0)
FL_OVERRIDE;
493 virtual
void line_style_unscaled(
int style,
int width,
char* dashes);
494 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);
495 virtual
void draw_image_unscaled(const
uchar* buf,
int X,
int Y,
int W,
int H,
int D=3,
int L=0);
496 virtual
void draw_image_unscaled(Fl_Draw_Image_Cb cb,
void* data,
int X,
int Y,
int W,
int H,
int D=3);
497 void draw_image(const
uchar* buf,
int X,
int Y,
int W,
int H,
int D=3,
int L=0)
FL_OVERRIDE;
498 void draw_image(Fl_Draw_Image_Cb cb,
void* data,
int X,
int Y,
int W,
int H,
int D=3)
FL_OVERRIDE;
499 virtual
void draw_image_mono_unscaled(const
uchar* buf,
int x,
int y,
int w,
int h,
int d,
int l);
500 void draw_image_mono(const
uchar* buf,
int X,
int Y,
int W,
int H,
int D=1,
int L=0)
FL_OVERRIDE;
501 virtual
void draw_image_mono_unscaled(Fl_Draw_Image_Cb cb,
void* data,
int X,
int Y,
int W,
int H,
int D=1);
502 void draw_image_mono(Fl_Draw_Image_Cb cb,
void* data,
int X,
int Y,
int W,
int H,
int D=1)
FL_OVERRIDE;
504 void transformed_vertex(
double xf,
double yf)
FL_OVERRIDE;
508 virtual
void *change_pen_width(
int lwidth);
509 virtual
void reset_pen_width(
void *data);
int Fl_Font
A font number is an index into the internal font table.
Definition Enumerations.H:1057
unsigned int Fl_Color
An FLTK color value; see also Colors
Definition Enumerations.H:1114
int Fl_Fontsize
Size of a font in pixels.
Definition Enumerations.H:1086
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:57
#define FL_OVERRIDE
This macro makes it safe to use the C++11 keyword override with older compilers.
Definition fl_attr.h:38
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:784
int fl_draw_pixmap(const char *const *data, int x, int y, Fl_Color bg=FL_GRAY)
Draw XPM image data, with the top-left corner at the given position.
Definition fl_draw_pixmap.cxx:184
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:1081
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:1089