Add native wxOverlay implementation for wxMSW

Using generic implementation doesn't work any longer since the switch to
using composited windows (i.e. turning on WS_EX_COMPOSITED) by default
as drawing using wxClientDC has no effect.

So implement wxOverlay in a different way by using a layered window
covering the original window and drawing on it instead. This is similar
to Cocoa implementation of wxOverlay.

Closes #23047.
This commit is contained in:
AliKet 2022-12-20 12:44:20 +01:00 committed by Vadim Zeitlin
parent 487018f42e
commit 91031bcfee
10 changed files with 321 additions and 8 deletions

View file

@ -1926,6 +1926,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_evtloop.o \
$(OBJS)\monodll_access.o \
$(OBJS)\monodll_msw_bmpbndl.o \
$(OBJS)\monodll_overlay.o \
$(OBJS)\monodll_clrpickerg.o \
$(OBJS)\monodll_collpaneg.o \
$(OBJS)\monodll_filepickerg.o \
@ -2274,6 +2275,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_evtloop.o \
$(OBJS)\monodll_access.o \
$(OBJS)\monodll_msw_bmpbndl.o \
$(OBJS)\monodll_overlay.o \
$(OBJS)\monodll_generic_accel.o \
$(OBJS)\monodll_clrpickerg.o \
$(OBJS)\monodll_collpaneg.o \
@ -2775,6 +2777,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_evtloop.o \
$(OBJS)\monolib_access.o \
$(OBJS)\monolib_msw_bmpbndl.o \
$(OBJS)\monolib_overlay.o \
$(OBJS)\monolib_clrpickerg.o \
$(OBJS)\monolib_collpaneg.o \
$(OBJS)\monolib_filepickerg.o \
@ -3123,6 +3126,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_evtloop.o \
$(OBJS)\monolib_access.o \
$(OBJS)\monolib_msw_bmpbndl.o \
$(OBJS)\monolib_overlay.o \
$(OBJS)\monolib_generic_accel.o \
$(OBJS)\monolib_clrpickerg.o \
$(OBJS)\monolib_collpaneg.o \
@ -3506,6 +3510,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_evtloop.o \
$(OBJS)\coredll_access.o \
$(OBJS)\coredll_msw_bmpbndl.o \
$(OBJS)\coredll_overlay.o \
$(OBJS)\coredll_clrpickerg.o \
$(OBJS)\coredll_collpaneg.o \
$(OBJS)\coredll_filepickerg.o \
@ -3854,6 +3859,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_evtloop.o \
$(OBJS)\coredll_access.o \
$(OBJS)\coredll_msw_bmpbndl.o \
$(OBJS)\coredll_overlay.o \
$(OBJS)\coredll_generic_accel.o \
$(OBJS)\coredll_clrpickerg.o \
$(OBJS)\coredll_collpaneg.o \
@ -4194,6 +4200,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_evtloop.o \
$(OBJS)\corelib_access.o \
$(OBJS)\corelib_msw_bmpbndl.o \
$(OBJS)\corelib_overlay.o \
$(OBJS)\corelib_clrpickerg.o \
$(OBJS)\corelib_collpaneg.o \
$(OBJS)\corelib_filepickerg.o \
@ -4542,6 +4549,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_evtloop.o \
$(OBJS)\corelib_access.o \
$(OBJS)\corelib_msw_bmpbndl.o \
$(OBJS)\corelib_overlay.o \
$(OBJS)\corelib_generic_accel.o \
$(OBJS)\corelib_clrpickerg.o \
$(OBJS)\corelib_collpaneg.o \
@ -8465,6 +8473,11 @@ $(OBJS)\monodll_msw_bmpbndl.o: ../../src/msw/bmpbndl.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\monodll_overlay.o: ../../src/msw/overlay.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\monodll_clrpickerg.o: ../../src/generic/clrpickerg.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
@ -11052,6 +11065,11 @@ $(OBJS)\monolib_msw_bmpbndl.o: ../../src/msw/bmpbndl.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\monolib_overlay.o: ../../src/msw/overlay.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\monolib_clrpickerg.o: ../../src/generic/clrpickerg.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
@ -13600,6 +13618,11 @@ $(OBJS)\coredll_msw_bmpbndl.o: ../../src/msw/bmpbndl.cpp
$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\coredll_overlay.o: ../../src/msw/overlay.cpp
$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\coredll_clrpickerg.o: ../../src/generic/clrpickerg.cpp
$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
@ -15353,6 +15376,11 @@ $(OBJS)\corelib_msw_bmpbndl.o: ../../src/msw/bmpbndl.cpp
$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\corelib_overlay.o: ../../src/msw/overlay.cpp
$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\corelib_clrpickerg.o: ../../src/generic/clrpickerg.cpp
$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<

View file

