// // Declaration of Fl_SVG_File_Surface in the Fast Light Tool Kit (FLTK). // // Copyright 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 // #ifndef Fl_SVG_File_Surface_H #define Fl_SVG_File_Surface_H #include #include /** A drawing surface producing a Scalable Vector Graphics (SVG) file. This drawing surface allows to store any FLTK graphics in vectorial form in a "Scalable Vector Graphics" file. \n Usage example: \code Fl_Window *win = ...// Window to draw to a .svg file int ww = win->decorated_w(); int wh = win->decorated_h(); FILE *svg = fl_fopen("/path/to/mywindow.svg", "w"); if (svg) { Fl_SVG_File_Surface *surface = new Fl_SVG_File_Surface(ww, wh, svg); Fl_Surface_Device::push_current(surface); fl_color(FL_WHITE); fl_rectf(0, 0, ww, wh); surface->draw_decorated_window(win); Fl_Surface_Device::pop_current(); delete surface; // the .svg file is not complete until the destructor was run fclose(svg); } \endcode \note FLTK uses the PNG and JPEG libraries to encode images to the SVG format. For this reason, class Fl_SVG_File_Surface is placed in the fltk_images library. If JPEG is not available at application build time, PNG is enough (but produces a quite larger output). If PNG isn't available either, images don't appear in the SVG output. */ class FL_EXPORT Fl_SVG_File_Surface : public Fl_Widget_Surface { int width_, height_; public: /** Constructor of the SVG drawing surface. \param width,height Width and height of the graphics area in FLTK drawing units \param svg A writable FILE pointer where the SVG data are to be sent. The resulting SVG data are not complete until after destruction of the Fl_SVG_File_Surface object or after calling close(). */ Fl_SVG_File_Surface(int width, int height, FILE *svg); /** Destructor. The underlying FILE pointer remains open after destruction of the Fl_SVG_File_Surface object unless close() was called. */ ~Fl_SVG_File_Surface(); /** Returns the underlying FILE pointer */ FILE *file(); virtual void origin(int x, int y); virtual void translate(int x, int y); virtual void untranslate(); virtual int printable_rect(int *w, int *h); /** Closes with function fclose() the FILE pointer where SVG data is output. The only operation possible after this on the Fl_SVG_File_Surface object is its destruction. \return The value returned by fclose(). */ int close(); }; #endif /* Fl_SVG_File_Surface_H */