summaryrefslogtreecommitdiff
path: root/src/drivers/PostScript/Fl_PostScript_Graphics_Driver.H
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers/PostScript/Fl_PostScript_Graphics_Driver.H')
-rw-r--r--src/drivers/PostScript/Fl_PostScript_Graphics_Driver.H231
1 files changed, 231 insertions, 0 deletions
diff --git a/src/drivers/PostScript/Fl_PostScript_Graphics_Driver.H b/src/drivers/PostScript/Fl_PostScript_Graphics_Driver.H
new file mode 100644
index 000000000..6491872bc
--- /dev/null
+++ b/src/drivers/PostScript/Fl_PostScript_Graphics_Driver.H
@@ -0,0 +1,231 @@
+//
+// Support for graphics output to PostScript file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 2010-2020 by Bill Spitzak and others.
+//
+// This library is free software. Distribution and use rights are outlined in
+// the file "COPYING" which should have been included with this file. If this
+// file is missing or damaged, see the license at:
+//
+// https://www.fltk.org/COPYING.php
+//
+// Please see the following page on how to report bugs and issues:
+//
+// https://www.fltk.org/bugs.php
+//
+
+/** \file Fl_Pango_PostScript_Graphics_Driver.H
+ Declaration of class Fl_PostScript_Graphics_Driver.
+*/
+
+#ifndef FL_POSTSCRIPT_GRAPHICS_DRIVER_H
+#define FL_POSTSCRIPT_GRAPHICS_DRIVER_H
+
+#include "../../config_lib.h"
+#include <FL/Fl_PostScript.H>
+
+#ifndef USE_PANGO
+#define USE_PANGO 0
+#endif
+
+#if USE_PANGO
+typedef struct _cairo_surface cairo_surface_t;
+typedef struct _cairo cairo_t;
+typedef struct _PangoLayout PangoLayout;
+#endif
+
+/**
+ \cond DriverDev
+ \addtogroup DriverDeveloper
+ \{
+ */
+
+/**
+ PostScript graphical backend.
+ */
+
+class FL_EXPORT Fl_PostScript_Graphics_Driver : public Fl_Graphics_Driver {
+private:
+#if USE_PANGO
+ cairo_t *cairo_;
+ PangoLayout *pango_layout_;
+ void draw_rgb_bitmap_(Fl_Image *img,int XP, int YP, int WP, int HP, int cx, int cy);
+#else
+ void transformed_draw_extra(const char* str, int n, double x, double y, int w, bool rtl);
+ void *prepare_rle85();
+ void write_rle85(uchar b, void *data);
+ void close_rle85(void *data);
+ void *prepare85();
+ void write85(void *data, const uchar *p, int len);
+ void close85(void *data);
+ int scale_for_image_(Fl_Image *img, int XP, int YP, int WP, int HP,int cx, int cy);
+#endif
+protected:
+ uchar **mask_bitmap() {return &mask;}
+public:
+ Fl_PostScript_Graphics_Driver();
+#ifndef FL_DOXYGEN
+ enum SHAPE{NONE=0, LINE, LOOP, POLYGON, POINTS};
+
+ class Clip {
+ public:
+ int x, y, w, h;
+ Clip *prev;
+ };
+ Clip * clip_;
+
+ int lang_level_;
+ int gap_;
+ int pages_;
+
+ int shape_;
+ int linewidth_;// need for clipping, lang level 1-2
+ int linestyle_;//
+ int interpolate_; //interpolation of images
+ unsigned char cr_,cg_,cb_;
+ char linedash_[256];//should be enough
+ void concat(); // transform ror scalable dradings...
+ void reconcat(); //invert
+ void recover(); //recovers the state after grestore (such as line styles...)
+ void reset();
+
+ uchar * mask;
+ int mx; // width of mask;
+ int my; // mask lines
+ Fl_PostScript_Close_Command close_cmd_;
+ int page_policy_;
+ int nPages;
+ int orientation_;
+
+ float scale_x;
+ float scale_y;
+ float angle;
+ int left_margin;
+ int top_margin;
+
+ FILE *output;
+ double pw_, ph_;
+
+ uchar bg_r, bg_g, bg_b;
+ int start_postscript (int pagecount, enum Fl_Paged_Device::Page_Format format, enum Fl_Paged_Device::Page_Layout layout);
+ int start_eps(int width, int height);
+ /* int alpha_mask(const uchar * data, int w, int h, int D, int LD=0);
+ */
+ void transformed_draw(const char* s, int n, double x, double y); //precise text placing
+ void transformed_draw(const char* s, double x, double y);
+ int alpha_mask(const uchar * data, int w, int h, int D, int LD=0);
+
+ enum Fl_Paged_Device::Page_Format page_format_;
+ char *ps_filename_;
+
+ void page_policy(int p);
+ int page_policy(){return page_policy_;};
+ void close_command(Fl_PostScript_Close_Command cmd){close_cmd_=cmd;};
+ FILE * file() {return output;};
+ //void orientation (int o);
+ //Fl_PostScript_Graphics_Driver(FILE *o, int lang_level, int pages = 0); // ps (also multi-page) constructor
+ void interpolate(int i){interpolate_=i;};
+ int interpolate(){return interpolate_;}
+
+ void page(double pw, double ph, int media = 0);
+ void page(int format);
+#endif // FL_DOXYGEN
+
+ // implementation of drawing methods
+ void color(Fl_Color c);
+ void color(uchar r, uchar g, uchar b);
+
+ void push_clip(int x, int y, int w, int h);
+ int clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H);
+ int not_clipped(int x, int y, int w, int h);
+ void push_no_clip();
+ void pop_clip();
+
+ void line_style(int style, int width=0, char* dashes=0);
+
+ void rect(int x, int y, int w, int h);
+ void rectf(int x, int y, int w, int h);
+
+ void xyline(int x, int y, int x1);
+ void xyline(int x, int y, int x1, int y2);
+ void xyline(int x, int y, int x1, int y2, int x3);
+
+ void yxline(int x, int y, int y1);
+ void yxline(int x, int y, int y1, int x2);
+ void yxline(int x, int y, int y1, int x2, int y3);
+
+ void line(int x1, int y1, int x2, int y2);
+ void line(int x1, int y1, int x2, int y2, int x3, int y3);
+
+ void loop(int x0, int y0, int x1, int y1, int x2, int y2);
+ void loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
+ void polygon(int x0, int y0, int x1, int y1, int x2, int y2);
+ void polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
+ void point(int x, int y);
+
+ void begin_points();
+ void begin_line();
+ void begin_loop();
+ void begin_polygon();
+ void vertex(double x, double y);
+ void curve(double x, double y, double x1, double y1, double x2, double y2, double x3, double y3);
+ void circle(double x, double y, double r);
+ void arc(double x, double y, double r, double start, double a);
+ void arc(int x, int y, int w, int h, double a1, double a2);
+ void pie(int x, int y, int w, int h, double a1, double a2);
+ void end_points();
+ void end_line();
+ void end_loop();
+ void end_polygon();
+ void begin_complex_polygon(){begin_polygon();};
+ void gap(){gap_=1;};
+ void end_complex_polygon(){end_polygon();};
+ void transformed_vertex(double x, double y);
+
+ void draw_image(const uchar* d, int x,int y,int w,int h, int delta=3, int ldelta=0);
+ void draw_image_mono(const uchar* d, int x,int y,int w,int h, int delta=1, int ld=0);
+ void draw_image(Fl_Draw_Image_Cb call, void* data, int x,int y, int w, int h, int delta=3);
+ void draw_image_mono(Fl_Draw_Image_Cb call, void* data, int x,int y, int w, int h, int delta=1);
+
+ void draw(const char* s, int nBytes, int x, int y) {transformed_draw(s,nBytes,x,y); };
+ void draw(const char* s, int nBytes, float x, float y) {transformed_draw(s,nBytes,x,y); };
+ void draw(int angle, const char *str, int n, int x, int y);
+ void rtl_draw(const char* s, int n, int x, int y);
+ void font(int face, int size);
+ double width(const char *, int);
+ double width(unsigned int u);
+ void text_extents(const char *c, int n, int &dx, int &dy, int &w, int &h);
+ int height();
+ int descent();
+ void draw_pixmap(Fl_Pixmap * pxm,int XP, int YP, int WP, int HP, int cx, int cy);
+ void draw_bitmap(Fl_Bitmap * bitmap,int XP, int YP, int WP, int HP, int cx, int cy);
+ void draw_rgb(Fl_RGB_Image * rgb,int XP, int YP, int WP, int HP, int cx, int cy);
+#if USE_PANGO
+ cairo_t *cr() { return cairo_; }
+ PangoLayout *pango_layout() {return pango_layout_;};
+ void check_status(void);
+#else
+ /** Shields output PostScript data from modifications of the current locale.
+ It typically avoids PostScript errors caused if the current locale uses comma instead of dot
+ as "decimal point".
+ \param format directives controlling output PostScript data
+ \return value returned by vfprintf() call
+ */
+ int clocale_printf(const char *format, ...);
+#endif
+ ~Fl_PostScript_Graphics_Driver();
+ // ---
+ Fl_Bitmask create_bitmask(int w, int h, const uchar *array) { return 0L; }
+ virtual int has_feature(driver_feature feature_mask) { return feature_mask & PRINTER; }
+
+ void ps_origin(int x, int y);
+ void ps_translate(int, int);
+ void ps_untranslate();
+};
+
+/**
+\}
+\endcond
+*/
+
+#endif // FL_POSTSCRIPT_GRAPHICS_DRIVER_H