Huw Davies : user32: Don' t query the nonclient metrics unless the font info is required.

Alexandre Julliard julliard at winehq.org
Tue Aug 13 14:54:34 CDT 2019


Module: wine
Branch: master
Commit: ef26257f6f81557199d969ba681bbcbba6edc601
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=ef26257f6f81557199d969ba681bbcbba6edc601

Author: Huw Davies <huw at codeweavers.com>
Date:   Tue Aug 13 13:52:13 2019 +0100

user32: Don't query the nonclient metrics unless the font info is required.

This is an optimization that is particularly helpful for scrollbar code.

Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/user32/sysparams.c | 74 +++++++++++++++++++++----------------------------
 1 file changed, 32 insertions(+), 42 deletions(-)

diff --git a/dlls/user32/sysparams.c b/dlls/user32/sysparams.c
index 3f93f9c..cdeea65 100644
--- a/dlls/user32/sysparams.c
+++ b/dlls/user32/sysparams.c
@@ -2646,9 +2646,8 @@ INT WINAPI GetSystemMetrics( INT index )
     {
     case SM_CXVSCROLL:
     case SM_CYHSCROLL:
-        ncm.cbSize = sizeof(ncm);
-        SystemParametersInfoW( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0 );
-        return ncm.iScrollWidth;
+        get_entry( &entry_SCROLLWIDTH, 0, &ret );
+        return max( ret, 8 );
     case SM_CYCAPTION:
         ncm.cbSize = sizeof(ncm);
         SystemParametersInfoW( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0 );
@@ -2664,9 +2663,8 @@ INT WINAPI GetSystemMetrics( INT index )
     case SM_CXHTHUMB:
     case SM_CYVSCROLL:
     case SM_CXHSCROLL:
-        ncm.cbSize = sizeof(ncm);
-        SystemParametersInfoW( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0 );
-        return ncm.iScrollHeight;
+        get_entry( &entry_SCROLLHEIGHT, 0, &ret );
+        return max( ret, 8 );
     case SM_CXICON:
     case SM_CYICON:
         return map_to_dpi( 32, GetDpiForSystem() );
@@ -2712,21 +2710,20 @@ INT WINAPI GetSystemMetrics( INT index )
     case SM_CYMIN:
         return GetSystemMetrics( SM_CYCAPTION) + 2 * GetSystemMetrics( SM_CYFRAME);
     case SM_CXSIZE:
-        ncm.cbSize = sizeof(ncm);
-        SystemParametersInfoW( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0 );
-        return ncm.iCaptionWidth;
+        get_entry( &entry_CAPTIONWIDTH, 0, &ret );
+        return max( ret, 8 );
     case SM_CYSIZE:
         ncm.cbSize = sizeof(ncm);
         SystemParametersInfoW( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0 );
         return ncm.iCaptionHeight;
     case SM_CXFRAME:
-        ncm.cbSize = sizeof(ncm);
-        SystemParametersInfoW( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0 );
-        return GetSystemMetrics(SM_CXDLGFRAME) + ncm.iBorderWidth;
+        get_entry( &entry_BORDER, 0, &ret );
+        ret = max( ret, 1 );
+        return GetSystemMetrics(SM_CXDLGFRAME) + ret;
     case SM_CYFRAME:
-        ncm.cbSize = sizeof(ncm);
-        SystemParametersInfoW( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0 );
-        return GetSystemMetrics(SM_CYDLGFRAME) + ncm.iBorderWidth;
+        get_entry( &entry_BORDER, 0, &ret );
+        ret = max( ret, 1 );
+        return GetSystemMetrics(SM_CYDLGFRAME) + ret;
     case SM_CXMINTRACK:
         return GetSystemMetrics(SM_CXMIN);
     case SM_CYMINTRACK:
@@ -2780,17 +2777,15 @@ INT WINAPI GetSystemMetrics( INT index )
         SystemParametersInfoW( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0 );
         return ncm.iSmCaptionHeight + 1;
     case SM_CXSMSIZE:
-        ncm.cbSize = sizeof(ncm);
-        SystemParametersInfoW( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0 );
-        return ncm.iSmCaptionWidth;
+        get_entry( &entry_SMCAPTIONWIDTH, 0, &ret );
+        return ret;
     case SM_CYSMSIZE:
         ncm.cbSize = sizeof(ncm);
         SystemParametersInfoW( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0 );
         return ncm.iSmCaptionHeight;
     case SM_CXMENUSIZE:
-        ncm.cbSize = sizeof(ncm);
-        SystemParametersInfoW( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0 );
-        return ncm.iMenuWidth;
+        get_entry( &entry_MENUWIDTH, 0, &ret );
+        return ret;
     case SM_CYMENUSIZE:
         ncm.cbSize = sizeof(ncm);
         SystemParametersInfoW( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0 );
@@ -2901,9 +2896,8 @@ INT WINAPI GetSystemMetricsForDpi( INT index, UINT dpi )
     {
     case SM_CXVSCROLL:
     case SM_CYHSCROLL:
-        ncm.cbSize = sizeof(ncm);
-        SystemParametersInfoForDpi( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0, dpi );
-        return ncm.iScrollWidth;
+        get_entry_dpi( &entry_SCROLLWIDTH, 0, &ret, dpi );
+        return max( ret, 8 );
     case SM_CYCAPTION:
         ncm.cbSize = sizeof(ncm);
         SystemParametersInfoForDpi( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0, dpi );
@@ -2912,9 +2906,8 @@ INT WINAPI GetSystemMetricsForDpi( INT index, UINT dpi )
     case SM_CXHTHUMB:
     case SM_CYVSCROLL:
     case SM_CXHSCROLL:
-        ncm.cbSize = sizeof(ncm);
-        SystemParametersInfoForDpi( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0, dpi );
-        return ncm.iScrollHeight;
+        get_entry_dpi( &entry_SCROLLHEIGHT, 0, &ret, dpi );
+        return max( ret, 8 );
     case SM_CXICON:
     case SM_CYICON:
         return map_to_dpi( 32, dpi );
@@ -2929,21 +2922,20 @@ INT WINAPI GetSystemMetricsForDpi( INT index, UINT dpi )
         SystemParametersInfoForDpi( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0, dpi );
         return ncm.iMenuHeight + 1;
     case SM_CXSIZE:
-        ncm.cbSize = sizeof(ncm);
-        SystemParametersInfoForDpi( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0, dpi );
-        return ncm.iCaptionWidth;
+        get_entry_dpi( &entry_CAPTIONWIDTH, 0, &ret, dpi );
+        return max( ret, 8 );
     case SM_CYSIZE:
         ncm.cbSize = sizeof(ncm);
         SystemParametersInfoForDpi( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0, dpi );
         return ncm.iCaptionHeight;
     case SM_CXFRAME:
-        ncm.cbSize = sizeof(ncm);
-        SystemParametersInfoForDpi( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0, dpi );
-        return GetSystemMetricsForDpi( SM_CXDLGFRAME, dpi ) + ncm.iBorderWidth;
+        get_entry_dpi( &entry_BORDER, 0, &ret, dpi );
+        ret = max( ret, 1 );
+        return GetSystemMetricsForDpi( SM_CXDLGFRAME, dpi ) + ret;
     case SM_CYFRAME:
-        ncm.cbSize = sizeof(ncm);
-        SystemParametersInfoForDpi( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0, dpi );
-        return GetSystemMetricsForDpi( SM_CYDLGFRAME, dpi ) + ncm.iBorderWidth;
+        get_entry_dpi( &entry_BORDER, 0, &ret, dpi );
+        ret = max( ret, 1 );
+        return GetSystemMetricsForDpi( SM_CYDLGFRAME, dpi ) + ret;
     case SM_CXICONSPACING:
         im.cbSize = sizeof(im);
         SystemParametersInfoForDpi( SPI_GETICONMETRICS, sizeof(im), &im, 0, dpi );
@@ -2960,17 +2952,15 @@ INT WINAPI GetSystemMetricsForDpi( INT index, UINT dpi )
         SystemParametersInfoForDpi( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0, dpi );
         return ncm.iSmCaptionHeight + 1;
     case SM_CXSMSIZE:
-        ncm.cbSize = sizeof(ncm);
-        SystemParametersInfoForDpi( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0, dpi );
-        return ncm.iSmCaptionWidth;
+        get_entry_dpi( &entry_SMCAPTIONWIDTH, 0, &ret, dpi );
+        return ret;
     case SM_CYSMSIZE:
         ncm.cbSize = sizeof(ncm);
         SystemParametersInfoForDpi( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0, dpi );
         return ncm.iSmCaptionHeight;
     case SM_CXMENUSIZE:
-        ncm.cbSize = sizeof(ncm);
-        SystemParametersInfoForDpi( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0, dpi );
-        return ncm.iMenuWidth;
+        get_entry_dpi( &entry_MENUWIDTH, 0, &ret, dpi );
+        return ret;
     case SM_CYMENUSIZE:
         ncm.cbSize = sizeof(ncm);
         SystemParametersInfoForDpi( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0, dpi );




More information about the wine-cvs mailing list