summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FL/Fl_PSfile_Device.H22
-rw-r--r--src/Fl_PS_Printer.cxx18
2 files changed, 25 insertions, 15 deletions
diff --git a/FL/Fl_PSfile_Device.H b/FL/Fl_PSfile_Device.H
index e81a83306..70bff5460 100644
--- a/FL/Fl_PSfile_Device.H
+++ b/FL/Fl_PSfile_Device.H
@@ -248,9 +248,8 @@ class FL_EXPORT Fl_PSfile_Device : public Fl_Abstract_Printer {
void rotate(float angle);
void translate(int x, int y);
void untranslate(void);
- int end_page (void);
- void end_job (void);
-
+ int end_page (void);
+ void end_job(void);
#endif // FL_DOXYGEN
/**
@@ -259,9 +258,9 @@ class FL_EXPORT Fl_PSfile_Device : public Fl_Abstract_Printer {
Fl_PSfile_Device(void);
/**
- @brief Begins the session where all graphics will go to a local PostScript file.
+ @brief Begins the session where all graphics requests will go to a local PostScript file.
*
- Opens a file dialog to select an output PostScript file.
+ Opens a file dialog entitled with Fl_PSfile_Device::file_chooser_title to select an output PostScript file.
@param pagecount The total number of pages to be created.
@param format Desired page format.
@param layout Desired page layout.
@@ -270,20 +269,25 @@ class FL_EXPORT Fl_PSfile_Device : public Fl_Abstract_Printer {
int start_job(int pagecount, enum Page_Format format = A4, enum Page_Layout layout = PORTRAIT);
/**
- @brief Begins the session where all graphics will go to named PostScript file.
+ @brief Begins the session where all graphics requests will go to FILE pointer.
*
- @param fname The name of the output local PostScript file.
+ @param ps_output A writable FILE pointer that will receive PostScript output and that will be closed
+ when end_job() will be called.
@param pagecount The total number of pages to be created.
@param format Desired page format.
@param layout Desired page layout.
- @return 0 iff OK, 1 if fopen(fname, "w") call failed.
+ @return always 0.
*/
- int start_job(const char *fname, int pagecount, enum Page_Format format = A4, enum Page_Layout layout = PORTRAIT);
+ int start_job(FILE *ps_output, int pagecount, enum Page_Format format = A4, enum Page_Layout layout = PORTRAIT);
/**
@brief The destructor.
*/
virtual ~Fl_PSfile_Device();
+
+ // how to have the const value appear in Doxygen as occurs with Fl_File_Chooser ?
+ /** \brief "Select a .ps file" [this text may be customized at run-time] */
+ static const char *file_chooser_title;
};
#endif // Fl_PSfile_Device_H
diff --git a/src/Fl_PS_Printer.cxx b/src/Fl_PS_Printer.cxx
index 16ca06239..9a41908fe 100644
--- a/src/Fl_PS_Printer.cxx
+++ b/src/Fl_PS_Printer.cxx
@@ -40,6 +40,8 @@
#include "print_panel.cxx"
#endif
+const char *Fl_PSfile_Device::file_chooser_title = "Select a .ps file";
+
const Fl_PSfile_Device::page_format Fl_PSfile_Device::page_formats[NO_PAGE_FORMATS] = { // order of enum Page_Format
// comes from appendix B of 5003.PPD_Spec_v4.3.pdf
@@ -1198,7 +1200,7 @@ int Fl_PSfile_Device::end_page (void)
int Fl_PSfile_Device::start_job (int pagecount, enum Page_Format format, enum Page_Layout layout)
{
Fl_Native_File_Chooser fnfc;
- fnfc.title("Create a .ps file");
+ fnfc.title(Fl_PSfile_Device::file_chooser_title);
fnfc.type(Fl_Native_File_Chooser::BROWSE_SAVE_FILE);
fnfc.options(Fl_Native_File_Chooser::SAVEAS_CONFIRM);
fnfc.filter("PostScript\t*.ps\n");
@@ -1211,12 +1213,12 @@ int Fl_PSfile_Device::start_job (int pagecount, enum Page_Format format, enum Pa
return 0;
}
-int Fl_PSfile_Device::start_job (const char *fname, int pagecount, enum Page_Format format, enum Page_Layout layout)
+int Fl_PSfile_Device::start_job (FILE *ps_output, int pagecount, enum Page_Format format, enum Page_Layout layout)
{
- output = fopen(fname, "w");
- if(output == NULL) return 1;
- ps_filename_ = strdup(fname);
- return start_postscript(pagecount, format, layout);
+ output = ps_output;
+ ps_filename_ = NULL;
+ start_postscript(pagecount, format, layout);
+ return 0;
}
void Fl_PSfile_Device::end_job (void)
@@ -1232,6 +1234,10 @@ void Fl_PSfile_Device::end_job (void)
fprintf(output, "GR\n restore\n");
fputs("%%EOF",output);
reset();
+ fflush(output);
+ if(ferror(output)) {
+ fl_alert ("Error during PostScript data output.");
+ }
#if ! (defined(__APPLE__) || defined(WIN32) )
if (print_pipe)
pclose(output);