Running the system metrics sample in the Petzold in both Wine and
Windows 98 showed a lot of differences. So I started hacking
windows/sysmetrics.c and the result of this is the attached patch. With
this patch all the differences listed below disapeared.

   But I have the feeling that system metrics is a delicate subject,
especially because of the platform variations: win3.1, win9x, win nt,
win2000. I hope to run compare the results with a Windows 95 machine
tonight but I don't have access to the other platforms.
   So I would like your feed-back on the attached patch. Is there some
parts that belong to a Win9x only section? Does anyone know if it breaks
things for Windows 3.1?

sw=screen-width
sh=screen-height

                 Wine        Win98 
SM_CYVTHUMB      15          16
SM_CXHTHUMB      15          16
SM_CYVSCROLL     15          16
SM_CXHSCROLL     15          16

SM_CXSIZE        17          18
SM_CYSIZE        17          18

SM_CXSIZEFRAME   5           4
SM_CYSIZEFRAME   5           4

SM_CXSMSIZE      15          13

SM_CXMENUSIZE    19          18
SM_CYMENUSIZE    19          18

SM_CXMAXTRACK    sw+14       sw+12
SM_CYMAXTRACK    sh+14       sh+12

SM_CXMAXIMIZED   sw+10       sw+8
SM_CYMAXIMIZED   sh-45       sh+8

SM_CXMENUCHECK   2           13
SM_CYMENUCHECK   2           13


-- 
Francois Gouget
[EMAIL PROTECTED]
Index: windows/sysmetrics.c
===================================================================
RCS file: /home/wine/wine/windows/sysmetrics.c,v
retrieving revision 1.16
diff -u -r1.16 sysmetrics.c
--- windows/sysmetrics.c        2000/07/31 23:32:49     1.16
+++ windows/sysmetrics.c        2000/09/22 07:55:15
@@ -65,7 +65,7 @@
        PROFILE_GetWineIniInt("Tweak.Layout", "DialogFrameWidth",
                              (TWEAK_WineLook > WIN31_LOOK) ? 3 : 4);
     sysMetrics[SM_CYDLGFRAME] = sysMetrics[SM_CXDLGFRAME];
-    sysMetrics[SM_CYVTHUMB] = sysMetrics[SM_CXVSCROLL] - 1;
+    sysMetrics[SM_CYVTHUMB] = sysMetrics[SM_CXVSCROLL];
     sysMetrics[SM_CXHTHUMB] = sysMetrics[SM_CYVTHUMB];
     sysMetrics[SM_CXICON] = 32;
     sysMetrics[SM_CYICON] = 32;
@@ -97,9 +97,9 @@
     sysMetrics[SM_CXMIN] = (TWEAK_WineLook > WIN31_LOOK) ? 112 : 100;
     sysMetrics[SM_CYMIN] = (TWEAK_WineLook > WIN31_LOOK) ? 27 : 28;
 
-    sysMetrics[SM_CXSIZE] = sysMetrics[SM_CYCAPTION] - 2;
+    sysMetrics[SM_CXSIZE] = sysMetrics[SM_CYCAPTION] - 1;
     sysMetrics[SM_CYSIZE] = sysMetrics[SM_CXSIZE];
-    sysMetrics[SM_CXFRAME] = GetProfileIntA("Windows", "BorderWidth", 4) + 1;
+    sysMetrics[SM_CXFRAME] = GetProfileIntA("Windows", "BorderWidth", 4);
     sysMetrics[SM_CYFRAME] = sysMetrics[SM_CXFRAME];
     sysMetrics[SM_CXMINTRACK] = sysMetrics[SM_CXMIN];
     sysMetrics[SM_CYMINTRACK] = sysMetrics[SM_CYMIN];
@@ -124,12 +124,12 @@
     sysMetrics[SM_CYEDGE] = sysMetrics[SM_CXEDGE];
     sysMetrics[SM_CXMINSPACING] = 160;
     sysMetrics[SM_CYMINSPACING] = 24;
-    sysMetrics[SM_CXSMICON] = sysMetrics[SM_CYSIZE] - (sysMetrics[SM_CYSIZE] % 2);
+    sysMetrics[SM_CXSMICON] = sysMetrics[SM_CYSIZE] - 2;
     sysMetrics[SM_CYSMICON] = sysMetrics[SM_CXSMICON];
     sysMetrics[SM_CYSMCAPTION] = 16;
-    sysMetrics[SM_CXSMSIZE] = 15;
-    sysMetrics[SM_CYSMSIZE] = sysMetrics[SM_CXSMSIZE];
-    sysMetrics[SM_CXMENUSIZE] = sysMetrics[SM_CYMENU];
+    sysMetrics[SM_CXSMSIZE] = 13;
+    sysMetrics[SM_CYSMSIZE] = 15;
+    sysMetrics[SM_CXMENUSIZE] = sysMetrics[SM_CYMENU]-1;
     sysMetrics[SM_CYMENUSIZE] = sysMetrics[SM_CXMENUSIZE];
 
     /* FIXME: What do these mean? */
@@ -145,7 +145,7 @@
     sysMetrics[SM_CXMAXIMIZED] =
        sysMetrics[SM_CXSCREEN] + 2 * sysMetrics[SM_CXFRAME];
     sysMetrics[SM_CYMAXIMIZED] =
-       sysMetrics[SM_CYSCREEN] - 45;
+       sysMetrics[SM_CYSCREEN] + 2 * sysMetrics[SM_CXFRAME];
     sysMetrics[SM_NETWORK] = 3;
 
     /* For the following: 0 = ok, 1 = failsafe, 2 = failsafe + network */
@@ -154,8 +154,8 @@
     sysMetrics[SM_CXDRAG] = 2;
     sysMetrics[SM_CYDRAG] = 2;
     sysMetrics[SM_SHOWSOUNDS] = 0;
-    sysMetrics[SM_CXMENUCHECK] = 2;
-    sysMetrics[SM_CYMENUCHECK] = 2;
+    sysMetrics[SM_CXMENUCHECK] = 13;
+    sysMetrics[SM_CYMENUCHECK] = 13;
 
     /* FIXME: Should check the type of processor for the following */
     sysMetrics[SM_SLOWMACHINE] = 0;

Reply via email to