Merge branch 'msw-overlay'

Add native wxOverlay implementation using layered windows to wxMSW.

See #23261.
This commit is contained in:
Vadim Zeitlin 2023-02-20 18:28:21 +01:00
commit f932046a5c
11 changed files with 289 additions and 17 deletions

View file

@ -5037,7 +5037,8 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS = \
monodll_uuid.o \
monodll_msw_evtloop.o \
monodll_access.o \
monodll_msw_bmpbndl.o
monodll_msw_bmpbndl.o \
monodll_msw_overlay.o
@COND_TOOLKIT_MSW@__LOWLEVEL_SRC_OBJECTS = $(COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS)
@COND_TOOLKIT_OSX_COCOA@__LOWLEVEL_SRC_OBJECTS = \
@COND_TOOLKIT_OSX_COCOA@ $(__OSX_LOWLEVEL_SRC_OBJECTS)
@ -5765,7 +5766,8 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_1 = \
monodll_uuid.o \
monodll_msw_evtloop.o \
monodll_access.o \
monodll_msw_bmpbndl.o
monodll_msw_bmpbndl.o \
monodll_msw_overlay.o
@COND_TOOLKIT_MSW@__LOWLEVEL_SRC_OBJECTS_1 = $(COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_1)
@COND_TOOLKIT_OSX_COCOA@__LOWLEVEL_SRC_OBJECTS_1 = \
@COND_TOOLKIT_OSX_COCOA@ $(__OSX_LOWLEVEL_SRC_OBJECTS)
@ -6795,7 +6797,8 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_2 = \
monolib_uuid.o \
monolib_msw_evtloop.o \
monolib_access.o \
monolib_msw_bmpbndl.o
monolib_msw_bmpbndl.o \
monolib_msw_overlay.o
@COND_TOOLKIT_MSW@__LOWLEVEL_SRC_OBJECTS_2 = $(COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_2)
@COND_TOOLKIT_OSX_COCOA@__LOWLEVEL_SRC_OBJECTS_2 = \
@COND_TOOLKIT_OSX_COCOA@ $(__OSX_LOWLEVEL_SRC_OBJECTS_17)
@ -7523,7 +7526,8 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_3 = \
monolib_uuid.o \
monolib_msw_evtloop.o \
monolib_access.o \
monolib_msw_bmpbndl.o
monolib_msw_bmpbndl.o \
monolib_msw_overlay.o
@COND_TOOLKIT_MSW@__LOWLEVEL_SRC_OBJECTS_3 = $(COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_3)
@COND_TOOLKIT_OSX_COCOA@__LOWLEVEL_SRC_OBJECTS_3 = \
@COND_TOOLKIT_OSX_COCOA@ $(__OSX_LOWLEVEL_SRC_OBJECTS_17)
@ -8705,7 +8709,8 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_4 = \
coredll_uuid.o \
coredll_msw_evtloop.o \
coredll_access.o \
coredll_msw_bmpbndl.o
coredll_msw_bmpbndl.o \
coredll_msw_overlay.o
@COND_TOOLKIT_MSW@__LOWLEVEL_SRC_OBJECTS_4 = $(COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_4)
@COND_TOOLKIT_OSX_COCOA@__LOWLEVEL_SRC_OBJECTS_4 = \
@COND_TOOLKIT_OSX_COCOA@ $(__OSX_LOWLEVEL_SRC_OBJECTS_1_1)
@ -9433,7 +9438,8 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_5 = \
coredll_uuid.o \
coredll_msw_evtloop.o \
coredll_access.o \
coredll_msw_bmpbndl.o
coredll_msw_bmpbndl.o \
coredll_msw_overlay.o
@COND_TOOLKIT_MSW@__LOWLEVEL_SRC_OBJECTS_5 = $(COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_5)
@COND_TOOLKIT_OSX_COCOA@__LOWLEVEL_SRC_OBJECTS_5 = \
@COND_TOOLKIT_OSX_COCOA@ $(__OSX_LOWLEVEL_SRC_OBJECTS_1_1)
@ -10191,7 +10197,8 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_6 = \
corelib_uuid.o \
corelib_msw_evtloop.o \
corelib_access.o \
corelib_msw_bmpbndl.o
corelib_msw_bmpbndl.o \
corelib_msw_overlay.o
@COND_TOOLKIT_MSW@__LOWLEVEL_SRC_OBJECTS_6 = $(COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_6)
@COND_TOOLKIT_OSX_COCOA@__LOWLEVEL_SRC_OBJECTS_6 = \
@COND_TOOLKIT_OSX_COCOA@ $(__OSX_LOWLEVEL_SRC_OBJECTS_1_4)
@ -10919,7 +10926,8 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_7 = \
corelib_uuid.o \
corelib_msw_evtloop.o \
corelib_access.o \
corelib_msw_bmpbndl.o
corelib_msw_bmpbndl.o \
corelib_msw_overlay.o
@COND_TOOLKIT_MSW@__LOWLEVEL_SRC_OBJECTS_7 = $(COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_7)
@COND_TOOLKIT_OSX_COCOA@__LOWLEVEL_SRC_OBJECTS_7 = \
@COND_TOOLKIT_OSX_COCOA@ $(__OSX_LOWLEVEL_SRC_OBJECTS_1_4)
@ -17485,6 +17493,9 @@ monodll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONODLL_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@monodll_msw_bmpbndl.o: $(srcdir)/src/msw/bmpbndl.cpp $(MONODLL_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/msw/bmpbndl.cpp
@COND_TOOLKIT_MSW_USE_GUI_1@monodll_msw_overlay.o: $(srcdir)/src/msw/overlay.cpp $(MONODLL_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/msw/overlay.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1@monodll_artmac.o: $(srcdir)/src/osx/artmac.cpp $(MONODLL_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/osx/artmac.cpp
@ -22249,6 +22260,9 @@ monolib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONOLIB_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@monolib_msw_bmpbndl.o: $(srcdir)/src/msw/bmpbndl.cpp $(MONOLIB_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/msw/bmpbndl.cpp
@COND_TOOLKIT_MSW_USE_GUI_1@monolib_msw_overlay.o: $(srcdir)/src/msw/overlay.cpp $(MONOLIB_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/msw/overlay.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1@monolib_artmac.o: $(srcdir)/src/osx/artmac.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/osx/artmac.cpp
@ -27112,6 +27126,9 @@ coredll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(COREDLL_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@coredll_msw_bmpbndl.o: $(srcdir)/src/msw/bmpbndl.cpp $(COREDLL_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/msw/bmpbndl.cpp
@COND_TOOLKIT_MSW_USE_GUI_1@coredll_msw_overlay.o: $(srcdir)/src/msw/overlay.cpp $(COREDLL_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/msw/overlay.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1@coredll_artmac.o: $(srcdir)/src/osx/artmac.cpp $(COREDLL_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/osx/artmac.cpp
@ -30847,6 +30864,9 @@ corelib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(CORELIB_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@corelib_msw_bmpbndl.o: $(srcdir)/src/msw/bmpbndl.cpp $(CORELIB_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/msw/bmpbndl.cpp
@COND_TOOLKIT_MSW_USE_GUI_1@corelib_msw_overlay.o: $(srcdir)/src/msw/overlay.cpp $(CORELIB_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/msw/overlay.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1@corelib_artmac.o: $(srcdir)/src/osx/artmac.cpp $(CORELIB_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/osx/artmac.cpp

View file

@ -1764,6 +1764,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
src/msw/evtloop.cpp
src/msw/ole/access.cpp
src/msw/bmpbndl.cpp
src/msw/overlay.cpp
</set>
<set var="MSW_LOWLEVEL_HDR" hints="files">
wx/msw/nonownedwnd.h

View file

@ -1640,6 +1640,7 @@ set(MSW_LOWLEVEL_SRC
src/msw/evtloop.cpp
src/msw/ole/access.cpp
src/msw/bmpbndl.cpp
src/msw/overlay.cpp
)
set(MSW_LOWLEVEL_HDR

View file

@ -1626,6 +1626,7 @@ MSW_LOWLEVEL_SRC =
src/msw/ole/oleutils.cpp
src/msw/ole/safearray.cpp
src/msw/ole/uuid.cpp
src/msw/overlay.cpp
src/msw/palette.cpp
src/msw/pen.cpp
src/msw/popupwin.cpp

View file

@ -1939,6 +1939,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 \
@ -2287,6 +2288,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 \
@ -2791,6 +2793,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 \
@ -3139,6 +3142,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 \
@ -3522,6 +3526,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 \
@ -3870,6 +3875,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 \
@ -4210,6 +4216,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 \
@ -4558,6 +4565,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 \
@ -8500,6 +8508,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) $<
@ -11087,6 +11100,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) $<
@ -13635,6 +13653,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) $<
@ -15388,6 +15411,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

@ -2272,6 +2272,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 \
@ -2618,6 +2619,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 \
@ -3124,6 +3126,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 \
@ -3470,6 +3473,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 \
@ -3905,6 +3909,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 \
@ -4251,6 +4256,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 \
@ -4591,6 +4597,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 \
@ -4937,6 +4944,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 \
@ -8957,6 +8965,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
@ -11544,6 +11557,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
@ -14092,6 +14110,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
@ -15845,6 +15868,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>

View file

@ -17,6 +17,8 @@
#define wxHAS_NATIVE_OVERLAY 1
#elif defined(__WXOSX__) && wxOSX_USE_COCOA
#define wxHAS_NATIVE_OVERLAY 1
#elif defined(__WXMSW__)
#define wxHAS_NATIVE_OVERLAY 1
#elif defined(__WXGTK3__)
#define wxHAS_NATIVE_OVERLAY 1
#define wxHAS_GENERIC_OVERLAY 1

View file

@ -107,6 +107,7 @@ public:
void OnMouseMove(wxMouseEvent &event);
void OnMouseDown(wxMouseEvent &event);
void OnMouseUp(wxMouseEvent &event);
void OnMouseCaptureLost(wxMouseCaptureLostEvent &event);
void ToShow(int show) { m_show = show; Refresh(); }
int GetPage() { return m_show; }
@ -160,6 +161,10 @@ protected:
void DrawRegionsHelper(wxDC& dc, wxCoord x, bool firstTime);
// Remove the rubber band if it's currently shown and return true or just
// return false if we're not showing it.
bool StopRubberBanding();
private:
MyFrame *m_owner;
@ -503,6 +508,7 @@ wxBEGIN_EVENT_TABLE(MyCanvas, wxScrolledWindow)
EVT_MOTION (MyCanvas::OnMouseMove)
EVT_LEFT_DOWN (MyCanvas::OnMouseDown)
EVT_LEFT_UP (MyCanvas::OnMouseUp)
EVT_MOUSE_CAPTURE_LOST (MyCanvas::OnMouseCaptureLost)
wxEND_EVENT_TABLE()
#include "smile.xpm"
@ -2097,19 +2103,28 @@ void MyCanvas::OnMouseDown(wxMouseEvent &event)
CaptureMouse() ;
}
bool MyCanvas::StopRubberBanding()
{
if ( !m_rubberBand )
return false;
{
wxClientDC dc( this );
PrepareDC( dc );
wxDCOverlay overlaydc( m_overlay, &dc );
overlaydc.Clear();
}
m_overlay.Reset();
m_rubberBand = false;
return true;
}
void MyCanvas::OnMouseUp(wxMouseEvent &event)
{
if ( m_rubberBand )
if ( StopRubberBanding() )
{
ReleaseMouse();
{
wxClientDC dc( this );
PrepareDC( dc );
wxDCOverlay overlaydc( m_overlay, &dc );
overlaydc.Clear();
}
m_overlay.Reset();
m_rubberBand = false;
wxPoint endpoint = CalcUnscrolledPosition(event.GetPosition());
@ -2123,6 +2138,13 @@ void MyCanvas::OnMouseUp(wxMouseEvent &event)
}
}
void MyCanvas::OnMouseCaptureLost(wxMouseCaptureLostEvent& WXUNUSED(event))
{
StopRubberBanding();
wxLogStatus(m_owner, "Mouse capture lost");
}
#if wxUSE_GRAPHICS_CONTEXT
void MyCanvas::UseGraphicRenderer(wxGraphicsRenderer* renderer)
{

165
src/msw/overlay.cpp Normal file
View file

@ -0,0 +1,165 @@
///////////////////////////////////////////////////////////////////////////////
// Name: src/msw/overlay.cpp
// Author: Ali Kettab
// Copyright: (c) 2022 Ali Kettab
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#include "wx/wxprec.h"
#include "wx/private/overlay.h"
#include "wx/dcclient.h"
#include "wx/dcmemory.h"
#include "wx/msw/dc.h"
#include "wx/msw/private.h"
namespace // anonymous
{
wxWindow* wxCreateOverlayWindow(const wxRect& rect)
{
auto overlayWin = new wxWindow();
overlayWin->MSWCreate
(
overlayWin->GetMSWClassName(0),
nullptr, // No title
rect.GetPosition(),
rect.GetSize(),
WS_POPUP,
WS_EX_LAYERED |
WS_EX_TRANSPARENT |
WS_EX_NOACTIVATE
);
overlayWin->SetBackgroundStyle(wxBG_STYLE_PAINT);
if ( !::SetLayeredWindowAttributes(GetHwndOf(overlayWin), 0, 128,
LWA_COLORKEY | LWA_ALPHA) )
{
wxLogLastError(wxS("SetLayeredWindowAttributes()"));
}
// We intentionally don't use WS_VISIBLE when creating this window to avoid
// stealing activation from the parent, so show it using SWP_NOACTIVATE now.
::SetWindowPos(GetHwndOf(overlayWin), nullptr, 0, 0, 0, 0,
SWP_NOSIZE |
SWP_NOMOVE |
SWP_NOREDRAW |
SWP_NOOWNERZORDER |
SWP_NOACTIVATE |
SWP_SHOWWINDOW);
return overlayWin;
}
} // anonymous namespace
class wxOverlayImpl : public wxOverlay::Impl
{
public:
wxOverlayImpl() = default;
~wxOverlayImpl() = default;
virtual bool IsNative() const override { return true; }
virtual void Reset() override;
virtual bool IsOk() override;
virtual void Init(wxDC* dc, int x , int y , int width , int height) override;
virtual void BeginDrawing(wxDC* dc) override;
virtual void EndDrawing(wxDC* dc) override;
virtual void Clear(wxDC* dc) override;
public:
// window the overlay is associated with
wxWindow* m_window = nullptr;
// the overlay window itself. doesn't have to be child of any window
// and is totally managed by this class
wxWindow* m_overlayWindow = nullptr;
wxRect m_rect;
// Drawing on the overlay window is achieved by hijacking the existing wxDC.
// i.e. any drawing done through wxDC should go to the offscreen bitmap m_bitmap
// which will eventually be drawn on the overlay window.
wxBitmap m_bitmap;
wxMemoryDC m_memDC; // for memory dc construction only.
WXHDC m_hdc = 0; // the original HDC
wxDECLARE_NO_COPY_CLASS(wxOverlayImpl);
};
bool wxOverlayImpl::IsOk()
{
return m_overlayWindow != nullptr;
}
void wxOverlayImpl::Init(wxDC* dc, int , int , int , int )
{
if ( IsOk() )
return;
m_window = dc->GetWindow();
m_rect.SetSize(m_window->GetClientSize());
m_rect.SetPosition(m_window->GetScreenPosition());
m_bitmap.CreateWithDIPSize(m_rect.GetSize(), m_window->GetDPIScaleFactor());
m_overlayWindow = wxCreateOverlayWindow(m_rect);
}
void wxOverlayImpl::BeginDrawing(wxDC* dc)
{
wxCHECK_RET( IsOk(), wxS("overlay not initialized") );
m_memDC.SelectObject(m_bitmap);
auto impl = dc->GetImpl();
auto msw_impl = static_cast<wxMSWDCImpl*>(impl);
m_hdc = GetHdcOf(*msw_impl); // save the original hdc
msw_impl->SetHDC(GetHdcOf(m_memDC));
msw_impl->UpdateClipBox();
}
void wxOverlayImpl::EndDrawing(wxDC* dc)
{
wxCHECK_RET( IsOk(), wxS("overlay not initialized") );
m_memDC.SelectObject(wxNullBitmap);
auto impl = dc->GetImpl();
auto msw_impl = static_cast<wxMSWDCImpl*>(impl);
msw_impl->SetHDC(m_hdc); // restore the original hdc
msw_impl->UpdateClipBox();
wxWindowDC winDC(m_overlayWindow);
winDC.DrawBitmap(m_bitmap, wxPoint(0, 0));
}
void wxOverlayImpl::Clear(wxDC* WXUNUSED(dc))
{
wxCHECK_RET( IsOk(), wxS("overlay not initialized") );
// Note that the colour used here is the same one that we specify as
// LWA_COLORKEY when creating the layered window, so it is actually
// transparent.
m_memDC.SetBackground(*wxBLACK);
m_memDC.Clear();
}
void wxOverlayImpl::Reset()
{
if ( IsOk() )
{
m_overlayWindow->Destroy();
m_overlayWindow = nullptr;
}
}
wxOverlay::Impl* wxOverlay::Create()
{
return new wxOverlayImpl;
}