diff options
| author | Manolo Gouy <Manolo> | 2010-03-25 13:59:00 +0000 |
|---|---|---|
| committer | Manolo Gouy <Manolo> | 2010-03-25 13:59:00 +0000 |
| commit | d748d323b993c5560443aca2a13b2e0ded3a8c6d (patch) | |
| tree | 6fca476530786075e5fcc9bd5f24c1a83d1255e5 /FL/Fl_Printer.H | |
| parent | 309e47801322afea091619f9d5ac45fea04158ab (diff) | |
Reorganized code to allow compilation with Fl_Device, Fl_Display but without Fl_Abstract_Printer
(may be useful for embarked devices)
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@7330 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'FL/Fl_Printer.H')
| -rw-r--r-- | FL/Fl_Printer.H | 168 |
1 files changed, 30 insertions, 138 deletions
diff --git a/FL/Fl_Printer.H b/FL/Fl_Printer.H index 08905f052..94907b7a4 100644 --- a/FL/Fl_Printer.H +++ b/FL/Fl_Printer.H @@ -24,6 +24,9 @@ // // http://www.fltk.org/str.php // +/** \file Fl_Printer.H + \brief declaration of classes Fl_Abstract_Printer, Fl_Printer, Fl_Device_Plugin. + */ #ifndef Fl_Printer_H #define Fl_Printer_H @@ -41,17 +44,19 @@ This class has no public constructor: don't instantiate it; use Fl_Printer or Fl_PSfile_Device instead. \see class Fl_Printer for full documentation of member functions. */ -class Fl_Abstract_Printer : public Fl_Device { +class Fl_Abstract_Printer : public Fl_Device { friend class Fl_Pixmap; friend class Fl_RGB_Image; friend class Fl_Bitmap; private: +#ifdef __APPLE__ struct chain_elt { Fl_Image *image; const uchar *data; struct chain_elt *next; }; void add_image(Fl_Image *image, const uchar *data); // adds an image to the page image list +#endif void traverse(Fl_Widget *widget); // finds subwindows of widget and prints them protected: /** \brief horizontal offset to the origin of graphics coordinates */ @@ -64,41 +69,25 @@ protected: void *gc; /** \brief the constructor */ Fl_Abstract_Printer(void) { gc = NULL; bg_r_ = bg_g_ = bg_b_ = 0; }; +#ifdef __APPLE__ /** \brief deletes the page image list */ void delete_image_list(); +#endif public: - /** - @brief Sets this printer as the target of future graphics calls. - @return The current target device of graphics calls. - */ Fl_Device *set_current(void); - /** \brief see Fl_Printer::start_job(int pagecount, int *frompage, int *topage) */ virtual int start_job(int pagecount, int *frompage = NULL, int *topage = NULL); - /** \brief see Fl_Printer::start_page() */ virtual int start_page(void); - /** \brief see Fl_Printer::printable_rect(int *w, int *h) */ virtual int printable_rect(int *w, int *h); - /** \brief see Fl_Printer::margins(int *left, int *top, int *right, int *bottom) */ virtual void margins(int *left, int *top, int *right, int *bottom); - /** \brief see Fl_Printer::origin(int x, int y) */ virtual void origin(int x, int y); - /** \brief see Fl_Printer::origin(int *x, int *y) */ void origin(int *x, int *y); - /** \brief see Fl_Printer::scale(float scale_x, float scale_y) */ virtual void scale(float scale_x, float scale_y); - /** \brief see Fl_Printer::rotate(float angle) */ virtual void rotate(float angle); - /** \brief see Fl_Printer::translate(int x, int y) */ virtual void translate(int x, int y); - /** \brief see Fl_Printer::untranslate(void) */ virtual void untranslate(void); - /** \brief see Fl_Printer::print_widget(Fl_Widget* widget, int delta_x, int delta_y) */ void print_widget(Fl_Widget* widget, int delta_x = 0, int delta_y = 0); - /** \brief see Fl_Printer::print_window_part(Fl_Window *win, int x, int y, int w, int h, int delta_x, int delta_y) */ void print_window_part(Fl_Window *win, int x, int y, int w, int h, int delta_x = 0, int delta_y = 0); - /** \brief see Fl_Printer::end_page() */ virtual int end_page (void); - /** \brief see Fl_Printer::end_job() */ virtual void end_job (void); }; @@ -140,142 +129,23 @@ public: @brief The constructor. */ Fl_Printer(void); - - /** - @brief Starts a print job. - * - @param[in] pagecount the total number of pages of the job - @param[out] frompage if non-null, *frompage is set to the first page the user wants printed - @param[out] topage if non-null, *topage is set to the last page the user wants printed - @return 0 iff OK - */ int start_job(int pagecount, int *frompage = NULL, int *topage = NULL); - - /** - @brief Starts a new printed page - * - The page coordinates are initially in points, i.e., 1/72 inch, - and with origin at the top left of the printable page area. - @return 0 iff OK - */ int start_page (void); - - /** - @brief Computes the width and height of the printable area of the page. - * - Values are in the same unit as that used by FLTK drawing functions, - are unchanged by calls to origin(), but are changed by scale() calls. - Values account for the user-selected paper type and print orientation. - @return 0 iff OK. - */ int printable_rect(int *w, int *h); - - /** - @brief Computes the dimensions of margins that lie between the printable page area and - the full page. - * - Values are in the same unit as that used by FLTK drawing functions. They are changed - by scale() calls. - @param[out] left If non-null, *left is set to the left margin size. - @param[out] top If non-null, *top is set to the top margin size. - @param[out] right If non-null, *right is set to the right margin size. - @param[out] bottom If non-null, *bottom is set to the bottom margin size. - */ void margins(int *left, int *top, int *right, int *bottom); - - /** - @brief Sets the position in page coordinates of the origin of graphics functions. - * - Arguments should be expressed relatively to the result of a previous printable_rect() call. - That is, <tt>printable_rect(&w, &h); origin(w/2, 0);</tt> sets the graphics origin at the - top center of the page printable area. - Origin() calls are not affected by rotate() calls. - Successive origin() calls don't combine their effects. - @param[in] x Horizontal position in page coordinates of the desired origin of graphics functions. - @param[in] y Same as above, vertically. - */ void origin(int x, int y); #ifdef FL_DOXYGEN - /** - @brief Computes the page coordinates of the current origin of graphics functions. - * - @param[out] x If non-null, *x is set to the horizontal page offset of graphics origin. - @param[out] y Same as above, vertically. - */ void origin(int *x, int *y); #endif - /** - @brief Changes the scaling of page coordinates. - * - This function also resets the origin of graphics functions at top left of printable page area. - After a scale() call, do a printable_rect() call to get the new dimensions of the printable page area. - Successive scale() calls don't combine their effects. - @param scale_x Horizontal dimensions of plot are multiplied by this quantity. - @param scale_y Same as above, vertically. - */ void scale (float scale_x, float scale_y); - - /** - @brief Rotates the graphics operations relatively to paper. - * - The rotation is centered on the current graphics origin. Successive rotate() calls don't combine their effects. - On MSWindows, Fl_RGB_Image's don't rotate well; print_window_part() is an efficient workaround. - @param angle Rotation angle in counterclockwise degrees. - */ void rotate(float angle); - - /** - @brief Translates the current graphics origin accounting for the current rotation. - * - This function is only useful after a rotate() call. - Each translate() call must be matched by an untranslate() call. - Successive translate() calls add up their effects. - */ void translate(int x, int y); - - /** - @brief Undoes the effect of a previous translate() call. - */ void untranslate(void); #ifdef FL_DOXYGEN - /** - @brief Draws the widget on the printed page. - * - The widget's position on the printed page is determined by the last call to origin() - and by the optional delta_x and delta_y arguments. - Its dimensions are in points unless there was a previous call to scale(). - <br>Under MSWindows and X11, Fl_RGB_Image's are printed without transparency. - A workaround is to use the print_window_part() call. - @param[in] widget Any FLTK widget (e.g., standard, custom, window). - @param[in] delta_x Optional horizontal offset for positioning the widget relatively - to the current origin of graphics functions. - @param[in] delta_y Same as above, vertically. - */ void print_widget(Fl_Widget* widget, int delta_x = 0, int delta_y = 0); - - /** - @brief Prints a rectangular part of an on-screen window. - * - @param win The window from where to capture. - @param x The rectangle left - @param y The rectangle top - @param w The rectangle width - @param h The rectangle height - @param delta_x Optional horizontal offset from current graphics origin where to print the captured rectangle. - @param delta_y As above, vertically. - */ void print_window_part(Fl_Window *win, int x, int y, int w, int h, int delta_x = 0, int delta_y = 0); #endif - /** - @brief To be called at the end of each page. - * - @return 0 iff OK. - */ int end_page (void); - - /** - @brief To be called at the end of a print job. - */ void end_job (void); }; @@ -291,6 +161,28 @@ public: }; #endif +/** + This plugin socket allows the integration of new device drivers for special + window or screen types. It is currently used to provide an automated printing + service for OpenGL windows, if linked with fltk_gl. + */ +class Fl_Device_Plugin : public Fl_Plugin { +public: + /** \brief The constructor */ + Fl_Device_Plugin(const char *name) + : Fl_Plugin(klass(), name) { } + /** \brief Returns the class name */ + virtual const char *klass() { return "fltk:device"; } + /** \brief Returns the plugin name */ + virtual const char *name() = 0; + /** \brief Prints a widget + \param p the printer + \param w the widget + \param x,y offsets where to print relatively to coordinates origin + */ + virtual int print(Fl_Abstract_Printer* p, Fl_Widget* w, int x, int y) { return 0; } +}; + #endif // Fl_Printer_H // |
