Add simple wxBitmapBundle::FromSVG() implementation using NanoSVG

Add nanosvg submodule and use it in the generic implementation of this
function.

This is incomplete yet and, notably, doesn't cache the rasterized
images, but already shows that using SVG images works (at least in the
toolbar sample).
This commit is contained in:
Vadim Zeitlin
2021-09-28 18:03:55 +01:00
parent 5ebd76156d
commit ac02ae877f
17 changed files with 369 additions and 27 deletions

View File

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

View File

@@ -919,6 +919,7 @@ set(GUI_CMN_SRC
src/generic/rowheightcache.cpp
src/generic/animateg.cpp
src/common/bmpbndl.cpp
src/generic/bmpsvg.cpp
)
set(GUI_CMN_HDR

View File

@@ -872,6 +872,7 @@ GUI_CMN_SRC =
src/generic/animateg.cpp
src/generic/bannerwindow.cpp
src/generic/bmpcboxg.cpp
src/generic/bmpsvg.cpp
src/generic/busyinfo.cpp
src/generic/buttonbar.cpp
src/generic/calctrlg.cpp

View File

@@ -2203,7 +2203,8 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_calctrlg.o \
$(OBJS)\monodll_creddlgg.o \
$(OBJS)\monodll_rowheightcache.o \
$(OBJS)\monodll_common_bmpbndl.o
$(OBJS)\monodll_common_bmpbndl.o \
$(OBJS)\monodll_bmpsvg.o
endif
endif
ifeq ($(USE_GUI),1)
@@ -2535,7 +2536,8 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_calctrlg.o \
$(OBJS)\monodll_creddlgg.o \
$(OBJS)\monodll_rowheightcache.o \
$(OBJS)\monodll_common_bmpbndl.o
$(OBJS)\monodll_common_bmpbndl.o \
$(OBJS)\monodll_bmpsvg.o
endif
endif
ifeq ($(USE_STC),1)
@@ -3049,7 +3051,8 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_calctrlg.o \
$(OBJS)\monolib_creddlgg.o \
$(OBJS)\monolib_rowheightcache.o \
$(OBJS)\monolib_common_bmpbndl.o
$(OBJS)\monolib_common_bmpbndl.o \
$(OBJS)\monolib_bmpsvg.o
endif
endif
ifeq ($(USE_GUI),1)
@@ -3381,7 +3384,8 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_calctrlg.o \
$(OBJS)\monolib_creddlgg.o \
$(OBJS)\monolib_rowheightcache.o \
$(OBJS)\monolib_common_bmpbndl.o
$(OBJS)\monolib_common_bmpbndl.o \
$(OBJS)\monolib_bmpsvg.o
endif
endif
ifeq ($(USE_STC),1)
@@ -3778,7 +3782,8 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_calctrlg.o \
$(OBJS)\coredll_creddlgg.o \
$(OBJS)\coredll_rowheightcache.o \
$(OBJS)\coredll_common_bmpbndl.o
$(OBJS)\coredll_common_bmpbndl.o \
$(OBJS)\coredll_bmpsvg.o
endif
endif
ifeq ($(USE_GUI),1)
@@ -4110,7 +4115,8 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_calctrlg.o \
$(OBJS)\coredll_creddlgg.o \
$(OBJS)\coredll_rowheightcache.o \
$(OBJS)\coredll_common_bmpbndl.o
$(OBJS)\coredll_common_bmpbndl.o \
$(OBJS)\coredll_bmpsvg.o
endif
endif
ifeq ($(MONOLITHIC),0)
@@ -4465,7 +4471,8 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_calctrlg.o \
$(OBJS)\corelib_creddlgg.o \
$(OBJS)\corelib_rowheightcache.o \
$(OBJS)\corelib_common_bmpbndl.o
$(OBJS)\corelib_common_bmpbndl.o \
$(OBJS)\corelib_bmpsvg.o
endif
endif
ifeq ($(USE_GUI),1)
@@ -4797,7 +4804,8 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_calctrlg.o \
$(OBJS)\corelib_creddlgg.o \
$(OBJS)\corelib_rowheightcache.o \
$(OBJS)\corelib_common_bmpbndl.o
$(OBJS)\corelib_common_bmpbndl.o \
$(OBJS)\corelib_bmpsvg.o
endif
endif
ifeq ($(SHARED),1)
@@ -9482,6 +9490,11 @@ $(OBJS)\monodll_common_bmpbndl.o: ../../src/common/bmpbndl.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\monodll_bmpsvg.o: ../../src/generic/bmpsvg.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
@@ -12066,6 +12079,11 @@ $(OBJS)\monolib_common_bmpbndl.o: ../../src/common/bmpbndl.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\monolib_bmpsvg.o: ../../src/generic/bmpsvg.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
endif
$(OBJS)\basedll_dummy.o: ../../src/common/dummy.cpp
$(CXX) -c -o $@ $(BASEDLL_CXXFLAGS) $(CPPDEPS) $<
@@ -14623,6 +14641,11 @@ $(OBJS)\coredll_common_bmpbndl.o: ../../src/common/bmpbndl.cpp
$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\coredll_bmpsvg.o: ../../src/generic/bmpsvg.cpp
$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
endif
$(OBJS)\corelib_dummy.o: ../../src/common/dummy.cpp
$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
@@ -16373,6 +16396,11 @@ $(OBJS)\corelib_common_bmpbndl.o: ../../src/common/bmpbndl.cpp
$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\corelib_bmpsvg.o: ../../src/generic/bmpsvg.cpp
$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
endif
$(OBJS)\advdll_dummy.o: ../../src/common/dummy.cpp
$(CXX) -c -o $@ $(ADVDLL_CXXFLAGS) $(CPPDEPS) $<

View File

@@ -2533,7 +2533,8 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_calctrlg.obj \
$(OBJS)\monodll_creddlgg.obj \
$(OBJS)\monodll_rowheightcache.obj \
$(OBJS)\monodll_common_bmpbndl.obj
$(OBJS)\monodll_common_bmpbndl.obj \
$(OBJS)\monodll_bmpsvg.obj
!endif
!if "$(USE_GUI)" == "1" && "$(WXUNIV)" == "1"
____CORE_SRC_FILENAMES_OBJECTS = \
@@ -2863,7 +2864,8 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_calctrlg.obj \
$(OBJS)\monodll_creddlgg.obj \
$(OBJS)\monodll_rowheightcache.obj \
$(OBJS)\monodll_common_bmpbndl.obj
$(OBJS)\monodll_common_bmpbndl.obj \
$(OBJS)\monodll_bmpsvg.obj
!endif
!if "$(USE_STC)" == "1"
____MONOLIB_STC_SRC_FILENAMES_OBJECTS = \
@@ -3379,7 +3381,8 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_calctrlg.obj \
$(OBJS)\monolib_creddlgg.obj \
$(OBJS)\monolib_rowheightcache.obj \
$(OBJS)\monolib_common_bmpbndl.obj
$(OBJS)\monolib_common_bmpbndl.obj \
$(OBJS)\monolib_bmpsvg.obj
!endif
!if "$(USE_GUI)" == "1" && "$(WXUNIV)" == "1"
____CORE_SRC_FILENAMES_1_OBJECTS = \
@@ -3709,7 +3712,8 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_calctrlg.obj \
$(OBJS)\monolib_creddlgg.obj \
$(OBJS)\monolib_rowheightcache.obj \
$(OBJS)\monolib_common_bmpbndl.obj
$(OBJS)\monolib_common_bmpbndl.obj \
$(OBJS)\monolib_bmpsvg.obj
!endif
!if "$(USE_STC)" == "1"
____MONOLIB_STC_SRC_FILENAMES_1_OBJECTS = \
@@ -4158,7 +4162,8 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_calctrlg.obj \
$(OBJS)\coredll_creddlgg.obj \
$(OBJS)\coredll_rowheightcache.obj \
$(OBJS)\coredll_common_bmpbndl.obj
$(OBJS)\coredll_common_bmpbndl.obj \
$(OBJS)\coredll_bmpsvg.obj
!endif
!if "$(USE_GUI)" == "1" && "$(WXUNIV)" == "1"
____CORE_SRC_FILENAMES_2_OBJECTS = \
@@ -4488,7 +4493,8 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_calctrlg.obj \
$(OBJS)\coredll_creddlgg.obj \
$(OBJS)\coredll_rowheightcache.obj \
$(OBJS)\coredll_common_bmpbndl.obj
$(OBJS)\coredll_common_bmpbndl.obj \
$(OBJS)\coredll_bmpsvg.obj
!endif
!if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "0" && "$(USE_GUI)" == "1"
__corelib___depname = \
@@ -4843,7 +4849,8 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_calctrlg.obj \
$(OBJS)\corelib_creddlgg.obj \
$(OBJS)\corelib_rowheightcache.obj \
$(OBJS)\corelib_common_bmpbndl.obj
$(OBJS)\corelib_common_bmpbndl.obj \
$(OBJS)\corelib_bmpsvg.obj
!endif
!if "$(USE_GUI)" == "1" && "$(WXUNIV)" == "1"
____CORE_SRC_FILENAMES_3_OBJECTS = \
@@ -5173,7 +5180,8 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_calctrlg.obj \
$(OBJS)\corelib_creddlgg.obj \
$(OBJS)\corelib_rowheightcache.obj \
$(OBJS)\corelib_common_bmpbndl.obj
$(OBJS)\corelib_common_bmpbndl.obj \
$(OBJS)\corelib_bmpsvg.obj
!endif
!if "$(SHARED)" == "1"
____wxcore_namedll_DEP = $(__coredll___depname)
@@ -9913,6 +9921,11 @@ $(OBJS)\monodll_common_bmpbndl.obj: ..\..\src\common\bmpbndl.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\common\bmpbndl.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\monodll_bmpsvg.obj: ..\..\src\generic\bmpsvg.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\generic\bmpsvg.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
@@ -12497,6 +12510,11 @@ $(OBJS)\monolib_common_bmpbndl.obj: ..\..\src\common\bmpbndl.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\bmpbndl.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\monolib_bmpsvg.obj: ..\..\src\generic\bmpsvg.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\generic\bmpsvg.cpp
!endif
$(OBJS)\basedll_dummy.obj: ..\..\src\common\dummy.cpp
$(CXX) /c /nologo /TP /Fo$@ $(BASEDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
@@ -15054,6 +15072,11 @@ $(OBJS)\coredll_common_bmpbndl.obj: ..\..\src\common\bmpbndl.cpp
$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\common\bmpbndl.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\coredll_bmpsvg.obj: ..\..\src\generic\bmpsvg.cpp
$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\generic\bmpsvg.cpp
!endif
$(OBJS)\corelib_dummy.obj: ..\..\src\common\dummy.cpp
$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
@@ -16804,6 +16827,11 @@ $(OBJS)\corelib_common_bmpbndl.obj: ..\..\src\common\bmpbndl.cpp
$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) ..\..\src\common\bmpbndl.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\corelib_bmpsvg.obj: ..\..\src\generic\bmpsvg.cpp
$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) ..\..\src\generic\bmpsvg.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

