summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2021-01-25 18:57:50 +0100
committerManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2021-01-25 18:58:05 +0100
commit871e7063a27706b22921536232797e43d513793a (patch)
tree4d969468596c5196dce22cee36df90289312cbff
parent7fdac3790a487f0694a1799f5df8bbae6803bb0a (diff)
Windows: restore "checkers" app that was damaged after handling of issue #155.
-rw-r--r--src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx b/src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx
index 246f98c81..38bfc4b1b 100644
--- a/src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx
+++ b/src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx
@@ -543,14 +543,21 @@ void Fl_GDI_Graphics_Driver::draw_rgb(Fl_RGB_Image *rgb, int XP, int YP, int WP,
int save = SaveDC(new_gc);
SelectObject(new_gc, (HBITMAP)*Fl_Graphics_Driver::id(rgb));
Wfull = W*(rgb->data_w()/float(Wfull)); Hfull = H*(rgb->data_h()/float(Hfull));
- cx *= scale(); cy *= scale();
- if (cx+Wfull > rgb->data_w()) Wfull = rgb->data_w()-cx;
- if (cy+Hfull > rgb->data_h()) Hfull = rgb->data_h()-cy;
+ int cx2 = cx * scale(), cy2 = cy * scale();
+ if (cx2+Wfull > rgb->data_w()) Wfull = rgb->data_w()-cx2;
+ if (cy2+Hfull > rgb->data_h()) Hfull = rgb->data_h()-cy2;
+ float scaleW = float(rgb->data_w())/rgb->w();
+ float scaleH = float(rgb->data_h())/rgb->h();
+ if (Wfull > int(WP*scaleW)) Wfull = int(WP*scaleW);
+ if (Hfull > int(HP*scaleH)) Hfull = int(HP*scaleH);
+ if (rgb->as_svg_image()) { // maintain precise aspect ratio for SVG images
+ float s = scale(); scale(1); cache_size(rgb, Wfull, Hfull); scale(s);
+ }
if ( (rgb->d() % 2) == 0 ) {
- alpha_blend_(XP*scale(), YP*scale(), W, H, new_gc, cx, cy, Wfull, Hfull);
+ alpha_blend_(XP*scale(), YP*scale(), W, H, new_gc, cx*scaleW, cy*scaleH, Wfull, Hfull);
} else {
SetStretchBltMode(gc_, HALFTONE);
- StretchBlt(gc_, XP*scale(), YP*scale(), W, H, new_gc, cx, cy, Wfull, Hfull, SRCCOPY);
+ StretchBlt(gc_, XP*scale(), YP*scale(), W, H, new_gc, cx*scaleW, cy*scaleH, Wfull, Hfull, SRCCOPY);
}
RestoreDC(new_gc, save);
DeleteDC(new_gc);