https://git.reactos.org/?p=reactos.git;a=commitdiff;h=5b40f6f353d47bd3414399a64bf47e40dd28a8e0

commit 5b40f6f353d47bd3414399a64bf47e40dd28a8e0
Author:     Carl J. Bialorucki <[email protected]>
AuthorDate: Fri Aug 4 05:20:19 2023 -0600
Commit:     GitHub <[email protected]>
CommitDate: Fri Aug 4 14:20:19 2023 +0300

    [EXPLORER] Add support for Windows 7 style system tray icon spacing (#5489)
    
    When using large taskbar icon:
    - Increase the padding around system tray icons.
    - Push the clock text further to the right, increasing the left padding
      between the clock and notification icons.
      This matches Windows 7 shell behavior.
    - Correct the spacing for the clock area, in the case when bPreferDate is
      enabled, only two lines are visible, and the day of the week is shorter
      than the date.
    
    CORE-11698
---
 base/shell/explorer/precomp.h     |  1 +
 base/shell/explorer/settings.cpp  |  4 ++++
 base/shell/explorer/syspager.cpp  | 15 ++++++++++++++-
 base/shell/explorer/trayclock.cpp |  9 ++++++++-
 4 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/base/shell/explorer/precomp.h b/base/shell/explorer/precomp.h
index 91770090ef5..a52e3704266 100644
--- a/base/shell/explorer/precomp.h
+++ b/base/shell/explorer/precomp.h
@@ -211,6 +211,7 @@ struct TaskbarSettings
     BOOL bPreferDate;
     BOOL bHideInactiveIcons;
     BOOL bSmallIcons;
+    BOOL bCompactTrayIcons;
     TW_STRUCKRECTS2 sr;
 
     BOOL Load();
diff --git a/base/shell/explorer/settings.cpp b/base/shell/explorer/settings.cpp
index 4c6b3dd2633..0f3daeddea6 100644
--- a/base/shell/explorer/settings.cpp
+++ b/base/shell/explorer/settings.cpp
@@ -32,6 +32,7 @@ BOOL TaskbarSettings::Save()
     SHSetValueW(hkExplorer, L"Advanced", L"TaskbarSizeMove", REG_DWORD, 
&bAllowSizeMove, sizeof(bAllowSizeMove));
     sr.cbSize = sizeof(sr);
     SHSetValueW(hkExplorer, L"Advanced", L"TaskbarSmallIcons", REG_DWORD, 
&bSmallIcons, sizeof(bSmallIcons));
+    SHSetValueW(hkExplorer, L"Advanced", L"CompactTrayIcons", REG_DWORD, 
&bCompactTrayIcons, sizeof(bCompactTrayIcons));
     SHSetValueW(hkExplorer, L"StuckRects2", L"Settings", REG_BINARY, &sr, 
sizeof(sr));
 
     /* TODO: AutoHide writes something to 
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Desktop\Components\0 
figure out what and why */
@@ -61,6 +62,9 @@ BOOL TaskbarSettings::Load()
     dwRet = SHGetValueW(hkExplorer, L"Advanced", L"TaskbarSmallIcons", NULL, 
&dwValue, &cbSize);
     bSmallIcons = (dwRet == ERROR_SUCCESS) ? (dwValue != 0) : TRUE;
 
+    dwRet = SHGetValueW(hkExplorer, L"Advanced", L"CompactTrayIcons", NULL, 
&dwValue, &cbSize);
+    bCompactTrayIcons = (dwRet == ERROR_SUCCESS) ? (dwValue != 0) : 
bSmallIcons;
+
     cbSize = sizeof(sr);
     dwRet = SHGetValueW(hkExplorer, L"StuckRects2", L"Settings", NULL, &sr, 
&cbSize);
 
diff --git a/base/shell/explorer/syspager.cpp b/base/shell/explorer/syspager.cpp
index 1bb2691b40f..35eb0faf75f 100644
--- a/base/shell/explorer/syspager.cpp
+++ b/base/shell/explorer/syspager.cpp
@@ -1252,6 +1252,11 @@ void CNotifyToolbar::Initialize(HWND hWndParent, 
CBalloonQueue * queue)
     tbm.dwMask = TBMF_BARPAD | TBMF_BUTTONSPACING | TBMF_PAD;
     tbm.cxPad = 1;
     tbm.cyPad = 1;
+    if (!g_TaskbarSettings.bCompactTrayIcons)
+    {
+        tbm.cxPad = GetSystemMetrics(SM_CXSMICON) / 2;
+        tbm.cyPad = GetSystemMetrics(SM_CYSMICON) / 2;
+    }
     tbm.cxBarPad = 1;
     tbm.cyBarPad = 1;
     tbm.cxButtonSpacing = 1;
@@ -1397,11 +1402,19 @@ void CSysPagerWnd::GetSize(IN BOOL IsHorizontal, IN 
PSIZE size)
     INT columns = 0;
     INT cyButton = GetSystemMetrics(SM_CYSMICON) + 2;
     INT cxButton = GetSystemMetrics(SM_CXSMICON) + 2;
+    if (!g_TaskbarSettings.bCompactTrayIcons)
+    {
+        cyButton = MulDiv(GetSystemMetrics(SM_CYSMICON), 3, 2);
+        cxButton = MulDiv(GetSystemMetrics(SM_CXSMICON), 3, 2);
+    }
     int VisibleButtonCount = Toolbar.GetVisibleButtonCount();
 
     if (IsHorizontal)
     {
-        rows = max(size->cy / cyButton, 1);
+        if (!g_TaskbarSettings.bCompactTrayIcons)
+            rows = max(size->cy / MulDiv(cyButton, 3, 2), 1);
+        else
+            rows = max(size->cy / cyButton, 1);
         columns = (VisibleButtonCount + rows - 1) / rows;
     }
     else
diff --git a/base/shell/explorer/trayclock.cpp 
b/base/shell/explorer/trayclock.cpp
index 39277e19a04..f25c63dbe9c 100644
--- a/base/shell/explorer/trayclock.cpp
+++ b/base/shell/explorer/trayclock.cpp
@@ -267,6 +267,10 @@ WORD CTrayClockWnd::GetMinimumSize(IN BOOL Horizontal, IN 
OUT PSIZE pSize)
     if (!LinesMeasured)
         return 0;
 
+    /* Prevents the date from being cut off when the day of the week is 
shorter than the date. */
+    if (VisibleLines > 1 && g_TaskbarSettings.bPreferDate)
+        szMax.cx = LineSizes[CLOCKWND_FORMAT_DATE].cx;
+
     for (i = 0; i < CLOCKWND_FORMAT_COUNT; i++)
     {
         if (LineSizes[i].cx != 0)
@@ -567,8 +571,11 @@ VOID CTrayClockWnd::PaintLine(IN HDC hDC, IN OUT RECT 
*rcClient, IN UINT LineNum
     if (LineSizes[LineNumber].cx == 0)
         return;
 
+    INT HShift = ((IsHorizontal && (VisibleLines <= 1 ||
+                   g_TaskbarSettings.bCompactTrayIcons)) ? 0 : 
TRAY_CLOCK_WND_SPACING_X);
+
     TextOut(hDC,
-            (rcClient->right - LineSizes[szLinesIndex].cx) / 2,
+            ((rcClient->right - LineSizes[szLinesIndex].cx) / 2) + HShift,
             rcClient->top + TRAY_CLOCK_WND_SPACING_Y,
             szLines[szLinesIndex],
             wcslen(szLines[szLinesIndex]));

Reply via email to