Skip to content

Commit 63a3967

Browse files
committed
Add interface to get/set dark background state in WinIMergeLib
1 parent bb2f4cd commit 63a3967

File tree

4 files changed

+50
-4
lines changed

4 files changed

+50
-4
lines changed

src/WinIMergeLib/ImgMergeWindow.hpp

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ class CImgMergeWindow : public IImgMergeWindow
7474
, m_gdiplusToken(0)
7575
, m_timerPrev()
7676
, m_timerNext()
77+
, m_bDarkBackgroundEnabled(false)
7778
{
7879
for (int i = 0; i < 3; ++i)
7980
m_ChildWndProc[i] = NULL;
@@ -867,6 +868,7 @@ class CImgMergeWindow : public IImgMergeWindow
867868
m_imgWindow[i].SetScrollBar(m_bHorizontalSplit ? SB_VERT : SB_HORZ);
868869
m_imgWindow[i].SetWindowRect(rects[i]);
869870
m_imgWindow[i].SetImage(m_buffer.GetImage(i)->getFipImage());
871+
m_imgWindow[i].SetDarkBackgroundEnabled(m_bDarkBackgroundEnabled);
870872
}
871873

872874
Event evt;
@@ -899,6 +901,7 @@ class CImgMergeWindow : public IImgMergeWindow
899901
m_imgWindow[i].SetScrollBar(m_bHorizontalSplit ? SB_VERT : SB_HORZ);
900902
m_imgWindow[i].SetWindowRect(rects[i]);
901903
m_imgWindow[i].SetImage(m_buffer.GetImage(i)->getFipImage());
904+
m_imgWindow[i].SetDarkBackgroundEnabled(m_bDarkBackgroundEnabled);
902905
}
903906

904907
Event evt;
@@ -1206,6 +1209,25 @@ class CImgMergeWindow : public IImgMergeWindow
12061209
m_buffer.SetOverlayAnimationInterval(interval);
12071210
}
12081211

1212+
bool IsDarkBackgroundEnabled() const
1213+
{
1214+
return m_bDarkBackgroundEnabled;
1215+
}
1216+
1217+
void SetDarkBackgroundEnabled(bool enabled)
1218+
{
1219+
m_bDarkBackgroundEnabled = enabled;
1220+
if (m_hWnd)
1221+
{
1222+
for (int pane = 0; pane < m_nImages; ++pane)
1223+
m_imgWindow[pane].SetDarkBackgroundEnabled(m_bDarkBackgroundEnabled);
1224+
DeleteObject(s_hbrBackground );
1225+
s_hbrBackground = CreateSolidBrush(m_bDarkBackgroundEnabled ? RGB(0, 0, 0) : GetSysColor(COLOR_3DFACE));
1226+
SetClassLongPtr(m_hWnd, GCLP_HBRBACKGROUND, (LONG_PTR)s_hbrBackground);
1227+
InvalidateRect(m_hWnd, NULL, TRUE);
1228+
}
1229+
}
1230+
12091231
private:
12101232

12111233
ATOM MyRegisterClass(HINSTANCE hInstance)
@@ -1218,7 +1240,7 @@ class CImgMergeWindow : public IImgMergeWindow
12181240
wcex.cbWndExtra = 0;
12191241
wcex.hInstance = hInstance;
12201242
wcex.hCursor = LoadCursor (NULL, IDC_ARROW);
1221-
wcex.hbrBackground = (HBRUSH)(COLOR_3DFACE+1);
1243+
wcex.hbrBackground = s_hbrBackground;
12221244
wcex.lpszClassName = L"WinImgMergeWindowClass";
12231245
return RegisterClassExW(&wcex);
12241246
}
@@ -1978,6 +2000,7 @@ class CImgMergeWindow : public IImgMergeWindow
19782000
int m_nImages;
19792001
HWND m_hWnd;
19802002
HINSTANCE m_hInstance;
2003+
inline static HBRUSH s_hbrBackground = CreateSolidBrush(GetSysColor(COLOR_3DFACE));
19812004
CImgWindow m_imgWindow[3];
19822005
WNDPROC m_ChildWndProc[3];
19832006
std::vector<EventListenerInfo> m_listener;
@@ -1995,4 +2018,5 @@ class CImgMergeWindow : public IImgMergeWindow
19952018
std::unique_ptr<ocr::COcr> m_pOcr;
19962019
std::chrono::milliseconds m_timerPrev;
19972020
std::chrono::milliseconds m_timerNext;
2021+
bool m_bDarkBackgroundEnabled;
19982022
};

