Add first version of wxBitmapBundle and use it in wxToolBar

This first version provides only a generic implementation of
wxBitmapBundle using a collection of bitmaps and only supports using it
in wxToolBar in wxMSW and wxGTK.

More methods of creating wxBitmapBundle will be provided later and more
functions taking wxBitmap will be changed to take wxBitmapBundle later
too and, of course, all the other ports will be updated to use the new
API too.
This commit is contained in:
Vadim Zeitlin
2021-09-24 00:35:06 +01:00
parent 44fe94fad8
commit 97f6c85d9b
31 changed files with 874 additions and 174 deletions

View File

@@ -4049,6 +4049,7 @@ COND_USE_GUI_1_ALL_GUI_HEADERS = \
wx/propdlg.h \
wx/generic/creddlgg.h \
wx/creddlg.h \
wx/bmpbndl.h \
$(LOWLEVEL_HDR) \
$(GUI_CORE_HEADERS) \
wx/mediactrl.h \
@@ -4709,7 +4710,8 @@ COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS = \
monodll_laywin.o \
monodll_calctrlg.o \
monodll_creddlgg.o \
monodll_rowheightcache.o
monodll_rowheightcache.o \
monodll_bmpbndl.o
@COND_USE_GUI_1_WXUNIV_0@__CORE_SRC_OBJECTS = $(COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS)
COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS = \
$(__LOWLEVEL_SRC_OBJECTS_1) \
@@ -4971,7 +4973,8 @@ COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS = \
monodll_laywin.o \
monodll_calctrlg.o \
monodll_creddlgg.o \
monodll_rowheightcache.o
monodll_rowheightcache.o \
monodll_bmpbndl.o
@COND_USE_GUI_1_WXUNIV_1@__CORE_SRC_OBJECTS = $(COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS)
COND_TOOLKIT_DFB___LOWLEVEL_SRC_OBJECTS = \
monodll_fontmgrcmn.o \
@@ -6705,7 +6708,8 @@ COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS_1 = \
monolib_laywin.o \
monolib_calctrlg.o \
monolib_creddlgg.o \
monolib_rowheightcache.o
monolib_rowheightcache.o \
monolib_bmpbndl.o
@COND_USE_GUI_1_WXUNIV_0@__CORE_SRC_OBJECTS_1 = $(COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS_1)
COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS_1 = \
$(__LOWLEVEL_SRC_OBJECTS_3) \
@@ -6967,7 +6971,8 @@ COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS_1 = \
monolib_laywin.o \
monolib_calctrlg.o \
monolib_creddlgg.o \
monolib_rowheightcache.o
monolib_rowheightcache.o \
monolib_bmpbndl.o
@COND_USE_GUI_1_WXUNIV_1@__CORE_SRC_OBJECTS_1 = $(COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS_1)
COND_TOOLKIT_DFB___LOWLEVEL_SRC_OBJECTS_2 = \
monolib_fontmgrcmn.o \
@@ -8854,7 +8859,8 @@ COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS_2 = \
coredll_laywin.o \
coredll_calctrlg.o \
coredll_creddlgg.o \
coredll_rowheightcache.o
coredll_rowheightcache.o \
coredll_bmpbndl.o
@COND_USE_GUI_1_WXUNIV_0@__CORE_SRC_OBJECTS_2 = $(COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS_2)
COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS_2 = \
$(__LOWLEVEL_SRC_OBJECTS_5) \
@@ -9116,7 +9122,8 @@ COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS_2 = \
coredll_laywin.o \
coredll_calctrlg.o \
coredll_creddlgg.o \
coredll_rowheightcache.o
coredll_rowheightcache.o \
coredll_bmpbndl.o
@COND_USE_GUI_1_WXUNIV_1@__CORE_SRC_OBJECTS_2 = $(COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS_2)
COND_TOOLKIT_DFB___LOWLEVEL_SRC_OBJECTS_4 = \
coredll_fontmgrcmn.o \
@@ -10579,7 +10586,8 @@ COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS_3 = \
corelib_laywin.o \
corelib_calctrlg.o \
corelib_creddlgg.o \
corelib_rowheightcache.o
corelib_rowheightcache.o \
corelib_bmpbndl.o
@COND_USE_GUI_1_WXUNIV_0@__CORE_SRC_OBJECTS_3 = $(COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS_3)
COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS_3 = \
$(__LOWLEVEL_SRC_OBJECTS_7) \
@@ -10841,7 +10849,8 @@ COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS_3 = \
corelib_laywin.o \
corelib_calctrlg.o \
corelib_creddlgg.o \
corelib_rowheightcache.o
corelib_rowheightcache.o \
corelib_bmpbndl.o
@COND_USE_GUI_1_WXUNIV_1@__CORE_SRC_OBJECTS_3 = $(COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS_3)
COND_TOOLKIT_DFB___LOWLEVEL_SRC_OBJECTS_6 = \
corelib_fontmgrcmn.o \
@@ -21014,6 +21023,9 @@ monodll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONODLL_ODEP)
@COND_USE_GUI_1@monodll_rowheightcache.o: $(srcdir)/src/generic/rowheightcache.cpp $(MONODLL_ODEP)
@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/generic/rowheightcache.cpp
@COND_USE_GUI_1@monodll_bmpbndl.o: $(srcdir)/src/common/bmpbndl.cpp $(MONODLL_ODEP)
@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/bmpbndl.cpp
@COND_TOOLKIT_OSX_COCOA_USE_GUI_1@monodll_osx_cocoa_mediactrl.o: $(srcdir)/src/osx/cocoa/mediactrl.mm $(MONODLL_ODEP)
@COND_TOOLKIT_OSX_COCOA_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/mediactrl.mm
@@ -26303,6 +26315,9 @@ monolib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONOLIB_ODEP)
@COND_USE_GUI_1@monolib_rowheightcache.o: $(srcdir)/src/generic/rowheightcache.cpp $(MONOLIB_ODEP)
@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/generic/rowheightcache.cpp
@COND_USE_GUI_1@monolib_bmpbndl.o: $(srcdir)/src/common/bmpbndl.cpp $(MONOLIB_ODEP)
@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/bmpbndl.cpp
@COND_TOOLKIT_OSX_COCOA_USE_GUI_1@monolib_osx_cocoa_mediactrl.o: $(srcdir)/src/osx/cocoa/mediactrl.mm $(MONOLIB_ODEP)
@COND_TOOLKIT_OSX_COCOA_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/mediactrl.mm
@@ -31697,6 +31712,9 @@ coredll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(COREDLL_ODEP)
@COND_USE_GUI_1@coredll_rowheightcache.o: $(srcdir)/src/generic/rowheightcache.cpp $(COREDLL_ODEP)
@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/generic/rowheightcache.cpp
@COND_USE_GUI_1@coredll_bmpbndl.o: $(srcdir)/src/common/bmpbndl.cpp $(COREDLL_ODEP)
@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/common/bmpbndl.cpp
corelib_event.o: $(srcdir)/src/common/event.cpp $(CORELIB_ODEP)
$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/common/event.cpp
@@ -35951,6 +35969,9 @@ corelib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(CORELIB_ODEP)
@COND_USE_GUI_1@corelib_rowheightcache.o: $(srcdir)/src/generic/rowheightcache.cpp $(CORELIB_ODEP)
@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/generic/rowheightcache.cpp
@COND_USE_GUI_1@corelib_bmpbndl.o: $(srcdir)/src/common/bmpbndl.cpp $(CORELIB_ODEP)
@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/common/bmpbndl.cpp
advdll_version_rc.o: $(srcdir)/src/msw/version.rc $(ADVDLL_ODEP)
$(WINDRES) -i$< -o$@ $(__INC_TIFF_BUILD_p_54) $(__INC_TIFF_p_54) $(__INC_JPEG_p_54) $(__INC_PNG_p_53) $(__INC_ZLIB_p_67) $(__INC_REGEX_p_65) $(__INC_EXPAT_p_65) --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_66) $(__DEBUG_DEFINE_p_66) $(__EXCEPTIONS_DEFINE_p_65) $(__RTTI_DEFINE_p_65) $(__THREAD_DEFINE_p_65) --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include --define WXUSINGDLL --define WXMAKINGDLL_ADV

View File

@@ -1015,6 +1015,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
src/generic/calctrlg.cpp
src/generic/creddlgg.cpp
src/generic/rowheightcache.cpp
src/common/bmpbndl.cpp
</set>
<set var="GUI_CMN_HDR" hints="files">
wx/affinematrix2dbase.h
@@ -1306,6 +1307,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
wx/propdlg.h
wx/generic/creddlgg.h
wx/creddlg.h
wx/bmpbndl.h
</set>
<!-- ====================================================================== -->

View File

