summaryrefslogtreecommitdiff
path: root/src/fl_draw_image_mac.cxx
diff options
context:
space:
mode:
authorManolo Gouy <Manolo>2011-02-01 10:13:54 +0000
committerManolo Gouy <Manolo>2011-02-01 10:13:54 +0000
commit45e539fff80a5b0040d517f01d82b7aa6cdb7d31 (patch)
tree4d02950654586736bf5d0c38c9272aa2d4261a89 /src/fl_draw_image_mac.cxx
parent2192b8aed24833a5282c53be6f1df2b5861d0b31 (diff)
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
Diffstat (limited to 'src/fl_draw_image_mac.cxx')
-rw-r--r--src/fl_draw_image_mac.cxx15
1 files changed, 10 insertions, 5 deletions
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 <config.h>
#include <FL/Fl.H>
#include <FL/fl_draw.H>
+#include <FL/Fl_Printer.H>
#include <FL/x.H>
#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<H; i++) {
- cb(userdata, 0, i, W, tmpBuf+i*W*delta);
+ if (cb) {
+ for (int i=0; i<H; i++) {
+ cb(userdata, 0, i, W, tmpBuf+i*W*delta);
+ }
+ } else {
+ memcpy(tmpBuf, buf, H*W*delta);
}
array = (void*)tmpBuf;
linedelta = W*delta;
@@ -86,7 +91,7 @@ static void innards(const uchar *buf, int X, int Y, int W, int H,
size_t size
);
#endif
- CGDataProviderReleaseDataCallback releaseCB = ( cb ? dataReleaseCB : NULL);
+ CGDataProviderReleaseDataCallback releaseCB = ( tmpBuf ? dataReleaseCB : NULL);
CGDataProviderRef src = CGDataProviderCreateWithData( 0L, array, linedelta*H, releaseCB);
CGImageRef img = CGImageCreate( W, H, 8, 8*delta, linedelta,
//lut, delta&1?kCGImageAlphaNone:kCGImageAlphaNoneSkipLast,