src/WinIMergeLib/ImgToolWindow.hpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,12 @@ class CImgToolWindow : public IImgToolWindow
351351
RECT rc;
352352
GetClientRect(pDrawItem->hwndItem, &rc);
353353
Image *pImage = static_cast<CImgMergeWindow *>(m_pImgMergeWindow)->GetDiffMapImage(rc.right - rc.left, rc.bottom - rc.top);
354-
RGBQUAD bkColor = { 0xff, 0xff, 0xff, 0xff };
354+
RGBQUAD bkColor;
355+
const bool dark = m_pImgMergeWindow->IsDarkBackgroundEnabled();
356+
if (!dark)
357+
bkColor = { 0xff, 0xff, 0xff, 0xff };
358+
else
359+
bkColor = { 0x00, 0x00, 0x00, 0xff };
355360
pImage->getFipImage()->drawEx(pDrawItem->hDC, rc, false, &bkColor);
356361
HWND hwndLeftPane = m_pImgMergeWindow->GetPaneHWND(0);
357362

@@ -367,7 +372,7 @@ class CImgToolWindow : public IImgToolWindow
367372
rcFrame.right = rcFrame.left + (rc.right - rc.left) * sih.nPage / sih.nMax;
368373
rcFrame.top = rc.top + (rc.bottom - rc.top) * siv.nPos / siv.nMax;
369374
rcFrame.bottom = rcFrame.top + (rc.bottom - rc.top) * siv.nPage / siv.nMax;
370-
FrameRect(pDrawItem->hDC, &rcFrame, reinterpret_cast<HBRUSH>(GetStockObject(BLACK_BRUSH)));
375+
FrameRect(pDrawItem->hDC, &rcFrame, reinterpret_cast<HBRUSH>(GetStockObject(dark ? BLACK_BRUSH : WHITE_BRUSH)));
371376
}
372377
}
373378

src/WinIMergeLib/ImgWindow.hpp

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class CImgWindow
3838
, m_ptOverlappedImage{}
3939
, m_ptOverlappedImageCursor{}
4040
, m_wBar{SB_BOTH}
41+
, m_bDarkBackgroundEnabled(false)
4142
{
4243
memset(&m_backColor, 0xff, sizeof(m_backColor));
4344
}
@@ -445,6 +446,18 @@ class CImgWindow
445446
m_wBar = wBar;
446447
}
447448

449+
bool IsDarkBackgroundEnabled() const
450+
{
451+
return m_bDarkBackgroundEnabled;
452+
}
453+
454+
void SetDarkBackgroundEnabled(bool enabled)
455+
{
456+
m_bDarkBackgroundEnabled = enabled;
457+
if (m_fip)
458+
InvalidateRect(m_hWnd, NULL, TRUE);
459+
}
460+
448461
private:
449462

450463
ATOM MyRegisterClass(HINSTANCE hInstance)
@@ -476,7 +489,8 @@ class CImgWindow
476489
HDC hdcMem = CreateCompatibleDC(hdc);
477490
HBITMAP hbmMem = CreateCompatibleBitmap(hdc, rc.right - rc.left, rc.bottom - rc.top);
478491
HDC hOld = static_cast<HDC>(SelectObject(hdcMem, hbmMem));
479-
HBRUSH hOldBrush = static_cast<HBRUSH>(SelectObject(hdcMem, static_cast<HGDIOBJ>(CreateSolidBrush(RGB(206, 215, 230)))));
492+
HBRUSH hOldBrush = static_cast<HBRUSH>(SelectObject(hdcMem, static_cast<HGDIOBJ>(CreateSolidBrush(
493+
m_bDarkBackgroundEnabled ? RGB(40, 40, 60) : RGB(206, 215, 230)))));
480494

481495
PatBlt(hdcMem, 0, 0, rc.right - rc.left, rc.bottom - rc.top, PATCOPY);
482496

@@ -782,4 +796,5 @@ class CImgWindow
782796
POINT m_ptSelectionEnd;
783797
HCURSOR m_hCursor;
784798
int m_wBar;
799+
bool m_bDarkBackgroundEnabled;
785800
};

src/WinIMergeLib/WinIMergeLib.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,8 @@ struct IImgMergeWindow
187187
virtual void SetBlinkInterval(int interval) = 0;
188188
virtual int GetOverlayAnimationInterval() const = 0;
189189
virtual void SetOverlayAnimationInterval(int interval) = 0;
190+
virtual bool IsDarkBackgroundEnabled() const = 0;
191+
virtual void SetDarkBackgroundEnabled(bool enabled) = 0;
190192
};
191193

192194
struct IImgToolWindow

0 commit comments

Comments
 (0)