summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManolo Gouy <Manolo>2011-01-20 12:55:50 +0000
committerManolo Gouy <Manolo>2011-01-20 12:55:50 +0000
commit30c1eed80b89dcf9ec17d2adbad2b867df57adf8 (patch)
tree413e67a9e94786eede13a3b308c4eab7e4bb2b71
parent0eec2893a13524b8453821b082da6c0687141d0f (diff)
A better solution to the crash when printing the mandelbrot demo under WIN32.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@8294 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
-rw-r--r--src/fl_draw_image_win32.cxx10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/fl_draw_image_win32.cxx b/src/fl_draw_image_win32.cxx
index aa17030c5..41eddb06e 100644
--- a/src/fl_draw_image_win32.cxx
+++ b/src/fl_draw_image_win32.cxx
@@ -174,17 +174,18 @@ static void innards(const uchar *buf, int X, int Y, int W, int H,
int linesize = (pixelsize*w+3)&~3;
static U32* buffer;
+ static long buffer_size;
int blocking = h;
{int size = linesize*h;
- if (size > MAXBUFFER) {
+ // when printing, don't limit buffer size not to get a crash in StretchDIBits
+ if (size > MAXBUFFER && Fl_Surface_Device::surface()->class_name() != Fl_Printer::class_id) {
size = MAXBUFFER;
blocking = MAXBUFFER/linesize;
}
- static long buffer_size;
if (size > buffer_size) {
delete[] buffer;
buffer_size = size;
- buffer = new U32[(int)(1.02* (size+3)/4)]; // some extra memory needed when printing
+ buffer = new U32[(size+3)/4];
}}
bmi.bmiHeader.biHeight = blocking;
static U32* line_buffer;
@@ -267,6 +268,9 @@ static void innards(const uchar *buf, int X, int Y, int W, int H,
DIB_RGB_COLORS
#endif
, SRCCOPY );
+ delete[] buffer;
+ buffer = NULL;
+ buffer_size = 0;
}
else {
SetDIBitsToDevice(fl_gc, x, y+j-k, w, k, 0, 0, 0, k,