WIN32: Fl_Pixmap printing uses a global variable called win_pixmap_bg_color equal to the color
used for the pixmap background, and treats this color as transparent. FLTK assigns to this variable a color unused by the processed pixmap. In theory this variable should be specific to each processed pixmap. In practice, it's very unlikely that several values are needed. A new member variable is added to the Fl_Pixmap object to hold this value. This member is made static if FLTK_ABI_VERSION < 10302 for ABI compatibility. The correct thing, though, is for a non-static member. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@9308 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
parent
0b6f546b0f
commit
ae4d6338b8
@ -22,6 +22,9 @@
|
||||
#ifndef Fl_Pixmap_H
|
||||
#define Fl_Pixmap_H
|
||||
# include "Fl_Image.H"
|
||||
#if defined(WIN32)
|
||||
# include "x.H"
|
||||
#endif
|
||||
|
||||
class Fl_Widget;
|
||||
struct Fl_Menu_Item;
|
||||
@ -56,6 +59,12 @@ class FL_EXPORT Fl_Pixmap : public Fl_Image {
|
||||
|
||||
private:
|
||||
|
||||
#if defined(WIN32)
|
||||
#if FLTK_ABI_VERSION < 10302
|
||||
static // a static member is needed for ABI compatibility
|
||||
#endif
|
||||
UINT pixmap_bg_color; // RGB color used for pixmap background
|
||||
#endif // WIN32
|
||||
#if defined(__APPLE__) || defined(WIN32)
|
||||
void *id_; // for internal use
|
||||
void *mask_; // for internal use (mask bitmap)
|
||||
|
@ -113,6 +113,10 @@ int Fl_Pixmap::prepare(int XP, int YP, int WP, int HP, int cx, int cy,
|
||||
#endif
|
||||
fl_draw_pixmap(data(), 0, 0, FL_BLACK);
|
||||
#ifndef __APPLE__
|
||||
#if defined(WIN32)
|
||||
extern UINT win_pixmap_bg_color; // computed by fl_draw_pixmap()
|
||||
this->pixmap_bg_color = win_pixmap_bg_color;
|
||||
#endif
|
||||
fl_mask_bitmap = 0;
|
||||
if (bitmap) {
|
||||
mask_ = fl_create_bitmask(w(), h(), bitmap);
|
||||
@ -149,6 +153,10 @@ void Fl_GDI_Graphics_Driver::draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP
|
||||
}
|
||||
}
|
||||
|
||||
#if FLTK_ABI_VERSION < 10302
|
||||
COLORREF Fl_Pixmap::pixmap_bg_color = 0;
|
||||
#endif
|
||||
|
||||
void Fl_GDI_Printer_Graphics_Driver::draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy) {
|
||||
int X, Y, W, H;
|
||||
if (pxm->prepare(XP, YP, WP, HP, cx, cy, X, Y, W, H)) return;
|
||||
@ -164,8 +172,7 @@ void Fl_GDI_Printer_Graphics_Driver::draw(Fl_Pixmap *pxm, int XP, int YP, int WP
|
||||
int save = SaveDC(new_gc);
|
||||
SelectObject(new_gc, (void*)pxm->id_);
|
||||
// print all of offscreen but its parts in background color
|
||||
extern UINT win_pixmap_bg_color; // computed by fl_draw_pixmap()
|
||||
fl_TransparentBlt(fl_gc, X, Y, W, H, new_gc, cx, cy, pxm->w(), pxm->h(), win_pixmap_bg_color );
|
||||
fl_TransparentBlt(fl_gc, X, Y, W, H, new_gc, cx, cy, pxm->w(), pxm->h(), pxm->pixmap_bg_color );
|
||||
RestoreDC(new_gc,save);
|
||||
DeleteDC(new_gc);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user