diff options
| author | Manolo Gouy <Manolo> | 2011-01-20 12:55:50 +0000 |
|---|---|---|
| committer | Manolo Gouy <Manolo> | 2011-01-20 12:55:50 +0000 |
| commit | 30c1eed80b89dcf9ec17d2adbad2b867df57adf8 (patch) | |
| tree | 413e67a9e94786eede13a3b308c4eab7e4bb2b71 /src | |
| parent | 0eec2893a13524b8453821b082da6c0687141d0f (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
Diffstat (limited to 'src')
| -rw-r--r-- | src/fl_draw_image_win32.cxx | 10 |
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, |
