Skip to content

Commit 16bf220

Browse files
committed
Refactor WebDiffWindow and WebWindow: use static dark background flag/brush, remove redundant init and cleanup
1 parent d7d6965 commit 16bf220

File tree

2 files changed

+29
-20
lines changed

2 files changed

+29
-20
lines changed

src/WinWebDiffLib/WebDiffWindow.hpp

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,10 @@ class CWebDiffWindow : public IWebDiffWindow
1212
public:
1313
CWebDiffWindow()
1414
{
15-
s_hbrBackground = CreateSolidBrush(m_bDarkBackgroundEnabled ? RGB(0, 0, 0) : GetSysColor(COLOR_3DFACE));
1615
}
1716

1817
~CWebDiffWindow()
1918
{
20-
if (s_hbrBackground)
21-
DeleteObject(s_hbrBackground);
2219
}
2320

2421
bool Create(HINSTANCE hInstance, HWND hWndParent, int nID, const RECT& rc)
@@ -92,7 +89,7 @@ class CWebDiffWindow : public IWebDiffWindow
9289
std::wstring userDataFolder = GetUserDataFolderPath(i);
9390
ComPtr<IWebDiffCallback> callback2(callback);
9491
hr = m_webWindow[i].Create(this, m_hInstance, m_hWnd, urls[i], userDataFolder.c_str(),
95-
m_size, m_fitToWindow, m_zoom, m_bDarkBackgroundEnabled, m_userAgent, nullptr,
92+
m_size, m_fitToWindow, m_zoom, s_bDarkBackgroundEnabled, m_userAgent, nullptr,
9693
[this, i, callback2](WebDiffEvent::EVENT_TYPE event, IUnknown* sender, IUnknown* args)
9794
{
9895
WebDiffEvent ev{};
@@ -442,20 +439,22 @@ class CWebDiffWindow : public IWebDiffWindow
442439

443440
bool IsDarkBackgroundEnabled() const
444441
{
445-
return m_bDarkBackgroundEnabled;
442+
return s_bDarkBackgroundEnabled;
446443
}
447444

448445
void SetDarkBackgroundEnabled(bool enabled)
449446
{
450-
m_bDarkBackgroundEnabled = enabled;
447+
if (s_bDarkBackgroundEnabled == enabled)
448+
return;
449+
s_bDarkBackgroundEnabled = enabled;
450+
DeleteObject(s_hbrBackground);
451+
s_hbrBackground = CreateSolidBrush(s_bDarkBackgroundEnabled ? RGB(0, 0, 0) : GetSysColor(COLOR_3DFACE));
451452
if (m_hWnd)
452453
{
453-
for (int pane = 0; pane < m_nPanes; ++pane)
454-
m_webWindow[pane].SetDarkBackgroundEnabled(m_bDarkBackgroundEnabled);
455-
DeleteObject(s_hbrBackground);
456-
s_hbrBackground = CreateSolidBrush(m_bDarkBackgroundEnabled ? RGB(0, 0, 0) : GetSysColor(COLOR_3DFACE));
457454
SetClassLongPtr(m_hWnd, GCLP_HBRBACKGROUND, (LONG_PTR)s_hbrBackground);
458455
InvalidateRect(m_hWnd, NULL, TRUE);
456+
for (int pane = 0; pane < m_nPanes; ++pane)
457+
m_webWindow[pane].SetDarkBackgroundEnabled(s_bDarkBackgroundEnabled);
459458
}
460459
}
461460

@@ -1544,7 +1543,7 @@ class CWebDiffWindow : public IWebDiffWindow
15441543
int m_nPanes = 0;
15451544
HWND m_hWnd = nullptr;
15461545
HINSTANCE m_hInstance = nullptr;
1547-
HBRUSH s_hbrBackground = nullptr;
1546+
inline static HBRUSH s_hbrBackground = CreateSolidBrush(GetSysColor(COLOR_3DFACE));
15481547
CWebWindow m_webWindow[3];
15491548
int m_nDraggingSplitter = -1;
15501549
bool m_bHorizontalSplit = false;
@@ -1562,7 +1561,7 @@ class CWebDiffWindow : public IWebDiffWindow
15621561
std::vector<DiffInfo> m_diffInfos;
15631562
DiffLocation m_diffLocation[3];
15641563
DiffOptions m_diffOptions{};
1565-
bool m_bDarkBackgroundEnabled;
1564+
inline static bool s_bDarkBackgroundEnabled = false;
15661565
bool m_bShowDifferences = true;
15671566
bool m_bShowWordDifferences = true;
15681567
bool m_bSynchronizeEvents = true;

src/WinWebDiffLib/WebWindow.hpp

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ class CWebWindow
8181
{
8282
auto webView2Profile2 = webView2Profile.try_query<ICoreWebView2Profile2>();
8383
webView2Profile2->put_PreferredColorScheme(
84-
m_parent->m_bDarkBackgroundEnabled ? COREWEBVIEW2_PREFERRED_COLOR_SCHEME_DARK : COREWEBVIEW2_PREFERRED_COLOR_SCHEME_LIGHT);
84+
m_parent->s_bDarkBackgroundEnabled ? COREWEBVIEW2_PREFERRED_COLOR_SCHEME_DARK : COREWEBVIEW2_PREFERRED_COLOR_SCHEME_LIGHT);
8585
}
8686
}
8787

