changeset 1739:c68ee60fb8b0

Improved method of figuring out the best icon size on OS/2 when drawing bitmap buttons with an icon handle. This prevents stretching to odd dimensions when one direction is small and the other is large. Fixes display issue in the latest dwtest.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Sat, 19 May 2012 01:23:04 +0000
parents d93e860c38d1
children 2d44ca344863
files os2/dw.c
diffstat 1 files changed, 28 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/os2/dw.c	Fri May 18 06:58:21 2012 +0000
+++ b/os2/dw.c	Sat May 19 01:23:04 2012 +0000
@@ -3840,22 +3840,40 @@
          /* Check the mini icon first */
          if(GpiQueryBitmapParameters(pi.hbmMiniColor, &sl))
          {
-            if(sl.cx && sl.cy && cx > sl.cx && cy > sl.cy)
-            {
-               newcx = sl.cx;
-               newcy = sl.cy;
-            }
+             if(sl.cx && sl.cy && cx > sl.cx && cy > sl.cy)
+             {
+                 newcx = sl.cx;
+                 newcy = sl.cy;
+             }
          }
          /* Check the normal icon second */
          if(GpiQueryBitmapParameters(pi.hbmColor, &sl))
          {
-            if(sl.cx && sl.cy && cx > sl.cx && cy > sl.cy)
-            {
-               newcx = sl.cx;
-               newcy = sl.cy;
-            }
+             if(sl.cx && sl.cy)
+             {
+                 if(cx > sl.cx && cy > sl.cy)
+                 {
+                     newcx = sl.cx;
+                     newcy = sl.cy;
+                 }
+                 /* In case there was no mini icon... cut it in half */
+                 else if(cx >= (sl.cx/2) && cy >= (sl.cy/2))
+                 {
+                     newcx = sl.cx/2;
+                     newcy = sl.cy/2;
+                 }
+             }
          }
          cx = newcx; cy = newcy;
+         /* Safety check to avoid icon dimension stretching */
+         if(cx != cy)
+         {
+             if(cx > cy)
+                 cx = cy;
+             else
+                 cy = cx;
+         }
+         /* Finally center it in the window */
          x = (width - cx)/2;
          y = (height - cy)/2;
       }