| // |
| // "$Id: Fl_Paged_Device.H 8699 2011-05-20 16:39:06Z manolo $" |
| // |
| // Printing support for the Fast Light Tool Kit (FLTK). |
| // |
| // Copyright 2010 by Bill Spitzak and others. |
| // |
| // This library is free software; you can redistribute it and/or |
| // modify it under the terms of the GNU Library General Public |
| // License as published by the Free Software Foundation; either |
| // version 2 of the License, or (at your option) any later version. |
| // |
| // This library is distributed in the hope that it will be useful, |
| // but WITHOUT ANY WARRANTY; without even the implied warranty of |
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| // Library General Public License for more details. |
| // |
| // You should have received a copy of the GNU Library General Public |
| // License along with this library; if not, write to the Free Software |
| // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 |
| // USA. |
| // |
| // Please report all bugs and problems on the following page: |
| // |
| // http://www.fltk.org/str.php |
| // |
| |
| /** \file Fl_Paged_Device.H |
| \brief declaration of class Fl_Paged_Device. |
| */ |
| |
| #ifndef Fl_Paged_Device_H |
| #define Fl_Paged_Device_H |
| |
| #include <FL/Fl_Device.H> |
| #include <FL/Fl_Window.H> |
| |
| /** \brief Number of elements in enum Page_Format */ |
| #define NO_PAGE_FORMATS 30 /* MSVC6 compilation fix */ |
| |
| /** |
| \brief Represents page-structured drawing surfaces. |
| * |
| This class has no public constructor: don't instantiate it; use Fl_Printer |
| or Fl_PostScript_File_Device instead. |
| */ |
| class FL_EXPORT Fl_Paged_Device : public Fl_Surface_Device { |
| public: |
| /** |
| \brief Possible page formats. |
| |
| All paper formats with pre-defined width and height. |
| */ |
| enum Page_Format { |
| A0 = 0, /**< A0 format */ |
| A1, |
| A2, |
| A3, |
| A4, /**< A4 format */ |
| A5, |
| A6, |
| A7, |
| A8, |
| A9, |
| B0, |
| B1, |
| B2, |
| B3, |
| B4, |
| B5, |
| B6, |
| B7, |
| B8, |
| B9, |
| B10, |
| C5E, |
| DLE, |
| EXECUTIVE, |
| FOLIO, |
| LEDGER, |
| LEGAL, |
| LETTER, /**< Letter format */ |
| TABLOID, |
| ENVELOPE, |
| MEDIA = 0x1000 |
| }; |
| /** |
| \brief Possible page layouts. |
| */ |
| enum Page_Layout { |
| PORTRAIT = 0, /**< Portrait orientation */ |
| LANDSCAPE = 0x100, /**< Landscape orientation */ |
| REVERSED = 0x200, /**< Reversed orientation */ |
| ORIENTATION = 0x300 /**< orientation */ |
| }; |
| |
| /** \brief width, height and name of a page format |
| */ |
| typedef struct { |
| /** \brief width in points */ |
| int width; |
| /** \brief height in points */ |
| int height; |
| /** \brief format name */ |
| const char *name; |
| } page_format; |
| /** \brief width, height and name of all elements of the enum \ref Page_Format. |
| */ |
| static const page_format page_formats[NO_PAGE_FORMATS]; |
| private: |
| void traverse(Fl_Widget *widget); // finds subwindows of widget and prints them |
| protected: |
| /** \brief horizontal offset to the origin of graphics coordinates */ |
| int x_offset; |
| /** \brief vertical offset to the origin of graphics coordinates */ |
| int y_offset; |
| /** \brief The constructor */ |
| Fl_Paged_Device() : Fl_Surface_Device(NULL) {}; |
| /** \brief The destructor */ |
| virtual ~Fl_Paged_Device() {}; |
| public: |
| static const char *class_id; |
| const char *class_name() {return class_id;}; |
| virtual int start_job(int pagecount, int *frompage = NULL, int *topage = NULL); |
| virtual int start_page(void); |
| virtual int printable_rect(int *w, int *h); |
| virtual void margins(int *left, int *top, int *right, int *bottom); |
| virtual void origin(int x, int y); |
| virtual void origin(int *x, int *y); |
| virtual void scale(float scale_x, float scale_y = 0.); |
| virtual void rotate(float angle); |
| virtual void translate(int x, int y); |
| virtual void untranslate(void); |
| virtual void print_widget(Fl_Widget* widget, int delta_x = 0, int delta_y = 0); |
| /** Prints a window with its title bar and frame if any. |
| |
| \p x_offset and \p y_offset are optional coordinates of where to position the window top left. |
| Equivalent to print_widget() if \p win is a subwindow or has no border. |
| Use Fl_Window::decorated_w() and Fl_Window::decorated_h() to get the size of the |
| printed window. |
| */ |
| void print_window(Fl_Window *win, int x_offset = 0, int y_offset = 0); |
| virtual void print_window_part(Fl_Window *win, int x, int y, int w, int h, int delta_x = 0, int delta_y = 0); |
| virtual int end_page (void); |
| virtual void end_job (void); |
| }; |
| |
| #endif // Fl_Paged_Device_H |
| |
| // |
| // End of "$Id: Fl_Paged_Device.H 8699 2011-05-20 16:39:06Z manolo $" |
| // |
| |