@@ -292,7 +292,12 @@ class CWebWindow
292292
m_pDiffWindow = pDiffWindow;
293293
m_fitToWindow = fitToWindow;
294294
m_size = size;
295-
m_bDarkBackgroundEnabled = darkBackgroundEnabled;
295+
if (s_bDarkBackgroundEnabled != darkBackgroundEnabled)
296+
{
297+
s_bDarkBackgroundEnabled = darkBackgroundEnabled;
298+
DeleteObject(s_hbrBackground);
299+
s_hbrBackground = CreateSolidBrush(s_bDarkBackgroundEnabled ? RGB(40, 40, 60) : RGB(206, 215, 230));
300+
}
296301
m_eventHandler = eventHandler;
297302
MyRegisterClass(hInstance);
298303
m_hWnd = CreateWindowExW(0, L"WinWebWindowClass", nullptr,
@@ -1378,16 +1383,21 @@ class CWebWindow
13781383

13791384
bool IsDarkBackgroundEnabled() const
13801385
{
1381-
return m_bDarkBackgroundEnabled;
1386+
return s_bDarkBackgroundEnabled;
13821387
}
13831388

13841389
void SetDarkBackgroundEnabled(bool enabled)
13851390
{
1386-
m_bDarkBackgroundEnabled = enabled;
1391+
if (s_bDarkBackgroundEnabled == enabled)
1392+
return;
1393+
s_bDarkBackgroundEnabled = enabled;
13871394
DeleteObject(s_hbrBackground);
1388-
s_hbrBackground = CreateSolidBrush(m_bDarkBackgroundEnabled ? RGB(40, 40, 60) : RGB(206, 215, 230));
1389-
SetClassLongPtr(m_hWebViewParent, GCLP_HBRBACKGROUND, (LONG_PTR)s_hbrBackground);
1390-
InvalidateRect(m_hWebViewParent, NULL, TRUE);
1395+
s_hbrBackground = CreateSolidBrush(s_bDarkBackgroundEnabled ? RGB(40, 40, 60) : RGB(206, 215, 230));
1396+
if (m_hWebViewParent)
1397+
{
1398+
SetClassLongPtr(m_hWebViewParent, GCLP_HBRBACKGROUND, (LONG_PTR)s_hbrBackground);
1399+
InvalidateRect(m_hWebViewParent, NULL, TRUE);
1400+
}
13911401
}
13921402

13931403
private:
@@ -2131,7 +2141,7 @@ class CWebWindow
21312141
std::wstring m_currentUrl;
21322142
std::wstring m_toolTipText = L"test";
21332143
bool m_showToolTip = false;
2134-
bool m_bDarkBackgroundEnabled = false;
2144+
inline static bool s_bDarkBackgroundEnabled = false;
21352145
std::wstring m_webmessage;
21362146
inline static const auto GetDpiForWindowFunc = []() {
21372147
HMODULE hUser32 = GetModuleHandle(L"user32.dll");

0 commit comments

Comments
 (0)