summaryrefslogtreecommitdiff
path: root/FL/Fl_Printer.H
diff options
context:
space:
mode:
Diffstat (limited to 'FL/Fl_Printer.H')
-rw-r--r--FL/Fl_Printer.H166
1 files changed, 78 insertions, 88 deletions
diff --git a/FL/Fl_Printer.H b/FL/Fl_Printer.H
index cdc4fd319..121f28a99 100644
--- a/FL/Fl_Printer.H
+++ b/FL/Fl_Printer.H
@@ -40,88 +40,6 @@
#include <FL/Fl_PostScript.H>
#endif
-#if defined(__APPLE__) || defined(WIN32) || defined(FL_DOXYGEN) // PORTME: Fl_Surface_Driver ? - platform printer driver
-/**
- Print support under MSWindows and Mac OS.
-
- Class Fl_System_Printer is implemented only on the MSWindows and Mac OS platforms.
- It has no public constructor.
- Use Fl_Printer instead that is cross-platform and has the same API.
- */
-class Fl_System_Printer : public Fl_Paged_Device {
- friend class Fl_Printer;
-private:
-#ifdef __APPLE__ // PORTME: Fl_Surface_Driver ? - platform printer driver
- float scale_x;
- float scale_y;
- float angle; // rotation angle in radians
- PMPrintSession printSession;
- PMPageFormat pageFormat;
- PMPrintSettings printSettings;
-#elif defined(WIN32)
- int abortPrint;
- PRINTDLG pd;
- HDC hPr;
- int prerr;
- int left_margin;
- int top_margin;
- void absolute_printable_rect(int *x, int *y, int *w, int *h);
-#endif
-protected:
- /** \brief The constructor */
- Fl_System_Printer(void);
-public:
- int start_job(int pagecount, int *frompage = NULL, int *topage = NULL);
- int start_page (void);
- int printable_rect(int *w, int *h);
- void margins(int *left, int *top, int *right, int *bottom);
- void origin(int *x, int *y);
- void origin(int x, int y);
- void scale (float scale_x, float scale_y = 0.);
- void rotate(float angle);
- void translate(int x, int y);
- void untranslate(void);
- int end_page (void);
- void end_job (void);
-#ifdef __APPLE__ // PORTME: Fl_Surface_Driver ? - platform printer driver
- void draw_decorated_window(Fl_Window *win, int x_offset, int y_offset);
- void print_window_part(Fl_Window *win, int x, int y, int w, int h, int delta_x, int delta_y);
-#endif
- /** \brief The destructor */
- ~Fl_System_Printer(void);
-}; // class Fl_System_Printer
-#endif
-
-#if defined(FL_PORTING)
-
-# pragma message "FL_PORTING: define your own Fl_xxx_Printer class"
-class Fl_XXX_Printer : public Fl_Paged_Device {
- friend class Fl_Printer;
-protected:
- Fl_XXX_Printer(void) { }
-};
-
-#endif
-
-#if defined(FL_DOXYGEN) || !(defined(__APPLE__) || defined(WIN32) || defined(FL_PORTING))
-
-/**
- Print support under Unix/Linux.
-
- Class Fl_PostScript_Printer is implemented only on the Unix/Linux platform.
- It has no public constructor.
- Use Fl_Printer instead that is cross-platform and has the same API.
- */
-class Fl_PostScript_Printer : public Fl_PostScript_File_Device {
- friend class Fl_Printer;
-protected:
- /** The constructor */
- Fl_PostScript_Printer(void) {};
-public:
- int start_job(int pages, int *firstpage = NULL, int *lastpage = NULL);
-};
-
-#endif
/**
* \brief OS-independent print support.
@@ -183,6 +101,9 @@ public:
</ul>
*/
class FL_EXPORT Fl_Printer : public Fl_Paged_Device {
+private:
+ class Helper;
+ Helper *printer;
public:
/** \brief The constructor */
Fl_Printer(void);
@@ -228,18 +149,87 @@ public:
/** \} */
/** \brief The destructor */
~Fl_Printer(void);
+};
+
+#if defined(__APPLE__)
+class Fl_Printer::Helper : public Fl_Paged_Device {
+ friend class Fl_Printer;
+private:
+ float scale_x;
+ float scale_y;
+ float angle; // rotation angle in radians
+ PMPrintSession printSession;
+ PMPageFormat pageFormat;
+ PMPrintSettings printSettings;
+protected:
+ Helper(void);
+public:
+ int start_job(int pagecount, int *frompage = NULL, int *topage = NULL);
+ int start_page (void);
+ int printable_rect(int *w, int *h);
+ void margins(int *left, int *top, int *right, int *bottom);
+ void origin(int *x, int *y);
+ void origin(int x, int y);
+ void scale (float scale_x, float scale_y = 0.);
+ void rotate(float angle);
+ void translate(int x, int y);
+ void untranslate(void);
+ int end_page (void);
+ void end_job (void);
+ void draw_decorated_window(Fl_Window *win, int x_offset, int y_offset);
+ void print_window_part(Fl_Window *win, int x, int y, int w, int h, int delta_x, int delta_y);
+ ~Helper(void);
+};
+#elif defined(WIN32)
+
+class Fl_Printer::Helper : public Fl_Paged_Device {
+ friend class Fl_Printer;
private:
-#if defined(WIN32) || defined(__APPLE__) // PORTME: Fl_Surface_Driver ? - system printer driver
- Fl_System_Printer *printer;
+ int abortPrint;
+ PRINTDLG pd;
+ HDC hPr;
+ int prerr;
+ int left_margin;
+ int top_margin;
+ void absolute_printable_rect(int *x, int *y, int *w, int *h);
+protected:
+ Helper(void);
+public:
+ int start_job(int pagecount, int *frompage = NULL, int *topage = NULL);
+ int start_page (void);
+ int printable_rect(int *w, int *h);
+ void margins(int *left, int *top, int *right, int *bottom);
+ void origin(int *x, int *y);
+ void origin(int x, int y);
+ void scale (float scale_x, float scale_y = 0.);
+ void rotate(float angle);
+ void translate(int x, int y);
+ void untranslate(void);
+ int end_page (void);
+ void end_job (void);
+ ~Helper(void);
+};
+
#elif defined(FL_PORTING)
-# pragma message "FL_PORTING: instantiate your own Fl_xxx_Printer here"
- Fl_XXX_Printer *printer;
+
+# pragma message "FL_PORTING: define your own Fl_Printer::Helper class"
+class Fl_Printer::Helper : public Fl_Paged_Device {
+ friend class Fl_Printer;
+protected:
+ Helper(void) { }
+};
+
#else
- Fl_PostScript_Printer *printer;
-#endif
+
+class Fl_Printer::Helper : public Fl_PostScript_File_Device {
+ friend class Fl_Printer;
+public:
+ int start_job(int pagecount, int *frompage = NULL, int *topage = NULL);
};
+#endif
+
#endif // Fl_Printer_H
//