@@ -918,6 +918,7 @@ set(GUI_CMN_SRC
src/generic/creddlgg.cpp
src/generic/rowheightcache.cpp
src/generic/animateg.cpp
src/common/bmpbndl.cpp
)
set(GUI_CMN_HDR
@@ -1209,6 +1210,7 @@ set(GUI_CMN_HDR
wx/creddlg.h
wx/generic/creddlgg.h
wx/generic/animate.h
wx/bmpbndl.h
)
set(UNIX_SRC

View File

@@ -741,6 +741,7 @@ GUI_CMN_SRC =
src/common/artstd.cpp
src/common/arttango.cpp
src/common/bmpbase.cpp
src/common/bmpbndl.cpp
src/common/bmpbtncmn.cpp
src/common/bmpcboxcmn.cpp
src/common/bookctrl.cpp
@@ -950,6 +951,7 @@ GUI_CMN_HDR =
wx/artprov.h
wx/bannerwindow.h
wx/bitmap.h
wx/bmpbndl.h
wx/bmpbuttn.h
wx/bmpcbox.h
wx/bookctrl.h

View File

@@ -2201,7 +2201,8 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_laywin.o \
$(OBJS)\monodll_calctrlg.o \
$(OBJS)\monodll_creddlgg.o \
$(OBJS)\monodll_rowheightcache.o
$(OBJS)\monodll_rowheightcache.o \
$(OBJS)\monodll_bmpbndl.o
endif
endif
ifeq ($(USE_GUI),1)
@@ -2531,7 +2532,8 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_laywin.o \
$(OBJS)\monodll_calctrlg.o \
$(OBJS)\monodll_creddlgg.o \
$(OBJS)\monodll_rowheightcache.o
$(OBJS)\monodll_rowheightcache.o \
$(OBJS)\monodll_bmpbndl.o
endif
endif
ifeq ($(USE_STC),1)
@@ -3043,7 +3045,8 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_laywin.o \
$(OBJS)\monolib_calctrlg.o \
$(OBJS)\monolib_creddlgg.o \
$(OBJS)\monolib_rowheightcache.o
$(OBJS)\monolib_rowheightcache.o \
$(OBJS)\monolib_bmpbndl.o
endif
endif
ifeq ($(USE_GUI),1)
@@ -3373,7 +3376,8 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_laywin.o \
$(OBJS)\monolib_calctrlg.o \
$(OBJS)\monolib_creddlgg.o \
$(OBJS)\monolib_rowheightcache.o
$(OBJS)\monolib_rowheightcache.o \
$(OBJS)\monolib_bmpbndl.o
endif
endif
ifeq ($(USE_STC),1)
@@ -3768,7 +3772,8 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_laywin.o \
$(OBJS)\coredll_calctrlg.o \
$(OBJS)\coredll_creddlgg.o \
$(OBJS)\coredll_rowheightcache.o
$(OBJS)\coredll_rowheightcache.o \
$(OBJS)\coredll_bmpbndl.o
endif
endif
ifeq ($(USE_GUI),1)
@@ -4098,7 +4103,8 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_laywin.o \
$(OBJS)\coredll_calctrlg.o \
$(OBJS)\coredll_creddlgg.o \
$(OBJS)\coredll_rowheightcache.o
$(OBJS)\coredll_rowheightcache.o \
$(OBJS)\coredll_bmpbndl.o
endif
endif
ifeq ($(MONOLITHIC),0)
@@ -4451,7 +4457,8 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_laywin.o \
$(OBJS)\corelib_calctrlg.o \
$(OBJS)\corelib_creddlgg.o \
$(OBJS)\corelib_rowheightcache.o
$(OBJS)\corelib_rowheightcache.o \
$(OBJS)\corelib_bmpbndl.o
endif
endif
ifeq ($(USE_GUI),1)
@@ -4781,7 +4788,8 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_laywin.o \
$(OBJS)\corelib_calctrlg.o \
$(OBJS)\corelib_creddlgg.o \
$(OBJS)\corelib_rowheightcache.o
$(OBJS)\corelib_rowheightcache.o \
$(OBJS)\corelib_bmpbndl.o
endif
endif
ifeq ($(SHARED),1)
@@ -9456,6 +9464,11 @@ $(OBJS)\monodll_rowheightcache.o: ../../src/generic/rowheightcache.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\monodll_bmpbndl.o: ../../src/common/bmpbndl.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
endif
$(OBJS)\monodll_version_rc.o: ../../src/msw/version.rc
$(WINDRES) -i$< -o$@ --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../3rdparty/pcre/src/wx --include-dir ../../src/expat/expat/lib --define __WXMSW__ $(__WXUNIV_DEFINE_p_66) $(__DEBUG_DEFINE_p_66) $(__NDEBUG_DEFINE_p_65) $(__EXCEPTIONS_DEFINE_p_65) $(__RTTI_DEFINE_p_65) $(__THREAD_DEFINE_p_65) $(__UNICODE_DEFINE_p_67) --include-dir $(SETUPHDIR) --include-dir ../../include $(__CAIRO_INCLUDEDIR_p) --define WXBUILDING --define WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)$(WXCOMPILER)$(VENDORTAG) --include-dir ../../src/stc/scintilla/include --include-dir ../../src/stc/scintilla/lexlib --include-dir ../../src/stc/scintilla/src --define __WX__ --define SCI_LEXER --define NO_CXX11_REGEX --define LINK_LEXERS --define wxUSE_BASE=1 --define WXMAKINGDLL
@@ -12030,6 +12043,11 @@ $(OBJS)\monolib_rowheightcache.o: ../../src/generic/rowheightcache.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\monolib_bmpbndl.o: ../../src/common/bmpbndl.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
endif
$(OBJS)\basedll_dummy.o: ../../src/common/dummy.cpp
$(CXX) -c -o $@ $(BASEDLL_CXXFLAGS) $(CPPDEPS) $<
@@ -14577,6 +14595,11 @@ $(OBJS)\coredll_rowheightcache.o: ../../src/generic/rowheightcache.cpp
$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\coredll_bmpbndl.o: ../../src/common/bmpbndl.cpp
$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
endif
$(OBJS)\corelib_dummy.o: ../../src/common/dummy.cpp
$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
@@ -16317,6 +16340,11 @@ $(OBJS)\corelib_rowheightcache.o: ../../src/generic/rowheightcache.cpp
$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\corelib_bmpbndl.o: ../../src/common/bmpbndl.cpp
$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
endif
$(OBJS)\advdll_dummy.o: ../../src/common/dummy.cpp
$(CXX) -c -o $@ $(ADVDLL_CXXFLAGS) $(CPPDEPS) $<

View File

@@ -2531,7 +2531,8 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_laywin.obj \
$(OBJS)\monodll_calctrlg.obj \
$(OBJS)\monodll_creddlgg.obj \
$(OBJS)\monodll_rowheightcache.obj
$(OBJS)\monodll_rowheightcache.obj \
$(OBJS)\monodll_bmpbndl.obj
!endif
!if "$(USE_GUI)" == "1" && "$(WXUNIV)" == "1"
____CORE_SRC_FILENAMES_OBJECTS = \
@@ -2859,7 +2860,8 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_laywin.obj \
$(OBJS)\monodll_calctrlg.obj \
$(OBJS)\monodll_creddlgg.obj \
$(OBJS)\monodll_rowheightcache.obj
$(OBJS)\monodll_rowheightcache.obj \
$(OBJS)\monodll_bmpbndl.obj
!endif
!if "$(USE_STC)" == "1"
____MONOLIB_STC_SRC_FILENAMES_OBJECTS = \
@@ -3373,7 +3375,8 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_laywin.obj \
$(OBJS)\monolib_calctrlg.obj \
$(OBJS)\monolib_creddlgg.obj \
$(OBJS)\monolib_rowheightcache.obj
$(OBJS)\monolib_rowheightcache.obj \
$(OBJS)\monolib_bmpbndl.obj
!endif
!if "$(USE_GUI)" == "1" && "$(WXUNIV)" == "1"
____CORE_SRC_FILENAMES_1_OBJECTS = \
@@ -3701,7 +3704,8 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_laywin.obj \
$(OBJS)\monolib_calctrlg.obj \
$(OBJS)\monolib_creddlgg.obj \
$(OBJS)\monolib_rowheightcache.obj
$(OBJS)\monolib_rowheightcache.obj \
$(OBJS)\monolib_bmpbndl.obj
!endif
!if "$(USE_STC)" == "1"
____MONOLIB_STC_SRC_FILENAMES_1_OBJECTS = \
@@ -4148,7 +4152,8 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_laywin.obj \
$(OBJS)\coredll_calctrlg.obj \
$(OBJS)\coredll_creddlgg.obj \
$(OBJS)\coredll_rowheightcache.obj
$(OBJS)\coredll_rowheightcache.obj \
$(OBJS)\coredll_bmpbndl.obj
!endif
!if "$(USE_GUI)" == "1" && "$(WXUNIV)" == "1"
____CORE_SRC_FILENAMES_2_OBJECTS = \
@@ -4476,7 +4481,8 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_laywin.obj \
$(OBJS)\coredll_calctrlg.obj \
$(OBJS)\coredll_creddlgg.obj \
$(OBJS)\coredll_rowheightcache.obj
$(OBJS)\coredll_rowheightcache.obj \
$(OBJS)\coredll_bmpbndl.obj
!endif
!if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "0" && "$(USE_GUI)" == "1"
__corelib___depname = \
@@ -4829,7 +4835,8 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_laywin.obj \
$(OBJS)\corelib_calctrlg.obj \
$(OBJS)\corelib_creddlgg.obj \
$(OBJS)\corelib_rowheightcache.obj
$(OBJS)\corelib_rowheightcache.obj \
$(OBJS)\corelib_bmpbndl.obj
!endif
!if "$(USE_GUI)" == "1" && "$(WXUNIV)" == "1"
____CORE_SRC_FILENAMES_3_OBJECTS = \
@@ -5157,7 +5164,8 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_laywin.obj \
$(OBJS)\corelib_calctrlg.obj \
$(OBJS)\corelib_creddlgg.obj \
$(OBJS)\corelib_rowheightcache.obj
$(OBJS)\corelib_rowheightcache.obj \
$(OBJS)\corelib_bmpbndl.obj
!endif
!if "$(SHARED)" == "1"
____wxcore_namedll_DEP = $(__coredll___depname)
@@ -9887,6 +9895,11 @@ $(OBJS)\monodll_rowheightcache.obj: ..\..\src\generic\rowheightcache.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\generic\rowheightcache.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\monodll_bmpbndl.obj: ..\..\src\common\bmpbndl.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\common\bmpbndl.cpp
!endif
$(OBJS)\monodll_version.res: ..\..\src\msw\version.rc
rc /fo$@ /d WIN32 /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\3rdparty\pcre\src\wx /i ..\..\src\expat\expat\lib $(____DEBUGRUNTIME_6) /d _CRT_SECURE_NO_DEPRECATE=1 /d _CRT_NON_CONFORMING_SWPRINTFS=1 /d _SCL_SECURE_NO_WARNINGS=1 $(__NO_VC_CRTDBG_p_72) $(__TARGET_CPU_COMPFLAG_p_72) /d __WXMSW__ $(__WXUNIV_DEFINE_p_66) $(__DEBUG_DEFINE_p_66) $(__NDEBUG_DEFINE_p_65) $(__EXCEPTIONS_DEFINE_p_65) $(__RTTI_DEFINE_p_65) $(__THREAD_DEFINE_p_65) $(__UNICODE_DEFINE_p_67) /i $(SETUPHDIR) /i ..\..\include $(____CAIRO_INCLUDEDIR_FILENAMES_4) /d WXBUILDING /d WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)$(WXCOMPILER)$(VENDORTAG) /i ..\..\src\stc\scintilla\include /i ..\..\src\stc\scintilla\lexlib /i ..\..\src\stc\scintilla\src /d __WX__ /d SCI_LEXER /d NO_CXX11_REGEX /d LINK_LEXERS /d wxUSE_BASE=1 /d WXMAKINGDLL ..\..\src\msw\version.rc
@@ -12461,6 +12474,11 @@ $(OBJS)\monolib_rowheightcache.obj: ..\..\src\generic\rowheightcache.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\generic\rowheightcache.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\monolib_bmpbndl.obj: ..\..\src\common\bmpbndl.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\bmpbndl.cpp
!endif
$(OBJS)\basedll_dummy.obj: ..\..\src\common\dummy.cpp
$(CXX) /c /nologo /TP /Fo$@ $(BASEDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
@@ -15008,6 +15026,11 @@ $(OBJS)\coredll_rowheightcache.obj: ..\..\src\generic\rowheightcache.cpp
$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\generic\rowheightcache.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\coredll_bmpbndl.obj: ..\..\src\common\bmpbndl.cpp
$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\common\bmpbndl.cpp
!endif
$(OBJS)\corelib_dummy.obj: ..\..\src\common\dummy.cpp
$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
@@ -16748,6 +16771,11 @@ $(OBJS)\corelib_rowheightcache.obj: ..\..\src\generic\rowheightcache.cpp
$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) ..\..\src\generic\rowheightcache.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\corelib_bmpbndl.obj: ..\..\src\common\bmpbndl.cpp
$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) ..\..\src\common\bmpbndl.cpp
!endif
$(OBJS)\advdll_dummy.obj: ..\..\src\common\dummy.cpp
$(CXX) /c /nologo /TP /Fo$@ $(ADVDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp

View File

@@ -459,6 +459,7 @@
<ClCompile Include="..\..\src\common\artstd.cpp" />
<ClCompile Include="..\..\src\common\arttango.cpp" />
<ClCompile Include="..\..\src\common\bmpbase.cpp" />
<ClCompile Include="..\..\src\common\bmpbndl.cpp" />
<ClCompile Include="..\..\src\common\bmpbtncmn.cpp" />
<ClCompile Include="..\..\src\common\bookctrl.cpp" />
<ClCompile Include="..\..\src\common\btncmn.cpp" />
@@ -1087,6 +1088,7 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</CustomBuild>
<ClInclude Include="..\..\include\wx\bmpbndl.h" />
<ClInclude Include="..\..\include\wx\msw\accel.h" />
<ClInclude Include="..\..\include\wx\msw\appprogress.h" />
<ClInclude Include="..\..\include\wx\msw\ole\access.h" />

View File

@@ -1068,6 +1068,9 @@
<ClCompile Include="..\..\src\xrc\xmlreshandler.cpp">
<Filter>Common Sources</Filter>
</ClCompile>
<ClCompile Include="..\..\src\common\bmpbndl.cpp">
<Filter>Common Sources</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\src\msw\version.rc">
@@ -2299,6 +2302,9 @@
<ClInclude Include="..\..\include\wx\xrc\xmlreshandler.h">
<Filter>Common Headers</Filter>
</ClInclude>
<ClInclude Include="..\..\include\wx\bmpbndl.h">
<Filter>Common Headers</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="..\..\include\wx\msw\setup.h">

View File

@@ -785,6 +785,10 @@
RelativePath="..\..\src\common\bmpbase.cpp"
>
</File>
<File
RelativePath="..\..\src\common\bmpbndl.cpp"
>
</File>
<File
RelativePath="..\..\src\common\bmpbtncmn.cpp"
>
@@ -3316,6 +3320,10 @@
RelativePath="..\..\include\wx\bitmap.h"
>
</File>
<File
RelativePath="..\..\include\wx\bmpbndl.h"
>
</File>
<File
RelativePath="..\..\include\wx\bmpbuttn.h"
>

View File

@@ -781,6 +781,10 @@
RelativePath="..\..\src\common\bmpbase.cpp"
>
</File>
<File
RelativePath="..\..\src\common\bmpbndl.cpp"
>
</File>
<File
RelativePath="..\..\src\common\bmpbtncmn.cpp"
>
@@ -3312,6 +3316,10 @@
RelativePath="..\..\include\wx\bitmap.h"
>
</File>
<File
RelativePath="..\..\include\wx\bmpbndl.h"
>
</File>
<File
RelativePath="..\..\include\wx\bmpbuttn.h"
>

120
include/wx/bmpbndl.h Normal file
View File

@@ -0,0 +1,120 @@
///////////////////////////////////////////////////////////////////////////////
// Name: wx/bmpbndl.h
// Purpose: Declaration of wxBitmapBundle class.
// Author: Vadim Zeitlin
// Created: 2021-09-22
// Copyright: (c) 2021 Vadim Zeitlin <vadim@wxwidgets.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifndef _WX_BMPBNDL_H_
#define _WX_BMPBNDL_H_
#include "wx/bitmap.h"
#include "wx/object.h"
#include "wx/vector.h"
class wxBitmapBundleImpl;
// ----------------------------------------------------------------------------
// wxBitmapBundle provides 1 or more versions of a bitmap, all bundled together
// ----------------------------------------------------------------------------
// This class has value semantics and can be copied cheaply.
class WXDLLIMPEXP_CORE wxBitmapBundle
{
public:
// Default ctor constructs an empty bundle which can't be used for
// anything, but can be assigned something later.
wxBitmapBundle();
// This conversion ctor from a single bitmap does the same thing as
// FromBitmap() and only exists for interoperability with the existing code
// using wxBitmap.
wxBitmapBundle(const wxBitmap& bitmap);
// Another conversion ctor from a single image: this one is needed to allow
// passing wxImage to the functions that used to take wxBitmap but now take
// wxBitmapBundle.
wxBitmapBundle(const wxImage& image);
// Default copy ctor and assignment operator and dtor would be ok, but need
// to be defined out of line, where wxBitmapBundleImpl is fully declared.
wxBitmapBundle(const wxBitmapBundle& other);
wxBitmapBundle& operator=(const wxBitmapBundle& other);
~wxBitmapBundle();
// Create from the given collection of bitmaps (all of which must be valid,
// but if the vector itself is empty, empty bundle is returned).
static wxBitmapBundle FromBitmaps(const wxVector<wxBitmap>& bitmaps);
static wxBitmapBundle FromBitmaps(const wxBitmap& bitmap1,
const wxBitmap& bitmap2);
// Create from a single bitmap (this is only useful for compatibility
// with the existing code). Returns empty bundle if bitmap is invalid.
static wxBitmapBundle FromBitmap(const wxBitmap& bitmap);
static wxBitmapBundle FromImage(const wxImage& image);
// Check if bitmap bundle is non-empty.
bool IsOk() const { return m_impl; }
// Get the size of the bitmap represented by this bundle when using the
// default DPI, i.e. 100% scaling. Returns invalid size for empty bundle.
wxSize GetDefaultSize() const;
// Get bitmap of the specified size, creating a new bitmap from the closest
// available size by rescaling it if necessary.
//
// If size == wxDefaultSize, GetDefaultSize() is used for it instead.
wxBitmap GetBitmap(const wxSize size) const;
private:
typedef wxObjectDataPtr<wxBitmapBundleImpl> wxBitmapBundleImplPtr;
// Private ctor used by static factory functions to create objects of this
// class. It takes ownership of the pointer (which must be non-null).
explicit wxBitmapBundle(wxBitmapBundleImpl* impl);
wxBitmapBundleImplPtr m_impl;
};
// Inline functions implementation.
/* static */ inline
wxBitmapBundle wxBitmapBundle::FromBitmaps(const wxBitmap& bitmap1,
const wxBitmap& bitmap2)
{
wxVector<wxBitmap> bitmaps;
if ( bitmap1.IsOk() )
bitmaps.push_back(bitmap1);
if ( bitmap2.IsOk() )
bitmaps.push_back(bitmap2);
return FromBitmaps(bitmaps);
}
/* static */ inline
wxBitmapBundle wxBitmapBundle::FromBitmap(const wxBitmap& bitmap)
{
if ( !bitmap.IsOk() )
return wxBitmapBundle();
wxVector<wxBitmap> bitmaps;
bitmaps.push_back(bitmap);
return FromBitmaps(bitmaps);
}
/* static */ inline
wxBitmapBundle wxBitmapBundle::FromImage(const wxImage& image)
{
if ( !image.IsOk() )
return wxBitmapBundle();
return FromBitmap(wxBitmap(image));
}
#endif // _WX_BMPBNDL_H_

View File

@@ -47,8 +47,8 @@ public:
virtual void SetWindowStyleFlag( long style ) wxOVERRIDE;
virtual void SetToolNormalBitmap(int id, const wxBitmap& bitmap) wxOVERRIDE;
virtual void SetToolDisabledBitmap(int id, const wxBitmap& bitmap) wxOVERRIDE;
virtual void SetToolNormalBitmap(int id, const wxBitmapBundle& bitmap) wxOVERRIDE;
virtual void SetToolDisabledBitmap(int id, const wxBitmapBundle& bitmap) wxOVERRIDE;
virtual bool Realize() wxOVERRIDE;
@@ -57,8 +57,8 @@ public:
virtual wxToolBarToolBase *CreateTool(int id,
const wxString& label,
const wxBitmap& bitmap1,
const wxBitmap& bitmap2 = wxNullBitmap,
const wxBitmapBundle& bitmap1,
const wxBitmapBundle& bitmap2 = wxNullBitmap,
wxItemKind kind = wxITEM_NORMAL,
wxObject *clientData = NULL,
const wxString& shortHelpString = wxEmptyString,

View File

@@ -83,8 +83,8 @@ protected:
virtual wxToolBarToolBase *CreateTool(int id,
const wxString& label,
const wxBitmap& bitmap1,
const wxBitmap& bitmap2,
const wxBitmapBundle& bitmap1,
const wxBitmapBundle& bitmap2,
wxItemKind kind,
wxObject *clientData,
const wxString& shortHelpString,

View File

@@ -62,8 +62,8 @@ private:
virtual wxToolBarToolBase *CreateTool(int id,
const wxString& label,
const wxBitmap& bmpNormal,
const wxBitmap& bmpDisabled,
const wxBitmapBundle& bmpNormal,
const wxBitmapBundle& bmpDisabled,
wxItemKind kind,
wxObject *clientData,
const wxString& shortHelp,

View File

@@ -53,8 +53,8 @@ public:
virtual void SetRows(int nRows) wxOVERRIDE;
virtual void SetToolNormalBitmap(int id, const wxBitmap& bitmap) wxOVERRIDE;
virtual void SetToolDisabledBitmap(int id, const wxBitmap& bitmap) wxOVERRIDE;
virtual void SetToolNormalBitmap(int id, const wxBitmapBundle& bitmap) wxOVERRIDE;
virtual void SetToolDisabledBitmap(int id, const wxBitmapBundle& bitmap) wxOVERRIDE;
virtual void SetToolPacking(int packing) wxOVERRIDE;
@@ -89,8 +89,8 @@ public:
virtual wxToolBarToolBase *CreateTool(int id,
const wxString& label,
const wxBitmap& bmpNormal,
const wxBitmap& bmpDisabled = wxNullBitmap,
const wxBitmapBundle& bmpNormal,
const wxBitmapBundle& bmpDisabled = wxNullBitmap,
wxItemKind kind = wxITEM_NORMAL,
wxObject *clientData = NULL,
const wxString& shortHelp = wxEmptyString,

View File

@@ -0,0 +1,37 @@
///////////////////////////////////////////////////////////////////////////////
// Name: wx/private/bmpbndl.h
// Purpose: wxBitmapBundleImpl declaration.
// Author: Vadim Zeitlin
// Created: 2021-09-22
// Copyright: (c) 2021 Vadim Zeitlin <vadim@wxwidgets.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifndef _WX_PRIVATE_BMPBNDL_H_
#define _WX_PRIVATE_BMPBNDL_H_
#include "wx/object.h"
// ----------------------------------------------------------------------------
// wxBitmapBundleImpl is the base class for all wxBitmapBundle implementations
// ----------------------------------------------------------------------------
// This class inherits from wxRefCounter to make it possible to use it with
// wxObjectDataPtr in wxBitmapBundle.
class wxBitmapBundleImpl : public wxRefCounter
{
public:
// Return the size of the bitmaps represented by this bundle in the default
// DPI (a.k.a. 100% resolution).
//
// Must always return a valid size.
virtual wxSize GetDefaultSize() const = 0;
// Retrieve the bitmap of exactly the given size.
//
// Note that this function is non-const because it may generate the bitmap
// on demand and cache it.
virtual wxBitmap GetBitmap(const wxSize size) = 0;
};
#endif // _WX_PRIVATE_BMPBNDL_H_

View File

@@ -43,15 +43,15 @@ public:
virtual void SetWindowStyleFlag( long style ) wxOVERRIDE;
virtual void SetToolShortHelp(int id, const wxString& helpString) wxOVERRIDE;
virtual void SetToolNormalBitmap(int id, const wxBitmap& bitmap) wxOVERRIDE;
virtual void SetToolDisabledBitmap(int id, const wxBitmap& bitmap) wxOVERRIDE;
virtual void SetToolNormalBitmap(int id, const wxBitmapBundle& bitmap) wxOVERRIDE;
virtual void SetToolDisabledBitmap(int id, const wxBitmapBundle& bitmap) wxOVERRIDE;
virtual bool Realize() wxOVERRIDE;
virtual wxToolBarToolBase *CreateTool(int toolid,
const wxString& label,
const wxBitmap& bmpNormal,
const wxBitmap& bmpDisabled = wxNullBitmap,
const wxBitmapBundle& bmpNormal,
const wxBitmapBundle& bmpDisabled = wxNullBitmap,
wxItemKind kind = wxITEM_NORMAL,
wxObject *clientData = NULL,
const wxString& shortHelp = wxEmptyString,

View File

@@ -20,6 +20,7 @@
#if wxUSE_TOOLBAR
#include "wx/bitmap.h"
#include "wx/bmpbndl.h"
#include "wx/list.h"
#include "wx/control.h"
@@ -63,8 +64,8 @@ public:
wxToolBarToolBase(wxToolBarBase *tbar = NULL,
int toolid = wxID_SEPARATOR,
const wxString& label = wxEmptyString,
const wxBitmap& bmpNormal = wxNullBitmap,
const wxBitmap& bmpDisabled = wxNullBitmap,
const wxBitmapBundle& bmpNormal = wxNullBitmap,
const wxBitmapBundle& bmpDisabled = wxNullBitmap,
wxItemKind kind = wxITEM_NORMAL,
wxObject *clientData = NULL,
const wxString& shortHelpString = wxEmptyString,
@@ -145,11 +146,13 @@ public:
{ return m_kind == wxITEM_CHECK || m_kind == wxITEM_RADIO; }
// attributes
const wxBitmap& GetNormalBitmap() const { return m_bmpNormal; }
const wxBitmap& GetDisabledBitmap() const { return m_bmpDisabled; }
wxBitmap GetNormalBitmap(const wxSize& size = wxDefaultSize) const
{ return m_bmpNormal.GetBitmap(size); }
wxBitmap GetDisabledBitmap(const wxSize& size = wxDefaultSize) const
{ return m_bmpDisabled.GetBitmap(size); }
const wxBitmap& GetBitmap() const
{ return IsEnabled() ? GetNormalBitmap() : GetDisabledBitmap(); }
wxBitmap GetBitmap(const wxSize& size = wxDefaultSize) const
{ return IsEnabled() ? GetNormalBitmap(size) : GetDisabledBitmap(size); }
const wxString& GetLabel() const { return m_label; }
@@ -177,8 +180,8 @@ public:
void Toggle() { Toggle(!IsToggled()); }
void SetNormalBitmap(const wxBitmap& bmp) { m_bmpNormal = bmp; }
void SetDisabledBitmap(const wxBitmap& bmp) { m_bmpDisabled = bmp; }
void SetNormalBitmap(const wxBitmapBundle& bmp) { m_bmpNormal = bmp; }
void SetDisabledBitmap(const wxBitmapBundle& bmp) { m_bmpDisabled = bmp; }
virtual void SetLabel(const wxString& label) { m_label = label; }
@@ -251,8 +254,8 @@ protected:
bool m_enabled;
// normal and disabled bitmaps for the tool, both can be invalid
wxBitmap m_bmpNormal;
wxBitmap m_bmpDisabled;
wxBitmapBundle m_bmpNormal;
wxBitmapBundle m_bmpDisabled;
// the button label
wxString m_label;
@@ -290,8 +293,8 @@ public:
// is created and used as the disabled image.
wxToolBarToolBase *AddTool(int toolid,
const wxString& label,
const wxBitmap& bitmap,
const wxBitmap& bmpDisabled,
const wxBitmapBundle& bitmap,
const wxBitmapBundle& bmpDisabled,
wxItemKind kind = wxITEM_NORMAL,
const wxString& shortHelp = wxEmptyString,
const wxString& longHelp = wxEmptyString,
@@ -304,7 +307,7 @@ public:
// the most common AddTool() version
wxToolBarToolBase *AddTool(int toolid,
const wxString& label,
const wxBitmap& bitmap,
const wxBitmapBundle& bitmap,
const wxString& shortHelp = wxEmptyString,
wxItemKind kind = wxITEM_NORMAL)
{
@@ -314,8 +317,8 @@ public:
// add a check tool, i.e. a tool which can be toggled
wxToolBarToolBase *AddCheckTool(int toolid,
const wxString& label,
const wxBitmap& bitmap,
const wxBitmap& bmpDisabled = wxNullBitmap,
const wxBitmapBundle& bitmap,
const wxBitmapBundle& bmpDisabled = wxNullBitmap,
const wxString& shortHelp = wxEmptyString,
const wxString& longHelp = wxEmptyString,
wxObject *clientData = NULL)
@@ -328,8 +331,8 @@ public:
// other toggled radio tools in the same group when it happens
wxToolBarToolBase *AddRadioTool(int toolid,
const wxString& label,
const wxBitmap& bitmap,
const wxBitmap& bmpDisabled = wxNullBitmap,
const wxBitmapBundle& bitmap,
const wxBitmapBundle& bmpDisabled = wxNullBitmap,
const wxString& shortHelp = wxEmptyString,
const wxString& longHelp = wxEmptyString,
wxObject *clientData = NULL)
@@ -346,8 +349,8 @@ public:
size_t pos,
int toolid,
const wxString& label,
const wxBitmap& bitmap,
const wxBitmap& bmpDisabled = wxNullBitmap,
const wxBitmapBundle& bitmap,
const wxBitmapBundle& bmpDisabled = wxNullBitmap,
wxItemKind kind = wxITEM_NORMAL,
const wxString& shortHelp = wxEmptyString,
const wxString& longHelp = wxEmptyString,
@@ -427,9 +430,9 @@ public:
virtual wxString GetToolLongHelp(int toolid) const;
virtual void SetToolNormalBitmap(int WXUNUSED(id),
const wxBitmap& WXUNUSED(bitmap)) {}
const wxBitmapBundle& WXUNUSED(bitmap)) {}
virtual void SetToolDisabledBitmap(int WXUNUSED(id),
const wxBitmap& WXUNUSED(bitmap)) {}
const wxBitmapBundle& WXUNUSED(bitmap)) {}
// margins/packing/separation
@@ -576,8 +579,8 @@ public:
// -------------------------
virtual wxToolBarToolBase *CreateTool(int toolid,
const wxString& label,
const wxBitmap& bmpNormal,
const wxBitmap& bmpDisabled = wxNullBitmap,
const wxBitmapBundle& bmpNormal,
const wxBitmapBundle& bmpDisabled = wxNullBitmap,
wxItemKind kind = wxITEM_NORMAL,
wxObject *clientData = NULL,
const wxString& shortHelp = wxEmptyString,
@@ -625,8 +628,8 @@ protected:
(
int toolid,
const wxString& label,
const wxBitmap& bitmap,
const wxBitmap& bmpDisabled,
const wxBitmapBundle& bitmap,
const wxBitmapBundle& bmpDisabled,
wxItemKind kind,
const wxString& shortHelp = wxEmptyString,
const wxString& longHelp = wxEmptyString,

View File

@@ -91,8 +91,8 @@ protected:
virtual wxToolBarToolBase *CreateTool(int id,
const wxString& label,
const wxBitmap& bmpNormal,
const wxBitmap& bmpDisabled,
const wxBitmapBundle& bmpNormal,
const wxBitmapBundle& bmpDisabled,
wxItemKind kind,
wxObject *clientData,
const wxString& shortHelp,

View File

@@ -44,6 +44,7 @@
#include "wx/gdiobj.h"
#include "wx/region.h"
#include "wx/bitmap.h"
#include "wx/bmpbndl.h"
#include "wx/image.h"
#include "wx/colour.h"
#include "wx/font.h"

179
interface/wx/bmpbndl.h Normal file
View File

@@ -0,0 +1,179 @@
/////////////////////////////////////////////////////////////////////////////
// Name: wx/bmpbndl.h
// Purpose: Interface of wxBitmapBundle.
// Author: Vadim Zeitlin
// Created: 2021-09-24
// Copyright: (c) 2021 Vadim Zeitlin <vadim@wxwidgets.org>
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
/**
Contains representations of the same bitmap in different resolutions.
This class generalizes wxBitmap for applications supporting multiple DPIs
and allows to operate with multiple versions of the same bitmap, in the
sizes appropriate to the currently used display resolution, as a single
unit. Notably, an entire wxBitmapBundle can be passed to functions such as
wxToolBar::AddTool() to allow toolbar to select the best available bitmap
to be shown.
Objects of this class are typically created by the application and then
passed to wxWidgets functions, but not used by the application itself.
Currently bitmap bundles can be created from:
- A vector of bitmaps, of any provenance.
- A single wxBitmap or wxImage for backwards compatibility.
More functions for creating bitmap bundles will be added in the future.
Objects of wxBitmapBundle class have value-like semantics, i.e. they can be
copied around freely (and cheaply) and don't need to be allocated on the
heap. However they usually are created using static factory functions
(known as "pseudo-constructors") such as FromBitmaps() instead of using the
real constructors.
Example of using this class to initialize a toolbar in a frame constructor:
@code
MyFrame::MyFrame()
: wxFrame(nullptr, wxID_ANY, "My frame")
{
...
wxToolBar* toolBar = CreateToolBar();
wxVector<wxBitmap> bitmaps;
bitmaps.push_back(wxBITMAP_PNG(open_32x32));
bitmaps.push_back(wxBITMAP_PNG(open_48x48));
bitmaps.push_back(wxBITMAP_PNG(open_64x64));
toolBar->AddTool(wxID_OPEN, wxBitmapBundle::FromBitmaps(bitmaps));
}
@endcode
The code shown above will use 32 pixel bitmap in normal DPI, 64 pixel
bitmap in "high DPI", i.e. pixel-doubling or 200% resolution, and 48 pixel
bitmap in 150% resolution. For all the other resolutions, the best matching
bitmap will be created dynamically from the best available match, e.g. for
175% resolution, 64 pixel bitmap will be rescaled to 56 pixels.
Of course, this code relies on actually having the resources with the
corresponding names (i.e. @c open_NxN) in MSW .rc file or Mac application
bundle and @c open_NxN_png arrays being defined in the program code, e.g.
by including a file generated with @c bin2c (see wxBITMAP_PNG_FROM_DATA()),
on the other platforms.
Also note that the existing code using wxBitmap is compatible with the
functions taking wxBitmapBundle in wxWidgets 3.1.6 and later because
bitmaps are implicitly convertible to the objects of this class, so just
passing wxBitmap to the functions taking wxBitmapBundle continues to work
and if high resolution versions of bitmap are not (yet) available for the
other toolbar tools, single bitmaps can continue to be used instead.
@library{wxcore}
@category{gdi}
@since 3.1.6
*/
class wxBitmapBundle
{
public:
/**
Default constructor constructs an empty bundle.
An empty bundle can't be used for anything, but can be assigned
something else later.
*/
wxBitmapBundle();
/**
Conversion constructor from a single bitmap.
This constructor does the same thing as FromBitmap() and only exists
for interoperability with the existing code using wxBitmap.
*/
wxBitmapBundle(const wxBitmap& bitmap);
/**
Conversion constructor from a single image.
Similarly to the constructor from wxBitmap, this constructor only
exists for interoperability with the existing code using wxImage and
can be replaced with more readable FromImage() in the new code.
*/
wxBitmapBundle(const wxImage& image);
/**
Copy constructor creates a copy of another bundle.
*/
wxBitmapBundle(const wxBitmapBundle& other);
/**
Assignment operator makes this bundle a copy of another bundle.
*/
wxBitmapBundle& operator=(const wxBitmapBundle& other);
/**
Create a bundle from the given collection of bitmaps.
If the @a bitmaps vector is empty, an invalid, empty bundle is
returned, otherwise initialize the bundle with all the bitmaps in this
vector which must be themselves valid.
*/
static wxBitmapBundle FromBitmaps(const wxVector<wxBitmap>& bitmaps);
/// @overload
static wxBitmapBundle FromBitmaps(const wxBitmap& bitmap1,
const wxBitmap& bitmap2);
/**
Create a bundle from a single bitmap.
This is only useful for compatibility with the existing code using
wxBitmap.
If @a bitmap is invalid, empty bundle is returned.
*/
static wxBitmapBundle FromBitmap(const wxBitmap& bitmap);
/**
Create a bundle from a single image.
This is only useful for compatibility with the existing code using
wxImage.
If @a image is invalid, empty bundle is returned.
*/
static wxBitmapBundle FromImage(const wxImage& image);
/**
Check if bitmap bundle is non-empty.
Return @true if the bundle contains any bitmaps or @false if it is
empty.
*/
bool IsOk() const;
/**
Get the size of the bitmap represented by this bundle in default
resolution or, equivalently, at 100% scaling.
When creating the bundle from a number of bitmaps, this will be just
the size of the smallest bitmap in it.
Note that this function is mostly used by wxWidgets itself and not the
application.
*/
wxSize GetDefaultSize() const;
/**
Get bitmap of the specified size, creating a new bitmap from the closest
available size by rescaling it if necessary.
This function is mostly used by wxWidgets itself and not the
application. As all bitmaps created by it dynamically are currently
cached, avoid calling it for many different sizes if you do use it, as
this will create many bitmaps that will never be deleted and will
consume resources until the application termination.
*/
wxBitmap GetBitmap(const wxSize size) const;
};

View File

@@ -83,8 +83,8 @@ public:
wxToolBarToolBase(wxToolBarBase *tbar = NULL,
int toolid = wxID_SEPARATOR,
const wxString& label = wxEmptyString,
const wxBitmap& bmpNormal = wxNullBitmap,
const wxBitmap& bmpDisabled = wxNullBitmap,
const wxBitmapBundle& bmpNormal = wxNullBitmap,
const wxBitmapBundle& bmpDisabled = wxNullBitmap,
wxItemKind kind = wxITEM_NORMAL,
wxObject *clientData = NULL,
const wxString& shortHelpString = wxEmptyString,
@@ -112,10 +112,10 @@ public:
bool IsToggled() const;
bool CanBeToggled() const;
const wxBitmap& GetNormalBitmap() const;
const wxBitmap& GetDisabledBitmap() const;
wxBitmap GetNormalBitmap() const;
wxBitmap GetDisabledBitmap() const;
const wxBitmap& GetBitmap() const;
wxBitmap GetBitmap() const;
const wxString& GetLabel() const;
const wxString& GetShortHelp() const;
@@ -129,8 +129,8 @@ public:
bool SetShortHelp(const wxString& help);
bool SetLongHelp(const wxString& help);
void Toggle();
void SetNormalBitmap(const wxBitmap& bmp);
void SetDisabledBitmap(const wxBitmap& bmp);
void SetNormalBitmap(const wxBitmapBundle& bmp);
void SetDisabledBitmap(const wxBitmapBundle& bmp);
void SetLabel(const wxString& label);
void SetClientData(wxObject *clientData);
@@ -318,8 +318,8 @@ public:
@see AddTool()
*/
wxToolBarToolBase* AddCheckTool(int toolId, const wxString& label,
const wxBitmap& bitmap1,
const wxBitmap& bmpDisabled = wxNullBitmap,
const wxBitmapBundle& bitmap1,
const wxBitmapBundle& bmpDisabled = wxNullBitmap,
const wxString& shortHelp = wxEmptyString,
const wxString& longHelp = wxEmptyString,
wxObject* clientData = NULL);
@@ -354,8 +354,8 @@ public:
@see AddTool()
*/
wxToolBarToolBase* AddRadioTool(int toolId, const wxString& label,
const wxBitmap& bitmap1,
const wxBitmap& bmpDisabled = wxNullBitmap,
const wxBitmapBundle& bitmap1,
const wxBitmapBundle& bmpDisabled = wxNullBitmap,
const wxString& shortHelp = wxEmptyString,
const wxString& longHelp = wxEmptyString,
wxObject* clientData = NULL);
@@ -436,7 +436,7 @@ public:
InsertTool(), DeleteTool(), Realize(), SetDropdownMenu()
*/
wxToolBarToolBase* AddTool(int toolId, const wxString& label,
const wxBitmap& bitmap,
const wxBitmapBundle& bitmap,
const wxString& shortHelp = wxEmptyString,
wxItemKind kind = wxITEM_NORMAL);
@@ -478,8 +478,8 @@ public:
InsertTool(), DeleteTool(), Realize(), SetDropdownMenu()
*/
wxToolBarToolBase* AddTool(int toolId, const wxString& label,
const wxBitmap& bitmap,
const wxBitmap& bmpDisabled,
const wxBitmapBundle& bitmap,
const wxBitmapBundle& bmpDisabled,
wxItemKind kind = wxITEM_NORMAL,
const wxString& shortHelp = wxEmptyString,
const wxString& longHelp = wxEmptyString,
@@ -727,8 +727,8 @@ public:
wxToolBarToolBase* InsertTool( size_t pos,
int toolId,
const wxString& label,
const wxBitmap& bitmap,
const wxBitmap& bmpDisabled = wxNullBitmap,
const wxBitmapBundle& bitmap,
const wxBitmapBundle& bmpDisabled = wxNullBitmap,
wxItemKind kind = wxITEM_NORMAL,
const wxString& shortHelp = wxEmptyString,
const wxString& longHelp = wxEmptyString,
@@ -895,7 +895,7 @@ public:
have no effect on those platforms.
*/
virtual void SetToolDisabledBitmap(int id, const wxBitmap& bitmap);
virtual void SetToolDisabledBitmap(int id, const wxBitmapBundle& bitmap);
/**
Sets the long help for the given tool.
@@ -921,7 +921,7 @@ public:
@param bitmap
Bitmap to use for normals tools.
*/
virtual void SetToolNormalBitmap(int id, const wxBitmap& bitmap);
virtual void SetToolNormalBitmap(int id, const wxBitmapBundle& bitmap);
/**
Sets the value used for spacing tools. The default value is 1.
@@ -982,8 +982,8 @@ public:
*/
virtual wxToolBarToolBase *CreateTool(int toolId,
const wxString& label,
const wxBitmap& bmpNormal,
const wxBitmap& bmpDisabled = wxNullBitmap,
const wxBitmapBundle& bmpNormal,
const wxBitmapBundle& bmpDisabled = wxNullBitmap,
wxItemKind kind = wxITEM_NORMAL,
wxObject *clientData = NULL,
const wxString& shortHelp = wxEmptyString,

View File

@@ -25,6 +25,7 @@
#endif
#include "wx/toolbar.h"
#include "wx/bmpbndl.h"
#include "wx/log.h"
#include "wx/image.h"
#include "wx/filedlg.h"
@@ -50,9 +51,8 @@
#include "../sample.xpm"
#endif // !wxHAS_IMAGES_IN_RESOURCES
// If PNG files are not available in resources, we need to embed them in the
// program itself. We could also load them during run-time.
#ifndef wxHAS_IMAGE_RESOURCES
// Temporarily embed bitmaps in the program itself on all platforms.
#if 1 // ndef wxHAS_IMAGE_RESOURCES
#include "bitmaps/new_png.c"
#include "bitmaps/open_png.c"
#include "bitmaps/save_png.c"
@@ -389,46 +389,36 @@ void MyFrame::PopulateToolbar(wxToolBarBase* toolBar)
Tool_Max
};
wxBitmap toolBarBitmaps[Tool_Max];
wxBitmapBundle toolBarBitmaps[Tool_Max];
if ( GetDPIScaleFactor() >= 1.5 )
{
toolBarBitmaps[Tool_new ] = wxBITMAP_PNG(new_2x );
toolBarBitmaps[Tool_open ] = wxBITMAP_PNG(open_2x );
toolBarBitmaps[Tool_save ] = wxBITMAP_PNG(save_2x );
toolBarBitmaps[Tool_copy ] = wxBITMAP_PNG(copy_2x );
toolBarBitmaps[Tool_cut ] = wxBITMAP_PNG(cut_2x );
toolBarBitmaps[Tool_paste] = wxBITMAP_PNG(paste_2x);
toolBarBitmaps[Tool_print] = wxBITMAP_PNG(print_2x);
toolBarBitmaps[Tool_help ] = wxBITMAP_PNG(help_2x );
}
else
{
toolBarBitmaps[Tool_new ] = wxBITMAP_PNG(new );
toolBarBitmaps[Tool_open ] = wxBITMAP_PNG(open );
toolBarBitmaps[Tool_save ] = wxBITMAP_PNG(save );
toolBarBitmaps[Tool_copy ] = wxBITMAP_PNG(copy );
toolBarBitmaps[Tool_cut ] = wxBITMAP_PNG(cut );
toolBarBitmaps[Tool_paste] = wxBITMAP_PNG(paste);
toolBarBitmaps[Tool_print] = wxBITMAP_PNG(print);
toolBarBitmaps[Tool_help ] = wxBITMAP_PNG(help );
}
// This macro relies on having name_png and name_2x_png arrays defined,
// (this is done in this sample by including the corresponding *_png.c files
// above).
#define BUNDLE_2(name) \
wxBitmapBundle::FromBitmaps(wxBITMAP_PNG_FROM_DATA(name), \
wxBITMAP_PNG_FROM_DATA(name##_2x))
int w = toolBarBitmaps[Tool_new].GetWidth(),
h = toolBarBitmaps[Tool_new].GetHeight();
toolBarBitmaps[Tool_new ] = BUNDLE_2(new );
toolBarBitmaps[Tool_open ] = BUNDLE_2(open );
toolBarBitmaps[Tool_save ] = BUNDLE_2(save );
toolBarBitmaps[Tool_copy ] = BUNDLE_2(copy );
toolBarBitmaps[Tool_cut ] = BUNDLE_2(cut );
toolBarBitmaps[Tool_paste] = BUNDLE_2(paste);
toolBarBitmaps[Tool_print] = BUNDLE_2(print);
toolBarBitmaps[Tool_help ] = BUNDLE_2(help );
// Size of the bitmaps we use by default.
int w = 32,
h = 32;
if ( !m_smallToolbar )
{
w *= 2;
h *= 2;
for ( size_t n = Tool_new; n < WXSIZEOF(toolBarBitmaps); n++ )
{
toolBarBitmaps[n] =
wxBitmap(toolBarBitmaps[n].ConvertToImage().Scale(w, h));
}
}
toolBar->SetToolBitmapSize(wxSize(w, h));
toolBar->AddTool(wxID_NEW, "New",
toolBarBitmaps[Tool_new], wxNullBitmap, wxITEM_DROPDOWN,
"New file", "This is help for new file tool");
@@ -472,7 +462,7 @@ void MyFrame::PopulateToolbar(wxToolBarBase* toolBar)
{
wxMemoryDC dc;
dc.SelectObject(bmpDisabled);
dc.DrawBitmap(toolBarBitmaps[Tool_print], 0, 0);
dc.DrawBitmap(toolBarBitmaps[Tool_print].GetBitmap(wxSize(w, h)), 0, 0);
wxPen pen(*wxRED, 5);
dc.SetPen(pen);

261
src/common/bmpbndl.cpp Normal file
View File

@@ -0,0 +1,261 @@
///////////////////////////////////////////////////////////////////////////////
// Name: src/common/bmpbndl.cpp
// Purpose: Common methods of wxBitmapBundle class.
// Author: Vadim Zeitlin
// Created: 2021-09-22
// Copyright: (c) 2021 Vadim Zeitlin <vadim@wxwidgets.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
// ============================================================================
// declarations
// ============================================================================
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
// for compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifndef WX_PRECOMP
#endif // WX_PRECOMP
#include "wx/bmpbndl.h"
#include "wx/private/bmpbndl.h"
#include <algorithm>
// ----------------------------------------------------------------------------
// private helpers
// ----------------------------------------------------------------------------
namespace
{
// Simplest possible bundle implementation storing a collection of bitmaps
class wxBitmapBundleImplSet : public wxBitmapBundleImpl
{
public:
// The vector must not be empty, caller is supposed to have checked for it.
explicit wxBitmapBundleImplSet(const wxVector<wxBitmap>& bitmaps)
{
Init(&bitmaps[0], bitmaps.size());
}
// Convenience ctor from a single bitmap.
explicit wxBitmapBundleImplSet(const wxBitmap& bitmap)
{
Init(&bitmap, 1);
}
virtual wxSize GetDefaultSize() const wxOVERRIDE;
virtual wxBitmap GetBitmap(const wxSize size) wxOVERRIDE;
private:
// Struct containing bitmap itself as well as a flag indicating whether we
// generated it by rescaling the existing bitmap or not.
struct Entry
{
// Create a new entry from the original bitmap.
explicit Entry(const wxBitmap& bitmap_)
: bitmap(bitmap_)
{
generated = false;
}
// Create a new entry of the given size by resizing the bitmap of an
// existing one.
Entry(const Entry& entry, const wxSize& size)
: bitmap(entry.bitmap)
{
wxASSERT_MSG( !entry.generated, wxS("should use original bitmap") );
generated = true;
wxBitmap::Rescale(bitmap, size);
}
wxBitmap bitmap;
bool generated;
};
// Comparator comparing entries by the bitmap size.
struct BitmapSizeComparator
{
bool operator()(const Entry& entry1, const Entry& entry2) const
{
// We could compare the bitmaps areas too, but they're supposed to
// all use different sizes anyhow, so keep things simple.
return entry1.bitmap.GetHeight() < entry2.bitmap.GetHeight();
}
};
typedef wxVector<Entry> Entries;
// All bitmaps sorted by size.
//
// Note that this vector is never empty.
Entries m_entries;
// Common implementation of all ctors.
void Init(const wxBitmap* bitmaps, size_t n);
wxDECLARE_NO_COPY_CLASS(wxBitmapBundleImplSet);
};
} // anonymous namespace
// ============================================================================
// wxBitmapBundleImplSet implementation
// ============================================================================
void wxBitmapBundleImplSet::Init(const wxBitmap* bitmaps, size_t n)
{
m_entries.reserve(n);
for ( size_t i = 0; i < n; ++i )
{
const wxBitmap& bitmap = bitmaps[i];
wxASSERT_MSG( bitmap.IsOk(), wxS("all bundle bitmaps must be valid") );
m_entries.push_back(Entry(bitmap));
}
std::sort(m_entries.begin(), m_entries.end(), BitmapSizeComparator());
// Should we check that all bitmaps really have unique sizes here? For now,
// don't bother with this, but we might want to do it later if it really
// turns out to be a problem in practice.
}
wxSize wxBitmapBundleImplSet::GetDefaultSize() const
{
// Default size is the size of the smallest bitmap in the bundle.
return m_entries[0].bitmap.GetSize();
}
wxBitmap wxBitmapBundleImplSet::GetBitmap(const wxSize size)
{
// We use linear search instead if binary one because it's simpler and the
// vector size is small enough (< 10) for it not to matter in practice.
const size_t n = m_entries.size();
size_t lastSmaller = 0;
for ( size_t i = 0; i < n; ++i )
{
const Entry& entry = m_entries[i];
const wxSize sizeThis = entry.bitmap.GetSize();
if ( sizeThis.y == size.y )
{
// Exact match, just use it.
return entry.bitmap;
}
if ( sizeThis.y < size.y )
{
// Don't rescale this one, we prefer to downscale rather than
// upscale as it results in better-looking bitmaps.
lastSmaller = i;
continue;
}
if ( sizeThis.y > size.y && !entry.generated )
{
// We know that we don't have any exact match and we've found the
// next bigger bitmap, so rescale it to the desired size.
const Entry entryNew(entry, size);
m_entries.insert(m_entries.begin() + lastSmaller + 1, entryNew);
return entryNew.bitmap;
}
}
// We only get here if the requested size is larger than the size of all
// the bitmaps we have, in which case we have no choice but to upscale one
// of the bitmaps, so find the largest available non-generated bitmap.
for ( size_t i = n; n > 0; --i )
{
const Entry& entry = m_entries[i - 1];
if ( !entry.generated )
{
const Entry entryNew(entry, size);
m_entries.push_back(entryNew);
return entryNew.bitmap;
}
}
// We should have at least one non-generated bitmap.
wxFAIL_MSG( wxS("unreachable") );
return wxBitmap();
}
// ============================================================================
// wxBitmapBundle implementation
// ============================================================================
wxBitmapBundle::wxBitmapBundle()
{
}
wxBitmapBundle::wxBitmapBundle(wxBitmapBundleImpl* impl)
: m_impl(impl)
{
}
wxBitmapBundle::wxBitmapBundle(const wxBitmap& bitmap)
: m_impl(bitmap.IsOk() ? new wxBitmapBundleImplSet(bitmap) : NULL)
{
}
wxBitmapBundle::wxBitmapBundle(const wxImage& image)
: m_impl(image.IsOk() ? new wxBitmapBundleImplSet(wxBitmap(image)) : NULL)
{
}
wxBitmapBundle::wxBitmapBundle(const wxBitmapBundle& other)
: m_impl(other.m_impl)
{
}
wxBitmapBundle& wxBitmapBundle::operator=(const wxBitmapBundle& other)
{
// No need to check for self-assignment because m_impl already does.
m_impl = other.m_impl;
return *this;
}
wxBitmapBundle::~wxBitmapBundle()
{
}
/* static */
wxBitmapBundle wxBitmapBundle::FromBitmaps(const wxVector<wxBitmap>& bitmaps)
{
if ( bitmaps.empty() )
return wxBitmapBundle();
return wxBitmapBundle(new wxBitmapBundleImplSet(bitmaps));
}
wxSize wxBitmapBundle::GetDefaultSize() const
{
if ( !m_impl )
return wxDefaultSize;
return m_impl->GetDefaultSize();
}
wxBitmap wxBitmapBundle::GetBitmap(const wxSize size) const
{
if ( !m_impl )
return wxBitmap();
return m_impl->GetBitmap(size == wxDefaultSize ? GetDefaultSize() : size);
}

View File

@@ -156,8 +156,8 @@ void wxToolBarBase::FixupStyle()
wxToolBarToolBase *wxToolBarBase::DoAddTool(int toolid,
const wxString& label,
const wxBitmap& bitmap,
const wxBitmap& bmpDisabled,
const wxBitmapBundle& bitmap,
const wxBitmapBundle& bmpDisabled,
wxItemKind kind,
const wxString& shortHelp,
const wxString& longHelp,
@@ -173,8 +173,8 @@ wxToolBarToolBase *wxToolBarBase::DoAddTool(int toolid,
wxToolBarToolBase *wxToolBarBase::InsertTool(size_t pos,
int toolid,
const wxString& label,
const wxBitmap& bitmap,
const wxBitmap& bmpDisabled,
const wxBitmapBundle& bitmap,
const wxBitmapBundle& bmpDisabled,
wxItemKind kind,
const wxString& shortHelp,
const wxString& longHelp,

View File

@@ -35,8 +35,8 @@ public:
wxToolBarTool(wxToolBar *tbar,
int id,
const wxString& label,
const wxBitmap& bitmap1,
const wxBitmap& bitmap2,
const wxBitmapBundle& bitmap1,
const wxBitmapBundle& bitmap2,
wxItemKind kind,
wxObject *clientData,
const wxString& shortHelpString,
@@ -373,8 +373,8 @@ void wxToolBarTool::SetLabel(const wxString& label)
wxToolBarToolBase *wxToolBar::CreateTool(int id,
const wxString& text,
const wxBitmap& bitmap1,
const wxBitmap& bitmap2,
const wxBitmapBundle& bitmap1,
const wxBitmapBundle& bitmap2,
wxItemKind kind,
wxObject *clientData,
const wxString& shortHelpString,
@@ -795,7 +795,7 @@ void wxToolBar::SetToolShortHelp( int id, const wxString& helpString )
}
}
void wxToolBar::SetToolNormalBitmap( int id, const wxBitmap& bitmap )
void wxToolBar::SetToolNormalBitmap( int id, const wxBitmapBundle& bitmap )
{
wxToolBarTool* tool = static_cast<wxToolBarTool*>(FindById(id));
if ( tool )
@@ -807,7 +807,7 @@ void wxToolBar::SetToolNormalBitmap( int id, const wxBitmap& bitmap )
}
}
void wxToolBar::SetToolDisabledBitmap( int id, const wxBitmap& bitmap )
void wxToolBar::SetToolDisabledBitmap( int id, const wxBitmapBundle& bitmap )
{
wxToolBarTool* tool = static_cast<wxToolBarTool*>(FindById(id));
if ( tool )

View File

@@ -75,8 +75,8 @@ public:
wxToolBarTool(wxToolBar *tbar,
int id,
const wxString& label,
const wxBitmap& bitmap1,
const wxBitmap& bitmap2,
const wxBitmapBundle& bitmap1,
const wxBitmapBundle& bitmap2,
wxItemKind kind,
wxObject *clientData,
const wxString& shortHelpString,
@@ -234,8 +234,8 @@ void wxToolBarTool::Init()
wxToolBarToolBase *wxToolBar::CreateTool(int id,
const wxString& text,
const wxBitmap& bitmap1,
const wxBitmap& bitmap2,
const wxBitmapBundle& bitmap1,
const wxBitmapBundle& bitmap2,
wxItemKind kind,
wxObject *clientData,
const wxString& shortHelpString,

View File

@@ -80,8 +80,8 @@ public:
wxToolBarTool(wxToolBar *tbar,
int id,
const wxString& label,
const wxBitmap& bmpNormal,
const wxBitmap& bmpToggled,
const wxBitmapBundle& bmpNormal,
const wxBitmapBundle& bmpToggled,
wxItemKind kind,
wxObject *clientData,
const wxString& shortHelp,
@@ -142,8 +142,8 @@ wxString wxToolBarTimer::helpString;
wxToolBarToolBase *wxToolBar::CreateTool(int id,
const wxString& label,
const wxBitmap& bmpNormal,
const wxBitmap& bmpToggled,
const wxBitmapBundle& bmpNormal,
const wxBitmapBundle& bmpToggled,
wxItemKind kind,
wxObject *clientData,
const wxString& shortHelp,

View File

@@ -150,8 +150,8 @@ public:
wxToolBarTool(wxToolBar *tbar,
int id,
const wxString& label,
const wxBitmap& bmpNormal,
const wxBitmap& bmpDisabled,
const wxBitmapBundle& bmpNormal,
const wxBitmapBundle& bmpDisabled,
wxItemKind kind,
wxObject *clientData,
const wxString& shortHelp,
@@ -344,8 +344,8 @@ static bool MSWShouldBeChecked(const wxToolBarToolBase *tool)
wxToolBarToolBase *wxToolBar::CreateTool(int id,
const wxString& label,
const wxBitmap& bmpNormal,
const wxBitmap& bmpDisabled,
const wxBitmapBundle& bmpNormal,
const wxBitmapBundle& bmpDisabled,
wxItemKind kind,
wxObject *clientData,
const wxString& shortHelp,
@@ -781,14 +781,14 @@ void wxToolBar::CreateDisabledImageList()
node = m_tools.GetFirst(); node; node = node->GetNext() )
{
wxToolBarToolBase *tool = node->GetData();
wxBitmap bmpDisabled = tool->GetDisabledBitmap();
wxBitmap bmpDisabled = tool->GetDisabledBitmap(wxSize(m_defaultWidth,
m_defaultHeight));
if ( bmpDisabled.IsOk() )
{
const wxSize sizeBitmap = bmpDisabled.GetSize();
m_disabledImgList = new wxImageList
(
sizeBitmap.x,
sizeBitmap.y,
m_defaultWidth,
m_defaultHeight,
// Don't use mask if we have alpha
// (wxImageList will fall back to
// mask if alpha not supported)
@@ -858,11 +858,15 @@ bool wxToolBar::Realize()
wxMemoryDC dcAllButtons;
wxBitmap bitmap(totalBitmapWidth, totalBitmapHeight);
const wxSize sizeBitmap(m_defaultWidth, m_defaultHeight);
for ( node = m_tools.GetFirst(); node; node = node->GetNext() )
{
wxToolBarToolBase *tool = node->GetData();
if ( tool->IsButton() &&
tool->GetNormalBitmap().IsOk() && tool->GetNormalBitmap().HasAlpha() )
wxBitmap toolBitmap;
if ( tool->IsButton() )
toolBitmap = tool->GetNormalBitmap(sizeBitmap);
if ( toolBitmap.IsOk() && toolBitmap.HasAlpha() )
{
// By default bitmaps don't have alpha in wxMSW, but if we
// use a bitmap tool with alpha, we should use alpha for
@@ -925,16 +929,10 @@ bool wxToolBar::Realize()
wxToolBarToolBase *tool = node->GetData();
if ( tool->IsButton() )
{
wxBitmap bmp = tool->GetNormalBitmap();
const int w = bmp.GetWidth();
const int h = bmp.GetHeight();
wxBitmap bmp = tool->GetNormalBitmap(sizeBitmap);
if ( bmp.IsOk() )
{
int xOffset = wxMax(0, (m_defaultWidth - w)/2);
int yOffset = wxMax(0, (m_defaultHeight - h)/2);
#if wxUSE_IMAGE
// If a mix of icons with alpha and without is used,
// convert them all to use alpha.
@@ -947,7 +945,7 @@ bool wxToolBar::Realize()
#endif
// notice the last parameter: do use mask
dcAllButtons.DrawBitmap(bmp, x + xOffset, yOffset, true);
dcAllButtons.DrawBitmap(bmp, x, 0, true);
// Handle of the bitmap could have changed inside
// DrawBitmap() call if it had to convert it from DDB to
@@ -963,7 +961,8 @@ bool wxToolBar::Realize()
// also deal with disabled bitmap if we want to use them
if ( m_disabledImgList )
{
wxBitmap bmpDisabled = tool->GetDisabledBitmap();
wxBitmap bmpDisabled = tool->GetDisabledBitmap(sizeBitmap);
#if wxUSE_IMAGE && wxUSE_WXDIB
if ( !bmpDisabled.IsOk() )
{
@@ -977,9 +976,9 @@ bool wxToolBar::Realize()
{
// we need to have light grey background colour for
// MapBitmap() to work correctly
for ( int y = 0; y < h; y++ )
for ( int y = 0; y < m_defaultHeight; y++ )
{
for ( int xx = 0; xx < w; xx++ )
for ( int xx = 0; xx < m_defaultWidth; xx++ )
{
if ( imgGreyed.IsTransparent(xx, y) )
imgGreyed.SetRGB(xx, y,
@@ -995,7 +994,10 @@ bool wxToolBar::Realize()
#endif // wxUSE_IMAGE
if ( remapValue == Remap_Buttons )
MapBitmap(bmpDisabled.GetHBITMAP(), w, h);
{
MapBitmap(bmpDisabled.GetHBITMAP(),
m_defaultWidth, m_defaultHeight);
}
m_disabledImgList->Add(bmpDisabled);
}
@@ -1842,7 +1844,7 @@ void wxToolBar::DoSetToggle(wxToolBarToolBase *WXUNUSED(tool), bool WXUNUSED(tog
wxFAIL_MSG( wxT("not implemented") );
}
void wxToolBar::SetToolNormalBitmap( int id, const wxBitmap& bitmap )
void wxToolBar::SetToolNormalBitmap( int id, const wxBitmapBundle& bitmap )
{
wxToolBarTool* tool = static_cast<wxToolBarTool*>(FindById(id));
if ( tool )
@@ -1854,7 +1856,7 @@ void wxToolBar::SetToolNormalBitmap( int id, const wxBitmap& bitmap )
}
}
void wxToolBar::SetToolDisabledBitmap( int id, const wxBitmap& bitmap )
void wxToolBar::SetToolDisabledBitmap( int id, const wxBitmapBundle& bitmap )
{
wxToolBarTool* tool = static_cast<wxToolBarTool*>(FindById(id));
if ( tool )

View File

@@ -28,8 +28,8 @@ class wxQtToolButton;
class wxToolBarTool : public wxToolBarToolBase
{
public:
wxToolBarTool(wxToolBar *tbar, int id, const wxString& label, const wxBitmap& bitmap1,
const wxBitmap& bitmap2, wxItemKind kind, wxObject *clientData,
wxToolBarTool(wxToolBar *tbar, int id, const wxString& label, const wxBitmapBundle& bitmap1,
const wxBitmapBundle& bitmap2, wxItemKind kind, wxObject *clientData,
const wxString& shortHelpString, const wxString& longHelpString)
: wxToolBarToolBase(tbar, id, label, bitmap1, bitmap2, kind,
clientData, shortHelpString, longHelpString)
@@ -194,7 +194,7 @@ void wxToolBar::SetToolShortHelp( int id, const wxString& helpString )
}
}
void wxToolBar::SetToolNormalBitmap( int id, const wxBitmap& bitmap )
void wxToolBar::SetToolNormalBitmap( int id, const wxBitmapBundle& bitmap )
{
wxToolBarTool* tool = static_cast<wxToolBarTool*>(FindById(id));
if ( tool )
@@ -206,7 +206,7 @@ void wxToolBar::SetToolNormalBitmap( int id, const wxBitmap& bitmap )
}
}
void wxToolBar::SetToolDisabledBitmap( int id, const wxBitmap& bitmap )
void wxToolBar::SetToolDisabledBitmap( int id, const wxBitmapBundle& bitmap )
{
wxToolBarTool* tool = static_cast<wxToolBarTool*>(FindById(id));
if ( tool )
@@ -364,8 +364,8 @@ void wxToolBar::DoSetToggle(wxToolBarToolBase * WXUNUSED(tool),
wxFAIL_MSG( wxT("not implemented") );
}
wxToolBarToolBase *wxToolBar::CreateTool(int id, const wxString& label, const wxBitmap& bmpNormal,
const wxBitmap& bmpDisabled, wxItemKind kind, wxObject *clientData,
wxToolBarToolBase *wxToolBar::CreateTool(int id, const wxString& label, const wxBitmapBundle& bmpNormal,
const wxBitmapBundle& bmpDisabled, wxItemKind kind, wxObject *clientData,
const wxString& shortHelp, const wxString& longHelp)
{
return new wxToolBarTool(this, id, label, bmpNormal, bmpDisabled, kind,

View File

@@ -78,8 +78,8 @@ public:
wxToolBarTool(wxToolBar *tbar,
int id,
const wxString& label,
const wxBitmap& bmpNormal,
const wxBitmap& bmpDisabled,
const wxBitmapBundle& bmpNormal,
const wxBitmapBundle& bmpDisabled,
wxItemKind kind,
wxObject *clientData,
const wxString& shortHelp,
@@ -313,8 +313,8 @@ void wxToolBar::DoSetToggle(wxToolBarToolBase *tool, bool WXUNUSED(toggle))
wxToolBarToolBase *wxToolBar::CreateTool(int id,
const wxString& label,
const wxBitmap& bmpNormal,
const wxBitmap& bmpDisabled,
const wxBitmapBundle& bmpNormal,
const wxBitmapBundle& bmpDisabled,
wxItemKind kind,
wxObject *clientData,
const wxString& shortHelp,