Skip to content

Commit

Permalink
Fixed WIN32 printing of RGB images without transparency. Still print_…
Browse files Browse the repository at this point in the history
…window_part() problem.

git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@7275 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
  • Loading branch information
Manolo Gouy authored and Manolo Gouy committed Mar 16, 2010
1 parent 0df1d8b commit b20ef0b
Showing 1 changed file with 19 additions and 1 deletion.
20 changes: 19 additions & 1 deletion src/fl_draw_image_win32.cxx
Expand Up @@ -49,7 +49,8 @@
#include <FL/fl_draw.H>
#include <FL/x.H>

#define MAXBUFFER 0x40000 // 256k
//#define MAXBUFFER 0x40000 // 256k
#define MAXBUFFER 0x100000 // 1024k

#if USE_COLORMAP

Expand Down Expand Up @@ -254,6 +255,22 @@ static void innards(const uchar *buf, int X, int Y, int W, int H,
}
}
}
if(Fl_Device::current()->type() == Fl_Device::gdi_printer) {
// if print context, device and logical units are not equal, so SetDIBitsToDevice
// does not do the expected job, whereas StretchDIBits does it.
// TODO with Fl_Printer::print_window_part(), StretchDIBits does not work well
// with large captures whereas SetDIBitsToDevice does.
StretchDIBits(fl_gc, x, y+j-k, w, k, 0, 0, w, k,
(LPSTR)((uchar*)buffer+(blocking-k)*linesize),
&bmi,
#if USE_COLORMAP
indexed ? DIB_PAL_COLORS : DIB_RGB_COLORS
#else
DIB_RGB_COLORS
#endif
, SRCCOPY );
}
else {
SetDIBitsToDevice(fl_gc, x, y+j-k, w, k, 0, 0, 0, k,
(LPSTR)((uchar*)buffer+(blocking-k)*linesize),
&bmi,
Expand All @@ -263,6 +280,7 @@ static void innards(const uchar *buf, int X, int Y, int W, int H,
DIB_RGB_COLORS
#endif
);
}
}
}

Expand Down

0 comments on commit b20ef0b

Please sign in to comment.