diff options
author | Neil <nyamatongwe@gmail.com> | 2021-05-11 09:39:49 +1000 |
---|---|---|
committer | Neil <nyamatongwe@gmail.com> | 2021-05-11 09:39:49 +1000 |
commit | 59052f9ae48d6e24a270303d9f2af4097ca62086 (patch) | |
tree | 7483412da787e102ff72731cd51aab7de0bf751c | |
parent | a2eaf21d3ce1010aa32bb09b409fc6b019b31732 (diff) | |
download | scintilla-mirror-59052f9ae48d6e24a270303d9f2af4097ca62086.tar.gz |
Implement UpdateBaseElements on Win32 to update colours to match current system
settings. Trigger UpdateBaseElements when system settings change.
-rw-r--r-- | win32/ScintillaWin.cxx | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx index dc12d78ee..4e6fc9b0d 100644 --- a/win32/ScintillaWin.cxx +++ b/win32/ScintillaWin.cxx @@ -419,6 +419,7 @@ class ScintillaWin : void SetMouseCapture(bool on) override; bool HaveMouseCapture() override; void SetTrackMouseLeaveEvent(bool on) noexcept; + void UpdateBaseElements() override; bool PaintContains(PRectangle rc) override; void ScrollText(Sci::Line linesToMove) override; void NotifyCaretMove() override; @@ -1875,6 +1876,7 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam case WM_CREATE: ctrlID = ::GetDlgCtrlID(HwndFromWindow(wMain)); + UpdateBaseElements(); // Get Intellimouse scroll line parameters GetIntelliMouseParameters(); ::RegisterDragDrop(MainHWND(), reinterpret_cast<IDropTarget *>(&dt)); @@ -1952,6 +1954,7 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam case WM_SETTINGCHANGE: //Platform::DebugPrintf("Setting Changed\n"); + UpdateBaseElements(); InvalidateStyleData(); // Get Intellimouse scroll line parameters GetIntelliMouseParameters(); @@ -1966,6 +1969,7 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam case WM_SYSCOLORCHANGE: //Platform::DebugPrintf("Setting Changed\n"); + UpdateBaseElements(); InvalidateStyleData(); break; @@ -2171,6 +2175,23 @@ void ScintillaWin::SetTrackMouseLeaveEvent(bool on) noexcept { trackedMouseLeave = on; } +void ScintillaWin::UpdateBaseElements() { + struct ElementToIndex { int element; int nIndex; }; + ElementToIndex eti[] = { + { SC_ELEMENT_LIST, COLOR_WINDOWTEXT }, + { SC_ELEMENT_LIST_BACK, COLOR_WINDOW }, + { SC_ELEMENT_LIST_SELECTED, COLOR_HIGHLIGHTTEXT }, + { SC_ELEMENT_LIST_SELECTED_BACK, COLOR_HIGHLIGHT }, + }; + bool changed = false; + for (const ElementToIndex &ei : eti) { + changed = vs.SetElementBase(ei.element, ColourAlpha::FromRGB(::GetSysColor(ei.nIndex))) || changed; + } + if (changed) { + Redraw(); + } +} + bool ScintillaWin::PaintContains(PRectangle rc) { if (paintState == PaintState::painting) { return BoundsContains(rcPaint, hRgnUpdate, rc); |