@@ -592,6 +592,7 @@
<ClCompile Include="..\..\src\common\windowid.cpp" />
<ClCompile Include="..\..\src\common\wrapsizer.cpp" />
<ClCompile Include="..\..\src\common\xpmdecod.cpp" />
<ClCompile Include="..\..\src\generic\bmpsvg.cpp" />
<ClCompile Include="..\..\src\generic\preferencesg.cpp" />
<ClCompile Include="..\..\src\msw\accel.cpp">
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(IntDir)msw_%(Filename).obj</ObjectFileName>

View File

@@ -1074,6 +1074,9 @@
<ClCompile Include="..\..\src\msw\bmpbndl.cpp">
<Filter>MSW Sources</Filter>
</ClCompile>
<ClCompile Include="..\..\src\generic\bmpsvg.cpp">
<Filter>Generic Sources</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\src\msw\version.rc">

View File

@@ -2087,6 +2087,10 @@
RelativePath="..\..\src\generic\bmpcboxg.cpp"
>
</File>
<File
RelativePath="..\..\src\generic\bmpsvg.cpp"
>
</File>
<File
RelativePath="..\..\src\generic\busyinfo.cpp"
>

View File

@@ -2083,6 +2083,10 @@
RelativePath="..\..\src\generic\bmpcboxg.cpp"
>
</File>
<File
RelativePath="..\..\src\generic\bmpsvg.cpp"
>
</File>
<File
RelativePath="..\..\src\generic\busyinfo.cpp"
>