diff options
| author | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2020-12-02 14:39:37 +0100 |
|---|---|---|
| committer | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2020-12-02 14:39:49 +0100 |
| commit | d1c7caec3bf726ac137566ced91d067591a71e7e (patch) | |
| tree | 27c22279a398a4f22ca9152e3d0eb0861eba3203 | |
| parent | 4171cbe0befc3d9cc1367e0d715fb1dee622d376 (diff) | |
Improve Fl_Graphics_Driver::cache_size() when GUI is scaled.
The change lets this function enlarge the size only when strictly necessary
for image tiling.
| -rw-r--r-- | src/Fl_Graphics_Driver.cxx | 17 | ||||
| -rw-r--r-- | src/drivers/WinAPI/Fl_WinAPI_Screen_Driver.cxx | 2 | ||||
| -rw-r--r-- | src/drivers/X11/Fl_X11_Screen_Driver.cxx | 2 |
3 files changed, 11 insertions, 10 deletions
diff --git a/src/Fl_Graphics_Driver.cxx b/src/Fl_Graphics_Driver.cxx index e156ae2c4..5b33f7b2f 100644 --- a/src/Fl_Graphics_Driver.cxx +++ b/src/Fl_Graphics_Driver.cxx @@ -203,14 +203,15 @@ unsigned Fl_Graphics_Driver::font_desc_size() { scale() and in slightly modifying that to help support tiled images. */ void Fl_Graphics_Driver::cache_size(Fl_Image *img, int &width, int &height) { - if ( int(scale()) == scale() ) { - width = width * scale(); - height = height * scale(); - } else { - width = (width+1) * scale(); - height = (height+1) * scale(); - } - img->cache_size_(width, height); + // Image tiling may require to convert the floating value of width * scale() or + // height * scale() to a larger integer value to avoid undrawn space between adjacent images. + float s = scale(), fs = width * s; + width = (fs - int(fs) < 0.001 ? int(fs) : + int((width+1) * s)); + fs = height * s; + height = (fs - int(fs) < 0.001 ? int(fs) : + int((height+1) * s)); + if (img) img->cache_size_(width, height); } /** Draws an Fl_Pixmap object using this graphics driver. diff --git a/src/drivers/WinAPI/Fl_WinAPI_Screen_Driver.cxx b/src/drivers/WinAPI/Fl_WinAPI_Screen_Driver.cxx index 659113c3c..998d4f9b9 100644 --- a/src/drivers/WinAPI/Fl_WinAPI_Screen_Driver.cxx +++ b/src/drivers/WinAPI/Fl_WinAPI_Screen_Driver.cxx @@ -503,7 +503,7 @@ Fl_WinAPI_Screen_Driver::read_win_rectangle( int ws, hs; if (int(s) == s) { ws = w * s; hs = h * s;} else { - ws = (w+1)*s; // matches what Fl_Graphics_Driver::cache_size() does + ws = (w+1)*s; // approximates what Fl_Graphics_Driver::cache_size() does hs = (h+1)*s; if (ws < 1) ws = 1; if (hs < 1) hs = 1; diff --git a/src/drivers/X11/Fl_X11_Screen_Driver.cxx b/src/drivers/X11/Fl_X11_Screen_Driver.cxx index 539fdfdb3..ec3a6e0d2 100644 --- a/src/drivers/X11/Fl_X11_Screen_Driver.cxx +++ b/src/drivers/X11/Fl_X11_Screen_Driver.cxx @@ -800,7 +800,7 @@ Fl_RGB_Image *Fl_X11_Screen_Driver::read_win_rectangle(int X, int Y, int w, int sh = screens[ns].height; } if (win && !allow_outside && int(s) != s) { - ws = (w+1) * s; // matches what Fl_Graphics_Driver::cache_size() does + ws = (w+1) * s; // approximates what Fl_Graphics_Driver::cache_size() does hs = (h+1) * s; if (Xs + ws >= int(win->w()*s)) ws = win->w()*s - Xs -1; if (Ys + hs >= int(win->h()*s)) hs = win->h()*s - Ys -1; |
