diff options
-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); |