|
|
@ -536,25 +536,22 @@ void Fl_GDI_Graphics_Driver::draw_rgb(Fl_RGB_Image *rgb, int XP, int YP, int WP, |
|
|
|
if (!*Fl_Graphics_Driver::id(rgb)) { |
|
|
|
if (!*Fl_Graphics_Driver::id(rgb)) { |
|
|
|
cache(rgb); |
|
|
|
cache(rgb); |
|
|
|
} |
|
|
|
} |
|
|
|
bool need_clip = (cx || cy || WP != rgb->w() || HP != rgb->h()); |
|
|
|
push_clip(XP, YP, WP, HP); |
|
|
|
if (need_clip) { |
|
|
|
XP -= cx; YP -= cy; |
|
|
|
push_clip(XP, YP, WP, HP); |
|
|
|
WP = rgb->w(); HP = rgb->h(); |
|
|
|
XP -= cx; YP -= cy; cx = cy = 0; WP = rgb->w(); HP = rgb->h(); |
|
|
|
cache_size(rgb, WP, HP); |
|
|
|
} |
|
|
|
|
|
|
|
int W = WP, H = HP; |
|
|
|
|
|
|
|
cache_size(rgb, W, H); |
|
|
|
|
|
|
|
HDC new_gc = CreateCompatibleDC(gc_); |
|
|
|
HDC new_gc = CreateCompatibleDC(gc_); |
|
|
|
int save = SaveDC(new_gc); |
|
|
|
int save = SaveDC(new_gc); |
|
|
|
SelectObject(new_gc, (HBITMAP)*Fl_Graphics_Driver::id(rgb)); |
|
|
|
SelectObject(new_gc, (HBITMAP)*Fl_Graphics_Driver::id(rgb)); |
|
|
|
if ( (rgb->d() % 2) == 0 ) { |
|
|
|
if ( (rgb->d() % 2) == 0 ) { |
|
|
|
alpha_blend_(this->floor(XP), this->floor(YP), W, H, new_gc, 0, 0, rgb->data_w(), rgb->data_h()); |
|
|
|
alpha_blend_(this->floor(XP), this->floor(YP), WP, HP, new_gc, 0, 0, rgb->data_w(), rgb->data_h()); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
SetStretchBltMode(gc_, HALFTONE); |
|
|
|
SetStretchBltMode(gc_, HALFTONE); |
|
|
|
StretchBlt(gc_, this->floor(XP), this->floor(YP), W, H, new_gc, 0, 0, rgb->data_w(), rgb->data_h(), SRCCOPY); |
|
|
|
StretchBlt(gc_, this->floor(XP), this->floor(YP), WP, HP, new_gc, 0, 0, rgb->data_w(), rgb->data_h(), SRCCOPY); |
|
|
|
} |
|
|
|
} |
|
|
|
RestoreDC(new_gc, save); |
|
|
|
RestoreDC(new_gc, save); |
|
|
|
DeleteDC(new_gc); |
|
|
|
DeleteDC(new_gc); |
|
|
|
if (need_clip) pop_clip(); |
|
|
|
pop_clip(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|