and whether we are printing: virtual int Fl_Graphics_Driver::has_feature(driver_feature feature) This is also because it is not convenient to derive a printer-specific driver with its own implementation of virtual functions when this implementation differs only in one line of code. 2) Solved the problem of inclusion of non public header by the public header FL/Fl_Device.H: bracket this with #if FL_LIBRARY / #endif so this non public header is included only when building FLTK itself. 3) Removed several (but not all) of the FLTK_ABI_VERSION guards that are no longer useful for code targeting FLTK 1.4. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11063 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
148 lines
4.0 KiB
C++
148 lines
4.0 KiB
C++
//
|
|
// "$Id$"
|
|
//
|
|
// Printing support for the Fast Light Tool Kit (FLTK).
|
|
//
|
|
// Copyright 2010 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:
|
|
//
|
|
// http://www.fltk.org/COPYING.php
|
|
//
|
|
// 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 {
|
|
friend class Fl_Copy_Surface;
|
|
friend class Fl_Image_Surface;
|
|
void draw_decorated_window(Fl_Window *win, int x_offset, int y_offset);
|
|
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), x_offset(0), y_offset(0) {};
|
|
public:
|
|
/** \brief The destructor */
|
|
virtual ~Fl_Paged_Device() {};
|
|
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$"
|
|
//
|
|
|