From 9231eb58cd38ea274a60d66b93baec58944f7949 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20Tschumperl=C3=A9?= <david.tschumperle@gmail.com>
Date: Fri, 7 Sep 2018 13:29:39 +0200
Subject: [PATCH] .

---
 CImg.h | 35 +++++++++++++++++++----------------
 1 file changed, 19 insertions(+), 16 deletions(-)

diff --git a/CImg.h b/CImg.h
index c3eaa75..d6c2832 100644
--- a/CImg.h
+++ b/CImg.h
@@ -7311,22 +7311,25 @@ namespace cimg_library_suffixed {
                                  CImgDisplay::_fitscreen(dx,dy,dz,480,-85,true)
     static unsigned int _fitscreen(const unsigned int dx, const unsigned int dy, const unsigned int dz,
                                    const int dmin, const int dmax, const bool return_y) {
-      const unsigned int _nw = dx + (dz>1?dz:0), _nh = dy + (dz>1?dz:0);
-      unsigned int nw = _nw?_nw:1, nh = _nh?_nh:1;
-      const unsigned int
-        sw = (unsigned int)CImgDisplay::screen_width(),
-        sh = (unsigned int)CImgDisplay::screen_height(),
-        mw = dmin<0?(unsigned int)(sw*-dmin/100):(unsigned int)dmin,
-        mh = dmin<0?(unsigned int)(sh*-dmin/100):(unsigned int)dmin,
-        Mw = dmax<0?(unsigned int)(sw*-dmax/100):(unsigned int)dmax,
-        Mh = dmax<0?(unsigned int)(sh*-dmax/100):(unsigned int)dmax;
-      if (nw<mw) { nh = nh*mw/nw; nh+=(nh==0); nw = mw; }
-      if (nh<mh) { nw = nw*mh/nh; nw+=(nw==0); nh = mh; }
-      if (nw>Mw) { nh = nh*Mw/nw; nh+=(nh==0); nw = Mw; }
-      if (nh>Mh) { nw = nw*Mh/nh; nw+=(nw==0); nh = Mh; }
-      if (nw<mw) nw = mw;
-      if (nh<mh) nh = mh;
-      return return_y?nh:nw;
+      const int
+        u = CImgDisplay::screen_width(),
+        v = CImgDisplay::screen_height();
+      const float
+        mw = dmin<0?cimg::round(u*-dmin/100.0f):(float)dmin,
+        mh = dmin<0?cimg::round(v*-dmin/100.0f):(float)dmin,
+        Mw = dmax<0?cimg::round(u*-dmax/100.0f):(float)dmax,
+        Mh = dmax<0?cimg::round(v*-dmax/100.0f):(float)dmax;
+      float
+        w = (float)std::max(1U,dx),
+        h = (float)std::max(1U,dy);
+      if (dz>1) { w+=dz; h+=dz; }
+      if (w<mw) { h = h*mw/w; w = mw; }
+      if (h<mh) { w = w*mh/h; h = mh; }
+      if (w>Mw) { h = h*Mw/w; w = Mw; }
+      if (h>Mh) { w = w*Mh/h; h = Mh; }
+      if (w<mw) w = mw;
+      if (h<mh) h = mh;
+      return std::max(1U,(unsigned int)cimg::round(return_y?h:w));
     }
 
     //@}
-- 
GitLab