Start adding dark mode support to wxMSW

Add experimental wxApp::MSWEnableDarkMode().

For now this is very incomplete and just uses the basic API for setting
the preferred application mode, which only works for the standard
dialogs and popup menus, but it's a start.

Support of dark mode is also limited to Windows 10 20H1 and later, but
this should, hopefully, be not a problem in practice as few people
should be using pre-2020 Windows 10 versions by now.
This commit is contained in:
Vadim Zeitlin 2022-06-24 18:42:52 +01:00
parent 6e940d1a10
commit bcea384923
11 changed files with 236 additions and 0 deletions

View file

@ -1847,6 +1847,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
src/msw/timectrl.cpp
src/msw/datecontrols.cpp
src/generic/activityindicator.cpp
src/msw/darkmode.cpp
</set>
<set var="MSW_HDR" hints="files">
wx/generic/clrpickerg.h

View file

@ -1736,6 +1736,7 @@ set(MSW_SRC
src/msw/datetimectrl.cpp
src/msw/hyperlink.cpp
src/generic/activityindicator.cpp
src/msw/darkmode.cpp
)
set(MSW_HDR

View file

@ -1685,6 +1685,7 @@ MSW_SRC =
src/msw/commandlinkbutton.cpp
src/msw/control.cpp
src/msw/customdraw.cpp
src/msw/darkmode.cpp
src/msw/datecontrols.cpp
src/msw/datectrl.cpp
src/msw/datetimectrl.cpp

View file

@ -1997,6 +1997,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_timectrl.o \
$(OBJS)\monodll_datecontrols.o \
$(OBJS)\monodll_activityindicator.o \
$(OBJS)\monodll_darkmode.o \
$(OBJS)\monodll_msw_checklst.o \
$(OBJS)\monodll_msw_fdrepdlg.o \
$(OBJS)\monodll_fontdlg.o \
@ -2845,6 +2846,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_timectrl.o \
$(OBJS)\monolib_datecontrols.o \
$(OBJS)\monolib_activityindicator.o \
$(OBJS)\monolib_darkmode.o \
$(OBJS)\monolib_msw_checklst.o \
$(OBJS)\monolib_msw_fdrepdlg.o \
$(OBJS)\monolib_fontdlg.o \
@ -3575,6 +3577,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_timectrl.o \
$(OBJS)\coredll_datecontrols.o \
$(OBJS)\coredll_activityindicator.o \
$(OBJS)\coredll_darkmode.o \
$(OBJS)\coredll_msw_checklst.o \
$(OBJS)\coredll_msw_fdrepdlg.o \
$(OBJS)\coredll_fontdlg.o \
@ -4262,6 +4265,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_timectrl.o \
$(OBJS)\corelib_datecontrols.o \
$(OBJS)\corelib_activityindicator.o \
$(OBJS)\corelib_darkmode.o \
$(OBJS)\corelib_msw_checklst.o \
$(OBJS)\corelib_msw_fdrepdlg.o \
$(OBJS)\corelib_fontdlg.o \
@ -7507,6 +7511,9 @@ $(OBJS)\monodll_timectrl.o: ../../src/msw/timectrl.cpp
$(OBJS)\monodll_datecontrols.o: ../../src/msw/datecontrols.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\monodll_darkmode.o: ../../src/msw/darkmode.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\monodll_msw_checklst.o: ../../src/msw/checklst.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
@ -10094,6 +10101,9 @@ $(OBJS)\monolib_timectrl.o: ../../src/msw/timectrl.cpp
$(OBJS)\monolib_datecontrols.o: ../../src/msw/datecontrols.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\monolib_darkmode.o: ../../src/msw/darkmode.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\monolib_msw_checklst.o: ../../src/msw/checklst.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
@ -13107,6 +13117,9 @@ $(OBJS)\coredll_timectrl.o: ../../src/msw/timectrl.cpp
$(OBJS)\coredll_datecontrols.o: ../../src/msw/datecontrols.cpp
$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\coredll_darkmode.o: ../../src/msw/darkmode.cpp
$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\coredll_msw_checklst.o: ../../src/msw/checklst.cpp
$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
@ -14857,6 +14870,9 @@ $(OBJS)\corelib_timectrl.o: ../../src/msw/timectrl.cpp
$(OBJS)\corelib_datecontrols.o: ../../src/msw/datecontrols.cpp
$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\corelib_darkmode.o: ../../src/msw/darkmode.cpp
$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\corelib_msw_checklst.o: ../../src/msw/checklst.cpp
$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<

View file

@ -2314,6 +2314,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_timectrl.obj \
$(OBJS)\monodll_datecontrols.obj \
$(OBJS)\monodll_activityindicator.obj \
$(OBJS)\monodll_darkmode.obj \
$(OBJS)\monodll_msw_checklst.obj \
$(OBJS)\monodll_msw_fdrepdlg.obj \
$(OBJS)\monodll_fontdlg.obj \
@ -3162,6 +3163,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_timectrl.obj \
$(OBJS)\monolib_datecontrols.obj \
$(OBJS)\monolib_activityindicator.obj \
$(OBJS)\monolib_darkmode.obj \
$(OBJS)\monolib_msw_checklst.obj \
$(OBJS)\monolib_msw_fdrepdlg.obj \
$(OBJS)\monolib_fontdlg.obj \
@ -3942,6 +3944,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_timectrl.obj \
$(OBJS)\coredll_datecontrols.obj \
$(OBJS)\coredll_activityindicator.obj \
$(OBJS)\coredll_darkmode.obj \
$(OBJS)\coredll_msw_checklst.obj \
$(OBJS)\coredll_msw_fdrepdlg.obj \
$(OBJS)\coredll_fontdlg.obj \
@ -4627,6 +4630,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_timectrl.obj \
$(OBJS)\corelib_datecontrols.obj \
$(OBJS)\corelib_activityindicator.obj \
$(OBJS)\corelib_darkmode.obj \
$(OBJS)\corelib_msw_checklst.obj \
$(OBJS)\corelib_msw_fdrepdlg.obj \
$(OBJS)\corelib_fontdlg.obj \
@ -7952,6 +7956,9 @@ $(OBJS)\monodll_timectrl.obj: ..\..\src\msw\timectrl.cpp
$(OBJS)\monodll_datecontrols.obj: ..\..\src\msw\datecontrols.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\msw\datecontrols.cpp
$(OBJS)\monodll_darkmode.obj: ..\..\src\msw\darkmode.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\msw\darkmode.cpp
$(OBJS)\monodll_msw_checklst.obj: ..\..\src\msw\checklst.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\msw\checklst.cpp
@ -10539,6 +10546,9 @@ $(OBJS)\monolib_timectrl.obj: ..\..\src\msw\timectrl.cpp
$(OBJS)\monolib_datecontrols.obj: ..\..\src\msw\datecontrols.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\msw\datecontrols.cpp
$(OBJS)\monolib_darkmode.obj: ..\..\src\msw\darkmode.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\msw\darkmode.cpp
$(OBJS)\monolib_msw_checklst.obj: ..\..\src\msw\checklst.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\msw\checklst.cpp
@ -13552,6 +13562,9 @@ $(OBJS)\coredll_timectrl.obj: ..\..\src\msw\timectrl.cpp
$(OBJS)\coredll_datecontrols.obj: ..\..\src\msw\datecontrols.cpp
$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\msw\datecontrols.cpp
$(OBJS)\coredll_darkmode.obj: ..\..\src\msw\darkmode.cpp
$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\msw\darkmode.cpp
$(OBJS)\coredll_msw_checklst.obj: ..\..\src\msw\checklst.cpp
$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\msw\checklst.cpp
@ -15302,6 +15315,9 @@ $(OBJS)\corelib_timectrl.obj: ..\..\src\msw\timectrl.cpp
$(OBJS)\corelib_datecontrols.obj: ..\..\src\msw\datecontrols.cpp
$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) ..\..\src\msw\datecontrols.cpp
$(OBJS)\corelib_darkmode.obj: ..\..\src\msw\darkmode.cpp
$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) ..\..\src\msw\darkmode.cpp
$(OBJS)\corelib_msw_checklst.obj: ..\..\src\msw\checklst.cpp
$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) ..\..\src\msw\checklst.cpp

View file

@ -613,6 +613,7 @@
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)msw_%(Filename).obj</ObjectFileName>
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(IntDir)msw_%(Filename).obj</ObjectFileName>
</ClCompile>
<ClCompile Include="..\..\src\msw\darkmode.cpp" />
<ClCompile Include="..\..\src\msw\graphicsd2d.cpp" />
<ClCompile Include="..\..\src\msw\ole\access.cpp" />
<ClCompile Include="..\..\src\msw\ole\activex.cpp" />

View file

@ -1074,6 +1074,9 @@
<ClCompile Include="..\..\src\xrc\xmlreshandler.cpp">
<Filter>Common Sources</Filter>
</ClCompile>
<ClCompile Include="..\..\src\msw\darkmode.cpp">
<Filter>MSW Sources</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\src\msw\version.rc">