From 45e539fff80a5b0040d517f01d82b7aa6cdb7d31 Mon Sep 17 00:00:00 2001 From: Manolo Gouy Date: Tue, 1 Feb 2011 10:13:54 +0000 Subject: fl_draw_image() on Mac OS and to a printer requires the image data to be kept until the page is finished. Thus, we now duplicate this data when the output is a printer, so the caller of the function does not have to take into account this Mac OS specificity. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@8349 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- FL/Fl_Paged_Device.H | 12 ------------ src/Fl_Paged_Device.cxx | 26 -------------------------- src/Fl_Quartz_Printer.mm | 2 -- src/fl_draw_image_mac.cxx | 15 ++++++++++----- 4 files changed, 10 insertions(+), 45 deletions(-) diff --git a/FL/Fl_Paged_Device.H b/FL/Fl_Paged_Device.H index 592ef82be..2782f6566 100644 --- a/FL/Fl_Paged_Device.H +++ b/FL/Fl_Paged_Device.H @@ -107,13 +107,6 @@ public: /** \brief width, height and name of all elements of the enum \ref Page_Format. */ static const page_format page_formats[NO_PAGE_FORMATS]; - -#ifdef __APPLE__ - struct chain_elt { - const uchar *data; - struct chain_elt *next; - }; -#endif private: void traverse(Fl_Widget *widget); // finds subwindows of widget and prints them protected: @@ -121,11 +114,6 @@ protected: int x_offset; /** \brief vertical offset to the origin of graphics coordinates */ int y_offset; -#ifdef __APPLE__ - struct chain_elt *image_list_; // chained list of images used in this page - void add_image(const uchar *data); // adds an image to the page image list - void delete_image_list(); // deletes the page image list -#endif /** \brief The constructor */ Fl_Paged_Device() : Fl_Surface_Device(NULL) {class_name( class_id);}; /** \brief The destructor */ diff --git a/src/Fl_Paged_Device.cxx b/src/Fl_Paged_Device.cxx index 239f8b83a..eb604259e 100644 --- a/src/Fl_Paged_Device.cxx +++ b/src/Fl_Paged_Device.cxx @@ -141,35 +141,9 @@ void Fl_Paged_Device::print_window_part(Fl_Window *win, int x, int y, int w, int save_front->show(); current->set_current(); fl_draw_image(image_data, delta_x, delta_y, w, h, 3); -#ifdef __APPLE__ - add_image(image_data); -#else delete image_data; -#endif } - -#ifdef __APPLE__ -void Fl_Paged_Device::add_image(const uchar *data) -{ - struct chain_elt *elt = (struct chain_elt *)calloc(sizeof(struct chain_elt), 1); - elt->data = data; - if (image_list_) { elt->next = image_list_; } - image_list_ = elt; -} - -void Fl_Paged_Device::delete_image_list() -{ - while(image_list_) { - struct chain_elt *next = image_list_->next; - if (image_list_->data) delete (uchar*) image_list_->data; // msvc6 compilation fix - free(image_list_); - image_list_ = next; - } -} -#endif - - /** @brief Starts a print job. * diff --git a/src/Fl_Quartz_Printer.mm b/src/Fl_Quartz_Printer.mm index 200b41dd6..6f4c07a1b 100644 --- a/src/Fl_Quartz_Printer.mm +++ b/src/Fl_Quartz_Printer.mm @@ -261,7 +261,6 @@ int Fl_System_Printer::start_page (void) angle = 0; scale_x = scale_y = 1; win_scale_x = win_scale_y = 1; - image_list_ = NULL; if(orientation == kPMPortrait) CGContextTranslateCTM(fl_gc, margins.left, margins.bottom + h); else @@ -284,7 +283,6 @@ int Fl_System_Printer::end_page (void) CGContextRestoreGState(fl_gc); CGContextRestoreGState(fl_gc); OSStatus status = PMSessionEndPageNoDialog(printSession); - delete_image_list(); gc = NULL; return status != noErr; } diff --git a/src/fl_draw_image_mac.cxx b/src/fl_draw_image_mac.cxx index 84b904436..72c34f888 100644 --- a/src/fl_draw_image_mac.cxx +++ b/src/fl_draw_image_mac.cxx @@ -30,6 +30,7 @@ #include #include #include +#include #include #define MAXBUFFER 0x40000 // 256k @@ -39,7 +40,7 @@ static void dataReleaseCB(void *info, const void *data, size_t size) delete[] (uchar *)data; } -/** +/* * draw an image based on the input parameters * * buf: image source data @@ -63,10 +64,14 @@ static void innards(const uchar *buf, int X, int Y, int W, int H, const void *array = buf; uchar *tmpBuf = 0; - if (cb) { + if (cb || Fl_Surface_Device::surface()->class_name() == Fl_Printer::class_id) { tmpBuf = new uchar[ H*W*delta ]; - for (int i=0; i