@ -2243,6 +2243,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_evtloop.obj \
$(OBJS)\monodll_access.obj \
$(OBJS)\monodll_msw_bmpbndl.obj \
$(OBJS)\monodll_overlay.obj \
$(OBJS)\monodll_clrpickerg.obj \
$(OBJS)\monodll_collpaneg.obj \
$(OBJS)\monodll_filepickerg.obj \
@ -2589,6 +2590,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_evtloop.obj \
$(OBJS)\monodll_access.obj \
$(OBJS)\monodll_msw_bmpbndl.obj \
$(OBJS)\monodll_overlay.obj \
$(OBJS)\monodll_generic_accel.obj \
$(OBJS)\monodll_clrpickerg.obj \
$(OBJS)\monodll_collpaneg.obj \
@ -3092,6 +3094,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_evtloop.obj \
$(OBJS)\monolib_access.obj \
$(OBJS)\monolib_msw_bmpbndl.obj \
$(OBJS)\monolib_overlay.obj \
$(OBJS)\monolib_clrpickerg.obj \
$(OBJS)\monolib_collpaneg.obj \
$(OBJS)\monolib_filepickerg.obj \
@ -3438,6 +3441,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_evtloop.obj \
$(OBJS)\monolib_access.obj \
$(OBJS)\monolib_msw_bmpbndl.obj \
$(OBJS)\monolib_overlay.obj \
$(OBJS)\monolib_generic_accel.obj \
$(OBJS)\monolib_clrpickerg.obj \
$(OBJS)\monolib_collpaneg.obj \
@ -3873,6 +3877,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_evtloop.obj \
$(OBJS)\coredll_access.obj \
$(OBJS)\coredll_msw_bmpbndl.obj \
$(OBJS)\coredll_overlay.obj \
$(OBJS)\coredll_clrpickerg.obj \
$(OBJS)\coredll_collpaneg.obj \
$(OBJS)\coredll_filepickerg.obj \
@ -4219,6 +4224,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_evtloop.obj \
$(OBJS)\coredll_access.obj \
$(OBJS)\coredll_msw_bmpbndl.obj \
$(OBJS)\coredll_overlay.obj \
$(OBJS)\coredll_generic_accel.obj \
$(OBJS)\coredll_clrpickerg.obj \
$(OBJS)\coredll_collpaneg.obj \
@ -4559,6 +4565,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_evtloop.obj \
$(OBJS)\corelib_access.obj \
$(OBJS)\corelib_msw_bmpbndl.obj \
$(OBJS)\corelib_overlay.obj \
$(OBJS)\corelib_clrpickerg.obj \
$(OBJS)\corelib_collpaneg.obj \
$(OBJS)\corelib_filepickerg.obj \
@ -4905,6 +4912,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_evtloop.obj \
$(OBJS)\corelib_access.obj \
$(OBJS)\corelib_msw_bmpbndl.obj \
$(OBJS)\corelib_overlay.obj \
$(OBJS)\corelib_generic_accel.obj \
$(OBJS)\corelib_clrpickerg.obj \
$(OBJS)\corelib_collpaneg.obj \
@ -8910,6 +8918,11 @@ $(OBJS)\monodll_msw_bmpbndl.obj: ..\..\src\msw\bmpbndl.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\msw\bmpbndl.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\monodll_overlay.obj: ..\..\src\msw\overlay.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\msw\overlay.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\monodll_clrpickerg.obj: ..\..\src\generic\clrpickerg.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\generic\clrpickerg.cpp
@ -11497,6 +11510,11 @@ $(OBJS)\monolib_msw_bmpbndl.obj: ..\..\src\msw\bmpbndl.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\msw\bmpbndl.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\monolib_overlay.obj: ..\..\src\msw\overlay.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\msw\overlay.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\monolib_clrpickerg.obj: ..\..\src\generic\clrpickerg.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\generic\clrpickerg.cpp
@ -14045,6 +14063,11 @@ $(OBJS)\coredll_msw_bmpbndl.obj: ..\..\src\msw\bmpbndl.cpp
$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\msw\bmpbndl.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\coredll_overlay.obj: ..\..\src\msw\overlay.cpp
$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\msw\overlay.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\coredll_clrpickerg.obj: ..\..\src\generic\clrpickerg.cpp
$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\generic\clrpickerg.cpp
@ -15798,6 +15821,11 @@ $(OBJS)\corelib_msw_bmpbndl.obj: ..\..\src\msw\bmpbndl.cpp
$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) ..\..\src\msw\bmpbndl.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\corelib_overlay.obj: ..\..\src\msw\overlay.cpp
$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) ..\..\src\msw\overlay.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\corelib_clrpickerg.obj: ..\..\src\generic\clrpickerg.cpp
$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) ..\..\src\generic\clrpickerg.cpp

View file

@ -1079,6 +1079,7 @@
<ClCompile Include="..\..\src\common\bmpcboxcmn.cpp" />
<ClCompile Include="..\..\src\generic\rowheightcache.cpp" />
<ClCompile Include="..\..\src\generic\creddlgg.cpp" />
<ClCompile Include="..\..\src\msw\overlay.cpp" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\src\msw\version.rc">

View file

@ -942,6 +942,9 @@
<ClCompile Include="..\..\src\msw\ole\uuid.cpp">
<Filter>MSW Sources</Filter>
</ClCompile>
<ClCompile Include="..\..\src\msw\overlay.cpp">
<Filter>MSW Sources</Filter>
</ClCompile>
<ClCompile Include="..\..\src\msw\ownerdrw.cpp">
<Filter>MSW Sources</Filter>
</ClCompile>