From 72045d5768a126191a907bc640c28e81a11afdd6 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 9 Oct 2006 17:51:07 +0000 Subject: [PATCH] added wxAnimationCtrl (patch 1570325) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41819 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- Makefile.in | 233 ++++++++++++--- build/bakefiles/files.bkl | 17 ++ build/msw/makefile.bcc | 76 +++++ build/msw/makefile.gcc | 76 +++++ build/msw/makefile.vc | 76 +++++ build/msw/makefile.wat | 76 +++++ build/msw/wx_adv.dsp | 16 + build/msw/wx_core.dsp | 16 + configure.in | 11 + docs/changes.txt | 1 + docs/latex/wx/animatctrl.tex | 159 ++++++++++ docs/latex/wx/animation.tex | 153 ++++++++++ docs/latex/wx/category.tex | 1 + docs/latex/wx/classes.tex | 2 + include/wx/anidecod.h | 77 +++++ include/wx/animate.h | 108 +++++++ include/wx/animdecod.h | 139 +++++++++ include/wx/chkconf.h | 8 + include/wx/generic/animate.h | 189 ++++++++++++ include/wx/gifdecod.h | 128 +++----- include/wx/gtk/animate.h | 181 +++++++++++ include/wx/imagbmp.h | 2 +- include/wx/mac/setup0.h | 1 + include/wx/motif/setup0.h | 1 + include/wx/msw/setup0.h | 1 + include/wx/msw/wince/setup.h | 1 + include/wx/os2/setup0.h | 1 + include/wx/palmos/setup0.h | 1 + include/wx/setup_inc.h | 1 + samples/animate/Makefile.in | 209 +++++++++++++ samples/animate/anitest.bkl | 20 ++ samples/animate/anitest.cpp | 266 ++++++++++++++++ samples/animate/anitest.h | 61 ++++ samples/animate/anitest.rc | 3 + samples/animate/hourglass.ani | Bin 0 -> 45182 bytes samples/animate/mondrian.ico | Bin 0 -> 766 bytes samples/animate/mondrian.xpm | 44 +++ samples/animate/throbber.gif | Bin 0 -> 2704 bytes samples/samples.bkl | 1 + setup.h.in | 1 + src/common/anidecod.cpp | 314 +++++++++++++++++++ src/common/animatecmn.cpp | 35 +++ src/common/gifdecod.cpp | 341 ++++++++------------- src/common/imagbmp.cpp | 151 +--------- src/common/imaggif.cpp | 27 +- src/generic/animateg.cpp | 549 ++++++++++++++++++++++++++++++++++ src/gtk/animate.cpp | 339 +++++++++++++++++++++ src/html/m_image.cpp | 26 +- src/wxWindows.dsp | 24 ++ 49 files changed, 3658 insertions(+), 505 deletions(-) create mode 100644 docs/latex/wx/animatctrl.tex create mode 100644 docs/latex/wx/animation.tex create mode 100644 include/wx/anidecod.h create mode 100644 include/wx/animate.h create mode 100644 include/wx/animdecod.h create mode 100644 include/wx/generic/animate.h create mode 100644 include/wx/gtk/animate.h create mode 100644 samples/animate/Makefile.in create mode 100644 samples/animate/anitest.bkl create mode 100644 samples/animate/anitest.cpp create mode 100644 samples/animate/anitest.h create mode 100644 samples/animate/anitest.rc create mode 100644 samples/animate/hourglass.ani create mode 100644 samples/animate/mondrian.ico create mode 100644 samples/animate/mondrian.xpm create mode 100644 samples/animate/throbber.gif create mode 100644 src/common/anidecod.cpp create mode 100644 src/common/animatecmn.cpp create mode 100644 src/generic/animateg.cpp create mode 100644 src/gtk/animate.cpp diff --git a/Makefile.in b/Makefile.in index ffc07ab3fb..ad0f36a06b 100644 --- a/Makefile.in +++ b/Makefile.in @@ -2574,11 +2574,15 @@ COND_TOOLKIT_WINCE_GUI_HDR = \ wx/msw/wince/textctrlce.h \ wx/msw/wince/resources.h @COND_TOOLKIT_WINCE@GUI_HDR = $(COND_TOOLKIT_WINCE_GUI_HDR) -@COND_TOOLKIT_COCOA@ADVANCED_PLATFORM_HDR = \ -@COND_TOOLKIT_COCOA@ wx/cocoa/taskbar.h wx/mac/corefoundation/joystick.h +COND_TOOLKIT_COCOA_ADVANCED_PLATFORM_HDR = \ + wx/generic/animate.h \ + wx/cocoa/taskbar.h \ + wx/mac/corefoundation/joystick.h +@COND_TOOLKIT_COCOA@ADVANCED_PLATFORM_HDR = $(COND_TOOLKIT_COCOA_ADVANCED_PLATFORM_HDR) @COND_TOOLKIT_GTK@ADVANCED_PLATFORM_HDR = \ @COND_TOOLKIT_GTK@ wx/unix/joystick.h wx/unix/sound.h wx/unix/taskbarx11.h COND_TOOLKIT_MAC_ADVANCED_PLATFORM_HDR = \ + wx/generic/animate.h \ wx/mac/carbon/drawer.h \ wx/mac/carbon/sound.h \ wx/mac/carbon/taskbarosx.h \ @@ -2587,17 +2591,22 @@ COND_TOOLKIT_MAC_ADVANCED_PLATFORM_HDR = \ @COND_TOOLKIT_MOTIF@ADVANCED_PLATFORM_HDR = \ @COND_TOOLKIT_MOTIF@ wx/unix/joystick.h wx/unix/sound.h \ @COND_TOOLKIT_MOTIF@ wx/unix/taskbarx11.h -@COND_TOOLKIT_MSW@ADVANCED_PLATFORM_HDR = wx/msw/sound.h \ -@COND_TOOLKIT_MSW@ wx/msw/taskbar.h wx/msw/joystick.h -@COND_TOOLKIT_PM@ADVANCED_PLATFORM_HDR = wx/os2/joystick.h \ -@COND_TOOLKIT_PM@ wx/os2/sound.h +COND_TOOLKIT_MSW_ADVANCED_PLATFORM_HDR = \ + wx/generic/animate.h \ + wx/msw/sound.h \ + wx/msw/taskbar.h \ + wx/msw/joystick.h +@COND_TOOLKIT_MSW@ADVANCED_PLATFORM_HDR = $(COND_TOOLKIT_MSW_ADVANCED_PLATFORM_HDR) +@COND_TOOLKIT_PM@ADVANCED_PLATFORM_HDR = \ +@COND_TOOLKIT_PM@ wx/generic/animate.h wx/os2/joystick.h wx/os2/sound.h @COND_TOOLKIT_WINCE@ADVANCED_PLATFORM_HDR = \ -@COND_TOOLKIT_WINCE@ wx/msw/sound.h wx/msw/taskbar.h +@COND_TOOLKIT_WINCE@ wx/generic/animate.h wx/msw/sound.h wx/msw/taskbar.h @COND_TOOLKIT_X11@ADVANCED_PLATFORM_HDR = \ @COND_TOOLKIT_X11@ wx/unix/joystick.h wx/unix/sound.h wx/unix/taskbarx11.h @COND_TOOLKIT_MSW@ADVANCED_PLATFORM_NATIVE_HDR = wx/msw/datectrl.h @COND_TOOLKIT_WINCE@ADVANCED_PLATFORM_NATIVE_HDR = wx/msw/datectrl.h COND_WXUNIV_0_ADVANCED_HDR = \ + wx/animate.h \ wx/bmpcbox.h \ wx/calctrl.h \ wx/dataview.h \ @@ -2637,6 +2646,7 @@ COND_WXUNIV_0_ADVANCED_HDR = \ $(ADVANCED_PLATFORM_NATIVE_HDR) @COND_WXUNIV_0@ADVANCED_HDR = $(COND_WXUNIV_0_ADVANCED_HDR) COND_WXUNIV_1_ADVANCED_HDR = \ + wx/animate.h \ wx/bmpcbox.h \ wx/calctrl.h \ wx/dataview.h \ @@ -2820,6 +2830,7 @@ COND_USE_GUI_1_ALL_GUI_HEADERS = \ wx/wupdlock.h \ wx/accel.h \ wx/access.h \ + wx/anidecod.h \ wx/artprov.h \ wx/bitmap.h \ wx/bookctrl.h \ @@ -3312,6 +3323,7 @@ COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS = \ $(__LOWLEVEL_SRC_OBJECTS) \ $(__GUI_SRC_OBJECTS) \ monodll_accesscmn.o \ + monodll_anidecod.o \ monodll_appcmn.o \ monodll_artprov.o \ monodll_artstd.o \ @@ -3480,6 +3492,7 @@ COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS = \ monodll_mono.o \ monodll_win32.o \ monodll_accesscmn.o \ + monodll_anidecod.o \ monodll_appcmn.o \ monodll_artprov.o \ monodll_artstd.o \ @@ -4713,6 +4726,7 @@ COND_TOOLKIT_X11___LOWLEVEL_SRC_OBJECTS_1 = \ monodll_window.o @COND_TOOLKIT_X11@__LOWLEVEL_SRC_OBJECTS_1 = $(COND_TOOLKIT_X11___LOWLEVEL_SRC_OBJECTS_1) COND_WXUNIV_0___ADVANCED_SRC_OBJECTS = \ + monodll_animatecmn.o \ monodll_datavcmn.o \ monodll_aboutdlgg.o \ monodll_bmpcboxg.o \ @@ -4735,6 +4749,7 @@ COND_WXUNIV_0___ADVANCED_SRC_OBJECTS = \ $(__ADVANCED_PLATFORM_NATIVE_SRC_OBJECTS) @COND_WXUNIV_0@__ADVANCED_SRC_OBJECTS = $(COND_WXUNIV_0___ADVANCED_SRC_OBJECTS) COND_WXUNIV_1___ADVANCED_SRC_OBJECTS = \ + monodll_animatecmn.o \ monodll_datavcmn.o \ monodll_aboutdlgg.o \ monodll_bmpcboxg.o \ @@ -5047,6 +5062,7 @@ COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS_1 = \ $(__LOWLEVEL_SRC_OBJECTS_2) \ $(__GUI_SRC_OBJECTS_1) \ monolib_accesscmn.o \ + monolib_anidecod.o \ monolib_appcmn.o \ monolib_artprov.o \ monolib_artstd.o \ @@ -5215,6 +5231,7 @@ COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS_1 = \ monolib_mono.o \ monolib_win32.o \ monolib_accesscmn.o \ + monolib_anidecod.o \ monolib_appcmn.o \ monolib_artprov.o \ monolib_artstd.o \ @@ -6450,6 +6467,7 @@ COND_TOOLKIT_X11___LOWLEVEL_SRC_OBJECTS_3 = \ monolib_window.o @COND_TOOLKIT_X11@__LOWLEVEL_SRC_OBJECTS_3 = $(COND_TOOLKIT_X11___LOWLEVEL_SRC_OBJECTS_3) COND_WXUNIV_0___ADVANCED_SRC_OBJECTS_1 = \ + monolib_animatecmn.o \ monolib_datavcmn.o \ monolib_aboutdlgg.o \ monolib_bmpcboxg.o \ @@ -6472,6 +6490,7 @@ COND_WXUNIV_0___ADVANCED_SRC_OBJECTS_1 = \ $(__ADVANCED_PLATFORM_NATIVE_SRC_OBJECTS_1) @COND_WXUNIV_0@__ADVANCED_SRC_OBJECTS_1 = $(COND_WXUNIV_0___ADVANCED_SRC_OBJECTS_1) COND_WXUNIV_1___ADVANCED_SRC_OBJECTS_1 = \ + monolib_animatecmn.o \ monolib_datavcmn.o \ monolib_aboutdlgg.o \ monolib_bmpcboxg.o \ @@ -6998,6 +7017,7 @@ COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS_2 = \ $(__LOWLEVEL_SRC_OBJECTS_4) \ $(__GUI_SRC_OBJECTS_2) \ coredll_accesscmn.o \ + coredll_anidecod.o \ coredll_appcmn.o \ coredll_artprov.o \ coredll_artstd.o \ @@ -7166,6 +7186,7 @@ COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS_2 = \ coredll_mono.o \ coredll_win32.o \ coredll_accesscmn.o \ + coredll_anidecod.o \ coredll_appcmn.o \ coredll_artprov.o \ coredll_artstd.o \ @@ -8423,6 +8444,7 @@ COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS_3 = \ $(__LOWLEVEL_SRC_OBJECTS_6) \ $(__GUI_SRC_OBJECTS_3) \ corelib_accesscmn.o \ + corelib_anidecod.o \ corelib_appcmn.o \ corelib_artprov.o \ corelib_artstd.o \ @@ -8591,6 +8613,7 @@ COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS_3 = \ corelib_mono.o \ corelib_win32.o \ corelib_accesscmn.o \ + corelib_anidecod.o \ corelib_appcmn.o \ corelib_artprov.o \ corelib_artstd.o \ @@ -9872,6 +9895,7 @@ COND_USE_SOSYMLINKS_1___advdll___so_symlinks_inst_cmd = rm -f \ @COND_USE_SOSYMLINKS_1@__advdll___so_symlinks_inst_cmd = $(COND_USE_SOSYMLINKS_1___advdll___so_symlinks_inst_cmd) @COND_PLATFORM_WIN32_1@__advdll___win32rc = advdll_version_rc.o COND_WXUNIV_0___ADVANCED_SRC_OBJECTS_2 = \ + advdll_animatecmn.o \ advdll_datavcmn.o \ advdll_aboutdlgg.o \ advdll_bmpcboxg.o \ @@ -9894,6 +9918,7 @@ COND_WXUNIV_0___ADVANCED_SRC_OBJECTS_2 = \ $(__ADVANCED_PLATFORM_NATIVE_SRC_OBJECTS_2) @COND_WXUNIV_0@__ADVANCED_SRC_OBJECTS_2 = $(COND_WXUNIV_0___ADVANCED_SRC_OBJECTS_2) COND_WXUNIV_1___ADVANCED_SRC_OBJECTS_2 = \ + advdll_animatecmn.o \ advdll_datavcmn.o \ advdll_aboutdlgg.o \ advdll_bmpcboxg.o \ @@ -9931,6 +9956,7 @@ COND_MONOLITHIC_0_SHARED_0_USE_GUI_1___advlib___depname = \ @COND_USE_PCH_1@___pch_wxprec_advlib_wx_wxprec_h_gch___depname \ @COND_USE_PCH_1@ = .pch/wxprec_advlib/wx/wxprec.h.gch COND_WXUNIV_0___ADVANCED_SRC_OBJECTS_3 = \ + advlib_animatecmn.o \ advlib_datavcmn.o \ advlib_aboutdlgg.o \ advlib_bmpcboxg.o \ @@ -9953,6 +9979,7 @@ COND_WXUNIV_0___ADVANCED_SRC_OBJECTS_3 = \ $(__ADVANCED_PLATFORM_NATIVE_SRC_OBJECTS_3) @COND_WXUNIV_0@__ADVANCED_SRC_OBJECTS_3 = $(COND_WXUNIV_0___ADVANCED_SRC_OBJECTS_3) COND_WXUNIV_1___ADVANCED_SRC_OBJECTS_3 = \ + advlib_animatecmn.o \ advlib_datavcmn.o \ advlib_aboutdlgg.o \ advlib_bmpcboxg.o \ @@ -10612,9 +10639,12 @@ COND_WITH_PLUGIN_SDL_1___sound_sdl___depname = \ @COND_PLATFORM_MACOSX_1@__MAC_LOWLEVEL_SRC_OBJECTS \ @COND_PLATFORM_MACOSX_1@ = monodll_gsockosx.o monodll_hid.o \ @COND_PLATFORM_MACOSX_1@ monodll_utilsexc_cf.o -@COND_TOOLKIT_COCOA@__ADVANCED_PLATFORM_SRC_OBJECTS = \ -@COND_TOOLKIT_COCOA@ monodll_taskbar.o monodll_taskbarcmn.o \ -@COND_TOOLKIT_COCOA@ monodll_hidjoystick.o +COND_TOOLKIT_COCOA___ADVANCED_PLATFORM_SRC_OBJECTS = \ + monodll_animateg.o \ + monodll_taskbar.o \ + monodll_taskbarcmn.o \ + monodll_hidjoystick.o +@COND_TOOLKIT_COCOA@__ADVANCED_PLATFORM_SRC_OBJECTS = $(COND_TOOLKIT_COCOA___ADVANCED_PLATFORM_SRC_OBJECTS) COND_TOOLKIT_GTK_TOOLKIT_VERSION____ADVANCED_PLATFORM_SRC_OBJECTS = \ monodll_taskbarcmn.o \ monodll_joystick.o \ @@ -10627,11 +10657,13 @@ COND_TOOLKIT_GTK_TOOLKIT_VERSION_2___ADVANCED_PLATFORM_SRC_OBJECTS = \ monodll_sound.o \ monodll_taskbarx11.o \ monodll_aboutdlg.o \ + monodll_animate.o \ monodll_taskbar.o \ monodll_dataview.o \ monodll_eggtrayicon.o @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2@__ADVANCED_PLATFORM_SRC_OBJECTS = $(COND_TOOLKIT_GTK_TOOLKIT_VERSION_2___ADVANCED_PLATFORM_SRC_OBJECTS) COND_TOOLKIT_MAC___ADVANCED_PLATFORM_SRC_OBJECTS = \ + monodll_animateg.o \ monodll_taskbarcmn.o \ monodll_aboutdlg.o \ monodll_drawer.o \ @@ -10646,6 +10678,7 @@ COND_TOOLKIT_MOTIF___ADVANCED_PLATFORM_SRC_OBJECTS = \ monodll_taskbarx11.o @COND_TOOLKIT_MOTIF@__ADVANCED_PLATFORM_SRC_OBJECTS = $(COND_TOOLKIT_MOTIF___ADVANCED_PLATFORM_SRC_OBJECTS) COND_TOOLKIT_MSW___ADVANCED_PLATFORM_SRC_OBJECTS = \ + monodll_animateg.o \ monodll_taskbarcmn.o \ monodll_aboutdlg.o \ monodll_sound.o \ @@ -10653,10 +10686,14 @@ COND_TOOLKIT_MSW___ADVANCED_PLATFORM_SRC_OBJECTS = \ monodll_joystick.o @COND_TOOLKIT_MSW@__ADVANCED_PLATFORM_SRC_OBJECTS = $(COND_TOOLKIT_MSW___ADVANCED_PLATFORM_SRC_OBJECTS) @COND_TOOLKIT_PM@__ADVANCED_PLATFORM_SRC_OBJECTS = \ -@COND_TOOLKIT_PM@ monodll_joystick.o monodll_sound.o -@COND_TOOLKIT_WINCE@__ADVANCED_PLATFORM_SRC_OBJECTS = \ -@COND_TOOLKIT_WINCE@ monodll_taskbarcmn.o monodll_aboutdlg.o \ -@COND_TOOLKIT_WINCE@ monodll_sound.o monodll_taskbar.o +@COND_TOOLKIT_PM@ monodll_animateg.o monodll_joystick.o monodll_sound.o +COND_TOOLKIT_WINCE___ADVANCED_PLATFORM_SRC_OBJECTS = \ + monodll_animateg.o \ + monodll_taskbarcmn.o \ + monodll_aboutdlg.o \ + monodll_sound.o \ + monodll_taskbar.o +@COND_TOOLKIT_WINCE@__ADVANCED_PLATFORM_SRC_OBJECTS = $(COND_TOOLKIT_WINCE___ADVANCED_PLATFORM_SRC_OBJECTS) COND_TOOLKIT_X11___ADVANCED_PLATFORM_SRC_OBJECTS = \ monodll_taskbarcmn.o \ monodll_joystick.o \ @@ -10666,9 +10703,12 @@ COND_TOOLKIT_X11___ADVANCED_PLATFORM_SRC_OBJECTS = \ @COND_PLATFORM_MACOSX_1@__MAC_LOWLEVEL_SRC_OBJECTS_0 \ @COND_PLATFORM_MACOSX_1@ = monolib_gsockosx.o monolib_hid.o \ @COND_PLATFORM_MACOSX_1@ monolib_utilsexc_cf.o -@COND_TOOLKIT_COCOA@__ADVANCED_PLATFORM_SRC_OBJECTS_0 = \ -@COND_TOOLKIT_COCOA@ monolib_taskbar.o monolib_taskbarcmn.o \ -@COND_TOOLKIT_COCOA@ monolib_hidjoystick.o +COND_TOOLKIT_COCOA___ADVANCED_PLATFORM_SRC_OBJECTS_0 = \ + monolib_animateg.o \ + monolib_taskbar.o \ + monolib_taskbarcmn.o \ + monolib_hidjoystick.o +@COND_TOOLKIT_COCOA@__ADVANCED_PLATFORM_SRC_OBJECTS_0 = $(COND_TOOLKIT_COCOA___ADVANCED_PLATFORM_SRC_OBJECTS_0) COND_TOOLKIT_GTK_TOOLKIT_VERSION____ADVANCED_PLATFORM_SRC_OBJECTS_0 = \ monolib_taskbarcmn.o \ monolib_joystick.o \ @@ -10681,11 +10721,13 @@ COND_TOOLKIT_GTK_TOOLKIT_VERSION_2___ADVANCED_PLATFORM_SRC_OBJECTS_0 = \ monolib_sound.o \ monolib_taskbarx11.o \ monolib_aboutdlg.o \ + monolib_animate.o \ monolib_taskbar.o \ monolib_dataview.o \ monolib_eggtrayicon.o @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2@__ADVANCED_PLATFORM_SRC_OBJECTS_0 = $(COND_TOOLKIT_GTK_TOOLKIT_VERSION_2___ADVANCED_PLATFORM_SRC_OBJECTS_0) COND_TOOLKIT_MAC___ADVANCED_PLATFORM_SRC_OBJECTS_0 = \ + monolib_animateg.o \ monolib_taskbarcmn.o \ monolib_aboutdlg.o \ monolib_drawer.o \ @@ -10700,6 +10742,7 @@ COND_TOOLKIT_MOTIF___ADVANCED_PLATFORM_SRC_OBJECTS_0 = \ monolib_taskbarx11.o @COND_TOOLKIT_MOTIF@__ADVANCED_PLATFORM_SRC_OBJECTS_0 = $(COND_TOOLKIT_MOTIF___ADVANCED_PLATFORM_SRC_OBJECTS_0) COND_TOOLKIT_MSW___ADVANCED_PLATFORM_SRC_OBJECTS_0 = \ + monolib_animateg.o \ monolib_taskbarcmn.o \ monolib_aboutdlg.o \ monolib_sound.o \ @@ -10707,10 +10750,14 @@ COND_TOOLKIT_MSW___ADVANCED_PLATFORM_SRC_OBJECTS_0 = \ monolib_joystick.o @COND_TOOLKIT_MSW@__ADVANCED_PLATFORM_SRC_OBJECTS_0 = $(COND_TOOLKIT_MSW___ADVANCED_PLATFORM_SRC_OBJECTS_0) @COND_TOOLKIT_PM@__ADVANCED_PLATFORM_SRC_OBJECTS_0 = \ -@COND_TOOLKIT_PM@ monolib_joystick.o monolib_sound.o -@COND_TOOLKIT_WINCE@__ADVANCED_PLATFORM_SRC_OBJECTS_0 = \ -@COND_TOOLKIT_WINCE@ monolib_taskbarcmn.o monolib_aboutdlg.o \ -@COND_TOOLKIT_WINCE@ monolib_sound.o monolib_taskbar.o +@COND_TOOLKIT_PM@ monolib_animateg.o monolib_joystick.o monolib_sound.o +COND_TOOLKIT_WINCE___ADVANCED_PLATFORM_SRC_OBJECTS_0 = \ + monolib_animateg.o \ + monolib_taskbarcmn.o \ + monolib_aboutdlg.o \ + monolib_sound.o \ + monolib_taskbar.o +@COND_TOOLKIT_WINCE@__ADVANCED_PLATFORM_SRC_OBJECTS_0 = $(COND_TOOLKIT_WINCE___ADVANCED_PLATFORM_SRC_OBJECTS_0) COND_TOOLKIT_X11___ADVANCED_PLATFORM_SRC_OBJECTS_0 = \ monolib_taskbarcmn.o \ monolib_joystick.o \ @@ -10723,9 +10770,12 @@ COND_TOOLKIT_X11___ADVANCED_PLATFORM_SRC_OBJECTS_0 = \ @COND_PLATFORM_MACOSX_1@__MAC_LOWLEVEL_SRC_OBJECTS_9 \ @COND_PLATFORM_MACOSX_1@ = corelib_gsockosx.o corelib_hid.o \ @COND_PLATFORM_MACOSX_1@ corelib_utilsexc_cf.o -@COND_TOOLKIT_COCOA@__ADVANCED_PLATFORM_SRC_OBJECTS_8 = \ -@COND_TOOLKIT_COCOA@ advdll_taskbar.o advdll_taskbarcmn.o \ -@COND_TOOLKIT_COCOA@ advdll_hidjoystick.o +COND_TOOLKIT_COCOA___ADVANCED_PLATFORM_SRC_OBJECTS_8 = \ + advdll_animateg.o \ + advdll_taskbar.o \ + advdll_taskbarcmn.o \ + advdll_hidjoystick.o +@COND_TOOLKIT_COCOA@__ADVANCED_PLATFORM_SRC_OBJECTS_8 = $(COND_TOOLKIT_COCOA___ADVANCED_PLATFORM_SRC_OBJECTS_8) @COND_TOOLKIT_GTK_TOOLKIT_VERSION_@__ADVANCED_PLATFORM_SRC_OBJECTS_8 \ @COND_TOOLKIT_GTK_TOOLKIT_VERSION_@ = advdll_taskbarcmn.o advdll_joystick.o \ @COND_TOOLKIT_GTK_TOOLKIT_VERSION_@ advdll_sound.o advdll_taskbarx11.o @@ -10735,11 +10785,13 @@ COND_TOOLKIT_GTK_TOOLKIT_VERSION_2___ADVANCED_PLATFORM_SRC_OBJECTS_8 = \ advdll_sound.o \ advdll_taskbarx11.o \ advdll_aboutdlg.o \ + advdll_animate.o \ advdll_taskbar.o \ advdll_dataview.o \ advdll_eggtrayicon.o @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2@__ADVANCED_PLATFORM_SRC_OBJECTS_8 = $(COND_TOOLKIT_GTK_TOOLKIT_VERSION_2___ADVANCED_PLATFORM_SRC_OBJECTS_8) COND_TOOLKIT_MAC___ADVANCED_PLATFORM_SRC_OBJECTS_8 = \ + advdll_animateg.o \ advdll_taskbarcmn.o \ advdll_aboutdlg.o \ advdll_drawer.o \ @@ -10751,6 +10803,7 @@ COND_TOOLKIT_MAC___ADVANCED_PLATFORM_SRC_OBJECTS_8 = \ @COND_TOOLKIT_MOTIF@ advdll_taskbarcmn.o advdll_joystick.o advdll_sound.o \ @COND_TOOLKIT_MOTIF@ advdll_taskbarx11.o COND_TOOLKIT_MSW___ADVANCED_PLATFORM_SRC_OBJECTS_8 = \ + advdll_animateg.o \ advdll_taskbarcmn.o \ advdll_aboutdlg.o \ advdll_sound.o \ @@ -10758,16 +10811,23 @@ COND_TOOLKIT_MSW___ADVANCED_PLATFORM_SRC_OBJECTS_8 = \ advdll_joystick.o @COND_TOOLKIT_MSW@__ADVANCED_PLATFORM_SRC_OBJECTS_8 = $(COND_TOOLKIT_MSW___ADVANCED_PLATFORM_SRC_OBJECTS_8) @COND_TOOLKIT_PM@__ADVANCED_PLATFORM_SRC_OBJECTS_8 = \ -@COND_TOOLKIT_PM@ advdll_joystick.o advdll_sound.o -@COND_TOOLKIT_WINCE@__ADVANCED_PLATFORM_SRC_OBJECTS_8 = \ -@COND_TOOLKIT_WINCE@ advdll_taskbarcmn.o advdll_aboutdlg.o advdll_sound.o \ -@COND_TOOLKIT_WINCE@ advdll_taskbar.o +@COND_TOOLKIT_PM@ advdll_animateg.o advdll_joystick.o advdll_sound.o +COND_TOOLKIT_WINCE___ADVANCED_PLATFORM_SRC_OBJECTS_8 = \ + advdll_animateg.o \ + advdll_taskbarcmn.o \ + advdll_aboutdlg.o \ + advdll_sound.o \ + advdll_taskbar.o +@COND_TOOLKIT_WINCE@__ADVANCED_PLATFORM_SRC_OBJECTS_8 = $(COND_TOOLKIT_WINCE___ADVANCED_PLATFORM_SRC_OBJECTS_8) @COND_TOOLKIT_X11@__ADVANCED_PLATFORM_SRC_OBJECTS_8 = \ @COND_TOOLKIT_X11@ advdll_taskbarcmn.o advdll_joystick.o advdll_sound.o \ @COND_TOOLKIT_X11@ advdll_taskbarx11.o -@COND_TOOLKIT_COCOA@__ADVANCED_PLATFORM_SRC_OBJECTS_9 = \ -@COND_TOOLKIT_COCOA@ advlib_taskbar.o advlib_taskbarcmn.o \ -@COND_TOOLKIT_COCOA@ advlib_hidjoystick.o +COND_TOOLKIT_COCOA___ADVANCED_PLATFORM_SRC_OBJECTS_9 = \ + advlib_animateg.o \ + advlib_taskbar.o \ + advlib_taskbarcmn.o \ + advlib_hidjoystick.o +@COND_TOOLKIT_COCOA@__ADVANCED_PLATFORM_SRC_OBJECTS_9 = $(COND_TOOLKIT_COCOA___ADVANCED_PLATFORM_SRC_OBJECTS_9) @COND_TOOLKIT_GTK_TOOLKIT_VERSION_@__ADVANCED_PLATFORM_SRC_OBJECTS_9 \ @COND_TOOLKIT_GTK_TOOLKIT_VERSION_@ = advlib_taskbarcmn.o advlib_joystick.o \ @COND_TOOLKIT_GTK_TOOLKIT_VERSION_@ advlib_sound.o advlib_taskbarx11.o @@ -10777,11 +10837,13 @@ COND_TOOLKIT_GTK_TOOLKIT_VERSION_2___ADVANCED_PLATFORM_SRC_OBJECTS_9 = \ advlib_sound.o \ advlib_taskbarx11.o \ advlib_aboutdlg.o \ + advlib_animate.o \ advlib_taskbar.o \ advlib_dataview.o \ advlib_eggtrayicon.o @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2@__ADVANCED_PLATFORM_SRC_OBJECTS_9 = $(COND_TOOLKIT_GTK_TOOLKIT_VERSION_2___ADVANCED_PLATFORM_SRC_OBJECTS_9) COND_TOOLKIT_MAC___ADVANCED_PLATFORM_SRC_OBJECTS_9 = \ + advlib_animateg.o \ advlib_taskbarcmn.o \ advlib_aboutdlg.o \ advlib_drawer.o \ @@ -10793,6 +10855,7 @@ COND_TOOLKIT_MAC___ADVANCED_PLATFORM_SRC_OBJECTS_9 = \ @COND_TOOLKIT_MOTIF@ advlib_taskbarcmn.o advlib_joystick.o advlib_sound.o \ @COND_TOOLKIT_MOTIF@ advlib_taskbarx11.o COND_TOOLKIT_MSW___ADVANCED_PLATFORM_SRC_OBJECTS_9 = \ + advlib_animateg.o \ advlib_taskbarcmn.o \ advlib_aboutdlg.o \ advlib_sound.o \ @@ -10800,10 +10863,14 @@ COND_TOOLKIT_MSW___ADVANCED_PLATFORM_SRC_OBJECTS_9 = \ advlib_joystick.o @COND_TOOLKIT_MSW@__ADVANCED_PLATFORM_SRC_OBJECTS_9 = $(COND_TOOLKIT_MSW___ADVANCED_PLATFORM_SRC_OBJECTS_9) @COND_TOOLKIT_PM@__ADVANCED_PLATFORM_SRC_OBJECTS_9 = \ -@COND_TOOLKIT_PM@ advlib_joystick.o advlib_sound.o -@COND_TOOLKIT_WINCE@__ADVANCED_PLATFORM_SRC_OBJECTS_9 = \ -@COND_TOOLKIT_WINCE@ advlib_taskbarcmn.o advlib_aboutdlg.o advlib_sound.o \ -@COND_TOOLKIT_WINCE@ advlib_taskbar.o +@COND_TOOLKIT_PM@ advlib_animateg.o advlib_joystick.o advlib_sound.o +COND_TOOLKIT_WINCE___ADVANCED_PLATFORM_SRC_OBJECTS_9 = \ + advlib_animateg.o \ + advlib_taskbarcmn.o \ + advlib_aboutdlg.o \ + advlib_sound.o \ + advlib_taskbar.o +@COND_TOOLKIT_WINCE@__ADVANCED_PLATFORM_SRC_OBJECTS_9 = $(COND_TOOLKIT_WINCE___ADVANCED_PLATFORM_SRC_OBJECTS_9) @COND_TOOLKIT_X11@__ADVANCED_PLATFORM_SRC_OBJECTS_9 = \ @COND_TOOLKIT_X11@ advlib_taskbarcmn.o advlib_joystick.o advlib_sound.o \ @COND_TOOLKIT_X11@ advlib_taskbarx11.o @@ -15377,6 +15444,9 @@ monodll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONODLL_ODEP) @COND_USE_GUI_1@monodll_accesscmn.o: $(srcdir)/src/common/accesscmn.cpp $(MONODLL_ODEP) @COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/accesscmn.cpp +@COND_USE_GUI_1@monodll_anidecod.o: $(srcdir)/src/common/anidecod.cpp $(MONODLL_ODEP) +@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/anidecod.cpp + @COND_USE_GUI_1@monodll_appcmn.o: $(srcdir)/src/common/appcmn.cpp $(MONODLL_ODEP) @COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/appcmn.cpp @@ -15716,6 +15786,9 @@ monodll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONODLL_ODEP) @COND_USE_GUI_1@monodll_vscroll.o: $(srcdir)/src/generic/vscroll.cpp $(MONODLL_ODEP) @COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/generic/vscroll.cpp +@COND_USE_GUI_1@monodll_animatecmn.o: $(srcdir)/src/common/animatecmn.cpp $(MONODLL_ODEP) +@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/animatecmn.cpp + @COND_USE_GUI_1@monodll_datavcmn.o: $(srcdir)/src/common/datavcmn.cpp $(MONODLL_ODEP) @COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/datavcmn.cpp @@ -15770,6 +15843,21 @@ monodll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONODLL_ODEP) @COND_USE_GUI_1@monodll_wizard.o: $(srcdir)/src/generic/wizard.cpp $(MONODLL_ODEP) @COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/generic/wizard.cpp +@COND_TOOLKIT_MSW_USE_GUI_1@monodll_animateg.o: $(srcdir)/src/generic/animateg.cpp $(MONODLL_ODEP) +@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/generic/animateg.cpp + +@COND_TOOLKIT_WINCE_USE_GUI_1@monodll_animateg.o: $(srcdir)/src/generic/animateg.cpp $(MONODLL_ODEP) +@COND_TOOLKIT_WINCE_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/generic/animateg.cpp + +@COND_TOOLKIT_MAC_USE_GUI_1@monodll_animateg.o: $(srcdir)/src/generic/animateg.cpp $(MONODLL_ODEP) +@COND_TOOLKIT_MAC_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/generic/animateg.cpp + +@COND_TOOLKIT_COCOA_USE_GUI_1@monodll_animateg.o: $(srcdir)/src/generic/animateg.cpp $(MONODLL_ODEP) +@COND_TOOLKIT_COCOA_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/generic/animateg.cpp + +@COND_TOOLKIT_PM_USE_GUI_1@monodll_animateg.o: $(srcdir)/src/generic/animateg.cpp $(MONODLL_ODEP) +@COND_TOOLKIT_PM_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/generic/animateg.cpp + @COND_TOOLKIT_MSW_USE_GUI_1@monodll_taskbarcmn.o: $(srcdir)/src/common/taskbarcmn.cpp $(MONODLL_ODEP) @COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/taskbarcmn.cpp @@ -15857,6 +15945,9 @@ monodll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONODLL_ODEP) @COND_TOOLKIT_X11_USE_GUI_1@monodll_taskbarx11.o: $(srcdir)/src/unix/taskbarx11.cpp $(MONODLL_ODEP) @COND_TOOLKIT_X11_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/taskbarx11.cpp +@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@monodll_animate.o: $(srcdir)/src/gtk/animate.cpp $(MONODLL_ODEP) +@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/gtk/animate.cpp + @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@monodll_dataview.o: $(srcdir)/src/gtk/dataview.cpp $(MONODLL_ODEP) @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/gtk/dataview.cpp @@ -19376,6 +19467,9 @@ monolib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONOLIB_ODEP) @COND_USE_GUI_1@monolib_accesscmn.o: $(srcdir)/src/common/accesscmn.cpp $(MONOLIB_ODEP) @COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/accesscmn.cpp +@COND_USE_GUI_1@monolib_anidecod.o: $(srcdir)/src/common/anidecod.cpp $(MONOLIB_ODEP) +@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/anidecod.cpp + @COND_USE_GUI_1@monolib_appcmn.o: $(srcdir)/src/common/appcmn.cpp $(MONOLIB_ODEP) @COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/appcmn.cpp @@ -19715,6 +19809,9 @@ monolib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONOLIB_ODEP) @COND_USE_GUI_1@monolib_vscroll.o: $(srcdir)/src/generic/vscroll.cpp $(MONOLIB_ODEP) @COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/generic/vscroll.cpp +@COND_USE_GUI_1@monolib_animatecmn.o: $(srcdir)/src/common/animatecmn.cpp $(MONOLIB_ODEP) +@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/animatecmn.cpp + @COND_USE_GUI_1@monolib_datavcmn.o: $(srcdir)/src/common/datavcmn.cpp $(MONOLIB_ODEP) @COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/datavcmn.cpp @@ -19769,6 +19866,21 @@ monolib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONOLIB_ODEP) @COND_USE_GUI_1@monolib_wizard.o: $(srcdir)/src/generic/wizard.cpp $(MONOLIB_ODEP) @COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/generic/wizard.cpp +@COND_TOOLKIT_MSW_USE_GUI_1@monolib_animateg.o: $(srcdir)/src/generic/animateg.cpp $(MONOLIB_ODEP) +@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/generic/animateg.cpp + +@COND_TOOLKIT_WINCE_USE_GUI_1@monolib_animateg.o: $(srcdir)/src/generic/animateg.cpp $(MONOLIB_ODEP) +@COND_TOOLKIT_WINCE_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/generic/animateg.cpp + +@COND_TOOLKIT_MAC_USE_GUI_1@monolib_animateg.o: $(srcdir)/src/generic/animateg.cpp $(MONOLIB_ODEP) +@COND_TOOLKIT_MAC_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/generic/animateg.cpp + +@COND_TOOLKIT_COCOA_USE_GUI_1@monolib_animateg.o: $(srcdir)/src/generic/animateg.cpp $(MONOLIB_ODEP) +@COND_TOOLKIT_COCOA_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/generic/animateg.cpp + +@COND_TOOLKIT_PM_USE_GUI_1@monolib_animateg.o: $(srcdir)/src/generic/animateg.cpp $(MONOLIB_ODEP) +@COND_TOOLKIT_PM_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/generic/animateg.cpp + @COND_TOOLKIT_MSW_USE_GUI_1@monolib_taskbarcmn.o: $(srcdir)/src/common/taskbarcmn.cpp $(MONOLIB_ODEP) @COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/taskbarcmn.cpp @@ -19856,6 +19968,9 @@ monolib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONOLIB_ODEP) @COND_TOOLKIT_X11_USE_GUI_1@monolib_taskbarx11.o: $(srcdir)/src/unix/taskbarx11.cpp $(MONOLIB_ODEP) @COND_TOOLKIT_X11_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/taskbarx11.cpp +@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@monolib_animate.o: $(srcdir)/src/gtk/animate.cpp $(MONOLIB_ODEP) +@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/gtk/animate.cpp + @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@monolib_dataview.o: $(srcdir)/src/gtk/dataview.cpp $(MONOLIB_ODEP) @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/gtk/dataview.cpp @@ -23714,6 +23829,9 @@ coredll_win32.o: $(srcdir)/src/univ/themes/win32.cpp $(COREDLL_ODEP) @COND_USE_GUI_1@coredll_accesscmn.o: $(srcdir)/src/common/accesscmn.cpp $(COREDLL_ODEP) @COND_USE_GUI_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/common/accesscmn.cpp +@COND_USE_GUI_1@coredll_anidecod.o: $(srcdir)/src/common/anidecod.cpp $(COREDLL_ODEP) +@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/common/anidecod.cpp + @COND_USE_GUI_1@coredll_appcmn.o: $(srcdir)/src/common/appcmn.cpp $(COREDLL_ODEP) @COND_USE_GUI_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/common/appcmn.cpp @@ -26621,6 +26739,9 @@ corelib_win32.o: $(srcdir)/src/univ/themes/win32.cpp $(CORELIB_ODEP) @COND_USE_GUI_1@corelib_accesscmn.o: $(srcdir)/src/common/accesscmn.cpp $(CORELIB_ODEP) @COND_USE_GUI_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/common/accesscmn.cpp +@COND_USE_GUI_1@corelib_anidecod.o: $(srcdir)/src/common/anidecod.cpp $(CORELIB_ODEP) +@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/common/anidecod.cpp + @COND_USE_GUI_1@corelib_appcmn.o: $(srcdir)/src/common/appcmn.cpp $(CORELIB_ODEP) @COND_USE_GUI_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/common/appcmn.cpp @@ -26966,6 +27087,9 @@ advdll_version_rc.o: $(srcdir)/src/msw/version.rc $(ADVDLL_ODEP) advdll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(ADVDLL_ODEP) $(CXXC) -c -o $@ $(ADVDLL_CXXFLAGS) $(srcdir)/src/unix/sound_sdl.cpp +advdll_animatecmn.o: $(srcdir)/src/common/animatecmn.cpp $(ADVDLL_ODEP) + $(CXXC) -c -o $@ $(ADVDLL_CXXFLAGS) $(srcdir)/src/common/animatecmn.cpp + advdll_datavcmn.o: $(srcdir)/src/common/datavcmn.cpp $(ADVDLL_ODEP) $(CXXC) -c -o $@ $(ADVDLL_CXXFLAGS) $(srcdir)/src/common/datavcmn.cpp @@ -27020,6 +27144,21 @@ advdll_tipdlg.o: $(srcdir)/src/generic/tipdlg.cpp $(ADVDLL_ODEP) advdll_wizard.o: $(srcdir)/src/generic/wizard.cpp $(ADVDLL_ODEP) $(CXXC) -c -o $@ $(ADVDLL_CXXFLAGS) $(srcdir)/src/generic/wizard.cpp +@COND_TOOLKIT_MSW@advdll_animateg.o: $(srcdir)/src/generic/animateg.cpp $(ADVDLL_ODEP) +@COND_TOOLKIT_MSW@ $(CXXC) -c -o $@ $(ADVDLL_CXXFLAGS) $(srcdir)/src/generic/animateg.cpp + +@COND_TOOLKIT_WINCE@advdll_animateg.o: $(srcdir)/src/generic/animateg.cpp $(ADVDLL_ODEP) +@COND_TOOLKIT_WINCE@ $(CXXC) -c -o $@ $(ADVDLL_CXXFLAGS) $(srcdir)/src/generic/animateg.cpp + +@COND_TOOLKIT_MAC@advdll_animateg.o: $(srcdir)/src/generic/animateg.cpp $(ADVDLL_ODEP) +@COND_TOOLKIT_MAC@ $(CXXC) -c -o $@ $(ADVDLL_CXXFLAGS) $(srcdir)/src/generic/animateg.cpp + +@COND_TOOLKIT_COCOA@advdll_animateg.o: $(srcdir)/src/generic/animateg.cpp $(ADVDLL_ODEP) +@COND_TOOLKIT_COCOA@ $(CXXC) -c -o $@ $(ADVDLL_CXXFLAGS) $(srcdir)/src/generic/animateg.cpp + +@COND_TOOLKIT_PM@advdll_animateg.o: $(srcdir)/src/generic/animateg.cpp $(ADVDLL_ODEP) +@COND_TOOLKIT_PM@ $(CXXC) -c -o $@ $(ADVDLL_CXXFLAGS) $(srcdir)/src/generic/animateg.cpp + @COND_TOOLKIT_MSW@advdll_taskbarcmn.o: $(srcdir)/src/common/taskbarcmn.cpp $(ADVDLL_ODEP) @COND_TOOLKIT_MSW@ $(CXXC) -c -o $@ $(ADVDLL_CXXFLAGS) $(srcdir)/src/common/taskbarcmn.cpp @@ -27134,6 +27273,9 @@ advdll_wizard.o: $(srcdir)/src/generic/wizard.cpp $(ADVDLL_ODEP) @COND_TOOLKIT_X11@advdll_taskbarx11.o: $(srcdir)/src/unix/taskbarx11.cpp $(ADVDLL_ODEP) @COND_TOOLKIT_X11@ $(CXXC) -c -o $@ $(ADVDLL_CXXFLAGS) $(srcdir)/src/unix/taskbarx11.cpp +@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2@advdll_animate.o: $(srcdir)/src/gtk/animate.cpp $(ADVDLL_ODEP) +@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2@ $(CXXC) -c -o $@ $(ADVDLL_CXXFLAGS) $(srcdir)/src/gtk/animate.cpp + @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2@advdll_dataview.o: $(srcdir)/src/gtk/dataview.cpp $(ADVDLL_ODEP) @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2@ $(CXXC) -c -o $@ $(ADVDLL_CXXFLAGS) $(srcdir)/src/gtk/dataview.cpp @@ -27149,6 +27291,9 @@ advdll_wizard.o: $(srcdir)/src/generic/wizard.cpp $(ADVDLL_ODEP) advlib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(ADVLIB_ODEP) $(CXXC) -c -o $@ $(ADVLIB_CXXFLAGS) $(srcdir)/src/unix/sound_sdl.cpp +advlib_animatecmn.o: $(srcdir)/src/common/animatecmn.cpp $(ADVLIB_ODEP) + $(CXXC) -c -o $@ $(ADVLIB_CXXFLAGS) $(srcdir)/src/common/animatecmn.cpp + advlib_datavcmn.o: $(srcdir)/src/common/datavcmn.cpp $(ADVLIB_ODEP) $(CXXC) -c -o $@ $(ADVLIB_CXXFLAGS) $(srcdir)/src/common/datavcmn.cpp @@ -27203,6 +27348,21 @@ advlib_tipdlg.o: $(srcdir)/src/generic/tipdlg.cpp $(ADVLIB_ODEP) advlib_wizard.o: $(srcdir)/src/generic/wizard.cpp $(ADVLIB_ODEP) $(CXXC) -c -o $@ $(ADVLIB_CXXFLAGS) $(srcdir)/src/generic/wizard.cpp +@COND_TOOLKIT_MSW@advlib_animateg.o: $(srcdir)/src/generic/animateg.cpp $(ADVLIB_ODEP) +@COND_TOOLKIT_MSW@ $(CXXC) -c -o $@ $(ADVLIB_CXXFLAGS) $(srcdir)/src/generic/animateg.cpp + +@COND_TOOLKIT_WINCE@advlib_animateg.o: $(srcdir)/src/generic/animateg.cpp $(ADVLIB_ODEP) +@COND_TOOLKIT_WINCE@ $(CXXC) -c -o $@ $(ADVLIB_CXXFLAGS) $(srcdir)/src/generic/animateg.cpp + +@COND_TOOLKIT_MAC@advlib_animateg.o: $(srcdir)/src/generic/animateg.cpp $(ADVLIB_ODEP) +@COND_TOOLKIT_MAC@ $(CXXC) -c -o $@ $(ADVLIB_CXXFLAGS) $(srcdir)/src/generic/animateg.cpp + +@COND_TOOLKIT_COCOA@advlib_animateg.o: $(srcdir)/src/generic/animateg.cpp $(ADVLIB_ODEP) +@COND_TOOLKIT_COCOA@ $(CXXC) -c -o $@ $(ADVLIB_CXXFLAGS) $(srcdir)/src/generic/animateg.cpp + +@COND_TOOLKIT_PM@advlib_animateg.o: $(srcdir)/src/generic/animateg.cpp $(ADVLIB_ODEP) +@COND_TOOLKIT_PM@ $(CXXC) -c -o $@ $(ADVLIB_CXXFLAGS) $(srcdir)/src/generic/animateg.cpp + @COND_TOOLKIT_MSW@advlib_taskbarcmn.o: $(srcdir)/src/common/taskbarcmn.cpp $(ADVLIB_ODEP) @COND_TOOLKIT_MSW@ $(CXXC) -c -o $@ $(ADVLIB_CXXFLAGS) $(srcdir)/src/common/taskbarcmn.cpp @@ -27317,6 +27477,9 @@ advlib_wizard.o: $(srcdir)/src/generic/wizard.cpp $(ADVLIB_ODEP) @COND_TOOLKIT_X11@advlib_taskbarx11.o: $(srcdir)/src/unix/taskbarx11.cpp $(ADVLIB_ODEP) @COND_TOOLKIT_X11@ $(CXXC) -c -o $@ $(ADVLIB_CXXFLAGS) $(srcdir)/src/unix/taskbarx11.cpp +@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2@advlib_animate.o: $(srcdir)/src/gtk/animate.cpp $(ADVLIB_ODEP) +@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2@ $(CXXC) -c -o $@ $(ADVLIB_CXXFLAGS) $(srcdir)/src/gtk/animate.cpp + @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2@advlib_dataview.o: $(srcdir)/src/gtk/dataview.cpp $(ADVLIB_ODEP) @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2@ $(CXXC) -c -o $@ $(ADVLIB_CXXFLAGS) $(srcdir)/src/gtk/dataview.cpp diff --git a/build/bakefiles/files.bkl b/build/bakefiles/files.bkl index 8033700998..efc791abc5 100644 --- a/build/bakefiles/files.bkl +++ b/build/bakefiles/files.bkl @@ -551,6 +551,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! src/common/accesscmn.cpp + src/common/anidecod.cpp src/common/appcmn.cpp src/common/artprov.cpp src/common/artstd.cpp @@ -756,6 +757,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! wx/accel.h wx/access.h + wx/anidecod.h wx/artprov.h wx/bitmap.h wx/bookctrl.h @@ -2611,6 +2613,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! + src/common/animatecmn.cpp src/common/datavcmn.cpp src/generic/aboutdlgg.cpp src/generic/bmpcboxg.cpp @@ -2632,6 +2635,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! + wx/animate.h wx/bmpcbox.h wx/calctrl.h wx/dataview.h @@ -2673,12 +2677,14 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! + src/generic/animateg.cpp src/common/taskbarcmn.cpp src/msw/aboutdlg.cpp src/msw/sound.cpp src/msw/taskbar.cpp + wx/generic/animate.h wx/msw/sound.h wx/msw/taskbar.h @@ -2700,6 +2706,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! + src/generic/animateg.cpp src/common/taskbarcmn.cpp src/mac/carbon/aboutdlg.cpp src/mac/carbon/drawer.cpp @@ -2708,6 +2715,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! src/mac/corefoundation/hidjoystick.cpp + wx/generic/animate.h wx/mac/carbon/drawer.h wx/mac/carbon/sound.h wx/mac/carbon/taskbarosx.h @@ -2715,20 +2723,24 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! + src/generic/animateg.cpp src/cocoa/taskbar.mm src/common/taskbarcmn.cpp src/mac/corefoundation/hidjoystick.cpp + wx/generic/animate.h wx/cocoa/taskbar.h wx/mac/corefoundation/joystick.h + src/generic/animateg.cpp src/os2/joystick.cpp src/os2/sound.cpp + wx/generic/animate.h wx/os2/joystick.h wx/os2/sound.h @@ -2747,10 +2759,15 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! src/gtk/aboutdlg.cpp + src/gtk/animate.cpp src/gtk/taskbar.cpp src/gtk/dataview.cpp src/gtk/eggtrayicon.c + + wx/gtk/animate.h + + diff --git a/build/msw/makefile.bcc b/build/msw/makefile.bcc index 7cf4b8800e..a657f3d1f5 100644 --- a/build/msw/makefile.bcc +++ b/build/msw/makefile.bcc @@ -1369,6 +1369,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \ $(OBJS)\monodll_fdrepdlg.obj \ $(OBJS)\monodll_fontdlg.obj \ $(OBJS)\monodll_accesscmn.obj \ + $(OBJS)\monodll_anidecod.obj \ $(OBJS)\monodll_appcmn.obj \ $(OBJS)\monodll_artprov.obj \ $(OBJS)\monodll_artstd.obj \ @@ -1587,6 +1588,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \ $(OBJS)\monodll_mono.obj \ $(OBJS)\monodll_win32.obj \ $(OBJS)\monodll_accesscmn.obj \ + $(OBJS)\monodll_anidecod.obj \ $(OBJS)\monodll_appcmn.obj \ $(OBJS)\monodll_artprov.obj \ $(OBJS)\monodll_artstd.obj \ @@ -1703,6 +1705,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \ !endif !if "$(WXUNIV)" == "0" ____ADVANCED_SRC_FILENAMES_OBJECTS = \ + $(OBJS)\monodll_animatecmn.obj \ $(OBJS)\monodll_datavcmn.obj \ $(OBJS)\monodll_aboutdlgg.obj \ $(OBJS)\monodll_bmpcboxg.obj \ @@ -1721,6 +1724,7 @@ ____ADVANCED_SRC_FILENAMES_OBJECTS = \ $(OBJS)\monodll_splash.obj \ $(OBJS)\monodll_tipdlg.obj \ $(OBJS)\monodll_wizard.obj \ + $(OBJS)\monodll_animateg.obj \ $(OBJS)\monodll_taskbarcmn.obj \ $(OBJS)\monodll_aboutdlg.obj \ $(OBJS)\monodll_sound.obj \ @@ -1730,6 +1734,7 @@ ____ADVANCED_SRC_FILENAMES_OBJECTS = \ !endif !if "$(WXUNIV)" == "1" ____ADVANCED_SRC_FILENAMES_OBJECTS = \ + $(OBJS)\monodll_animatecmn.obj \ $(OBJS)\monodll_datavcmn.obj \ $(OBJS)\monodll_aboutdlgg.obj \ $(OBJS)\monodll_bmpcboxg.obj \ @@ -1748,6 +1753,7 @@ ____ADVANCED_SRC_FILENAMES_OBJECTS = \ $(OBJS)\monodll_splash.obj \ $(OBJS)\monodll_tipdlg.obj \ $(OBJS)\monodll_wizard.obj \ + $(OBJS)\monodll_animateg.obj \ $(OBJS)\monodll_taskbarcmn.obj \ $(OBJS)\monodll_aboutdlg.obj \ $(OBJS)\monodll_sound.obj \ @@ -1961,6 +1967,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \ $(OBJS)\monolib_fdrepdlg.obj \ $(OBJS)\monolib_fontdlg.obj \ $(OBJS)\monolib_accesscmn.obj \ + $(OBJS)\monolib_anidecod.obj \ $(OBJS)\monolib_appcmn.obj \ $(OBJS)\monolib_artprov.obj \ $(OBJS)\monolib_artstd.obj \ @@ -2179,6 +2186,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \ $(OBJS)\monolib_mono.obj \ $(OBJS)\monolib_win32.obj \ $(OBJS)\monolib_accesscmn.obj \ + $(OBJS)\monolib_anidecod.obj \ $(OBJS)\monolib_appcmn.obj \ $(OBJS)\monolib_artprov.obj \ $(OBJS)\monolib_artstd.obj \ @@ -2295,6 +2303,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \ !endif !if "$(WXUNIV)" == "0" ____ADVANCED_SRC_FILENAMES_1_OBJECTS = \ + $(OBJS)\monolib_animatecmn.obj \ $(OBJS)\monolib_datavcmn.obj \ $(OBJS)\monolib_aboutdlgg.obj \ $(OBJS)\monolib_bmpcboxg.obj \ @@ -2313,6 +2322,7 @@ ____ADVANCED_SRC_FILENAMES_1_OBJECTS = \ $(OBJS)\monolib_splash.obj \ $(OBJS)\monolib_tipdlg.obj \ $(OBJS)\monolib_wizard.obj \ + $(OBJS)\monolib_animateg.obj \ $(OBJS)\monolib_taskbarcmn.obj \ $(OBJS)\monolib_aboutdlg.obj \ $(OBJS)\monolib_sound.obj \ @@ -2322,6 +2332,7 @@ ____ADVANCED_SRC_FILENAMES_1_OBJECTS = \ !endif !if "$(WXUNIV)" == "1" ____ADVANCED_SRC_FILENAMES_1_OBJECTS = \ + $(OBJS)\monolib_animatecmn.obj \ $(OBJS)\monolib_datavcmn.obj \ $(OBJS)\monolib_aboutdlgg.obj \ $(OBJS)\monolib_bmpcboxg.obj \ @@ -2340,6 +2351,7 @@ ____ADVANCED_SRC_FILENAMES_1_OBJECTS = \ $(OBJS)\monolib_splash.obj \ $(OBJS)\monolib_tipdlg.obj \ $(OBJS)\monolib_wizard.obj \ + $(OBJS)\monolib_animateg.obj \ $(OBJS)\monolib_taskbarcmn.obj \ $(OBJS)\monolib_aboutdlg.obj \ $(OBJS)\monolib_sound.obj \ @@ -2467,6 +2479,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \ $(OBJS)\coredll_fdrepdlg.obj \ $(OBJS)\coredll_fontdlg.obj \ $(OBJS)\coredll_accesscmn.obj \ + $(OBJS)\coredll_anidecod.obj \ $(OBJS)\coredll_appcmn.obj \ $(OBJS)\coredll_artprov.obj \ $(OBJS)\coredll_artstd.obj \ @@ -2685,6 +2698,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \ $(OBJS)\coredll_mono.obj \ $(OBJS)\coredll_win32.obj \ $(OBJS)\coredll_accesscmn.obj \ + $(OBJS)\coredll_anidecod.obj \ $(OBJS)\coredll_appcmn.obj \ $(OBJS)\coredll_artprov.obj \ $(OBJS)\coredll_artstd.obj \ @@ -2904,6 +2918,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \ $(OBJS)\corelib_fdrepdlg.obj \ $(OBJS)\corelib_fontdlg.obj \ $(OBJS)\corelib_accesscmn.obj \ + $(OBJS)\corelib_anidecod.obj \ $(OBJS)\corelib_appcmn.obj \ $(OBJS)\corelib_artprov.obj \ $(OBJS)\corelib_artstd.obj \ @@ -3122,6 +3137,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \ $(OBJS)\corelib_mono.obj \ $(OBJS)\corelib_win32.obj \ $(OBJS)\corelib_accesscmn.obj \ + $(OBJS)\corelib_anidecod.obj \ $(OBJS)\corelib_appcmn.obj \ $(OBJS)\corelib_artprov.obj \ $(OBJS)\corelib_artstd.obj \ @@ -3242,6 +3258,7 @@ __advdll___depname = \ !endif !if "$(WXUNIV)" == "0" ____ADVANCED_SRC_FILENAMES_2_OBJECTS = \ + $(OBJS)\advdll_animatecmn.obj \ $(OBJS)\advdll_datavcmn.obj \ $(OBJS)\advdll_aboutdlgg.obj \ $(OBJS)\advdll_bmpcboxg.obj \ @@ -3260,6 +3277,7 @@ ____ADVANCED_SRC_FILENAMES_2_OBJECTS = \ $(OBJS)\advdll_splash.obj \ $(OBJS)\advdll_tipdlg.obj \ $(OBJS)\advdll_wizard.obj \ + $(OBJS)\advdll_animateg.obj \ $(OBJS)\advdll_taskbarcmn.obj \ $(OBJS)\advdll_aboutdlg.obj \ $(OBJS)\advdll_sound.obj \ @@ -3269,6 +3287,7 @@ ____ADVANCED_SRC_FILENAMES_2_OBJECTS = \ !endif !if "$(WXUNIV)" == "1" ____ADVANCED_SRC_FILENAMES_2_OBJECTS = \ + $(OBJS)\advdll_animatecmn.obj \ $(OBJS)\advdll_datavcmn.obj \ $(OBJS)\advdll_aboutdlgg.obj \ $(OBJS)\advdll_bmpcboxg.obj \ @@ -3287,6 +3306,7 @@ ____ADVANCED_SRC_FILENAMES_2_OBJECTS = \ $(OBJS)\advdll_splash.obj \ $(OBJS)\advdll_tipdlg.obj \ $(OBJS)\advdll_wizard.obj \ + $(OBJS)\advdll_animateg.obj \ $(OBJS)\advdll_taskbarcmn.obj \ $(OBJS)\advdll_aboutdlg.obj \ $(OBJS)\advdll_sound.obj \ @@ -3299,6 +3319,7 @@ __advlib___depname = \ !endif !if "$(WXUNIV)" == "0" ____ADVANCED_SRC_FILENAMES_3_OBJECTS = \ + $(OBJS)\advlib_animatecmn.obj \ $(OBJS)\advlib_datavcmn.obj \ $(OBJS)\advlib_aboutdlgg.obj \ $(OBJS)\advlib_bmpcboxg.obj \ @@ -3317,6 +3338,7 @@ ____ADVANCED_SRC_FILENAMES_3_OBJECTS = \ $(OBJS)\advlib_splash.obj \ $(OBJS)\advlib_tipdlg.obj \ $(OBJS)\advlib_wizard.obj \ + $(OBJS)\advlib_animateg.obj \ $(OBJS)\advlib_taskbarcmn.obj \ $(OBJS)\advlib_aboutdlg.obj \ $(OBJS)\advlib_sound.obj \ @@ -3326,6 +3348,7 @@ ____ADVANCED_SRC_FILENAMES_3_OBJECTS = \ !endif !if "$(WXUNIV)" == "1" ____ADVANCED_SRC_FILENAMES_3_OBJECTS = \ + $(OBJS)\advlib_animatecmn.obj \ $(OBJS)\advlib_datavcmn.obj \ $(OBJS)\advlib_aboutdlgg.obj \ $(OBJS)\advlib_bmpcboxg.obj \ @@ -3344,6 +3367,7 @@ ____ADVANCED_SRC_FILENAMES_3_OBJECTS = \ $(OBJS)\advlib_splash.obj \ $(OBJS)\advlib_tipdlg.obj \ $(OBJS)\advlib_wizard.obj \ + $(OBJS)\advlib_animateg.obj \ $(OBJS)\advlib_taskbarcmn.obj \ $(OBJS)\advlib_aboutdlg.obj \ $(OBJS)\advlib_sound.obj \ @@ -5635,6 +5659,11 @@ $(OBJS)\monodll_accesscmn.obj: ..\..\src\common\accesscmn.cpp $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) $** !endif +!if "$(USE_GUI)" == "1" +$(OBJS)\monodll_anidecod.obj: ..\..\src\common\anidecod.cpp + $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) $** +!endif + !if "$(USE_GUI)" == "1" $(OBJS)\monodll_appcmn.obj: ..\..\src\common\appcmn.cpp $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) $** @@ -6200,6 +6229,11 @@ $(OBJS)\monodll_vscroll.obj: ..\..\src\generic\vscroll.cpp $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) $** !endif +!if "$(USE_GUI)" == "1" +$(OBJS)\monodll_animatecmn.obj: ..\..\src\common\animatecmn.cpp + $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) $** +!endif + !if "$(USE_GUI)" == "1" $(OBJS)\monodll_datavcmn.obj: ..\..\src\common\datavcmn.cpp $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) $** @@ -6290,6 +6324,11 @@ $(OBJS)\monodll_wizard.obj: ..\..\src\generic\wizard.cpp $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) $** !endif +!if "$(USE_GUI)" == "1" +$(OBJS)\monodll_animateg.obj: ..\..\src\generic\animateg.cpp + $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) $** +!endif + !if "$(USE_GUI)" == "1" $(OBJS)\monodll_taskbarcmn.obj: ..\..\src\common\taskbarcmn.cpp $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) $** @@ -7548,6 +7587,11 @@ $(OBJS)\monolib_accesscmn.obj: ..\..\src\common\accesscmn.cpp $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) $** !endif +!if "$(USE_GUI)" == "1" +$(OBJS)\monolib_anidecod.obj: ..\..\src\common\anidecod.cpp + $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) $** +!endif + !if "$(USE_GUI)" == "1" $(OBJS)\monolib_appcmn.obj: ..\..\src\common\appcmn.cpp $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) $** @@ -8113,6 +8157,11 @@ $(OBJS)\monolib_vscroll.obj: ..\..\src\generic\vscroll.cpp $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) $** !endif +!if "$(USE_GUI)" == "1" +$(OBJS)\monolib_animatecmn.obj: ..\..\src\common\animatecmn.cpp + $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) $** +!endif + !if "$(USE_GUI)" == "1" $(OBJS)\monolib_datavcmn.obj: ..\..\src\common\datavcmn.cpp $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) $** @@ -8203,6 +8252,11 @@ $(OBJS)\monolib_wizard.obj: ..\..\src\generic\wizard.cpp $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) $** !endif +!if "$(USE_GUI)" == "1" +$(OBJS)\monolib_animateg.obj: ..\..\src\generic\animateg.cpp + $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) $** +!endif + !if "$(USE_GUI)" == "1" $(OBJS)\monolib_taskbarcmn.obj: ..\..\src\common\taskbarcmn.cpp $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) $** @@ -9482,6 +9536,11 @@ $(OBJS)\coredll_accesscmn.obj: ..\..\src\common\accesscmn.cpp $(CXX) -q -c -P -o$@ $(COREDLL_CXXFLAGS) $** !endif +!if "$(USE_GUI)" == "1" +$(OBJS)\coredll_anidecod.obj: ..\..\src\common\anidecod.cpp + $(CXX) -q -c -P -o$@ $(COREDLL_CXXFLAGS) $** +!endif + !if "$(USE_GUI)" == "1" $(OBJS)\coredll_appcmn.obj: ..\..\src\common\appcmn.cpp $(CXX) -q -c -P -o$@ $(COREDLL_CXXFLAGS) $** @@ -10722,6 +10781,11 @@ $(OBJS)\corelib_accesscmn.obj: ..\..\src\common\accesscmn.cpp $(CXX) -q -c -P -o$@ $(CORELIB_CXXFLAGS) $** !endif +!if "$(USE_GUI)" == "1" +$(OBJS)\corelib_anidecod.obj: ..\..\src\common\anidecod.cpp + $(CXX) -q -c -P -o$@ $(CORELIB_CXXFLAGS) $** +!endif + !if "$(USE_GUI)" == "1" $(OBJS)\corelib_appcmn.obj: ..\..\src\common\appcmn.cpp $(CXX) -q -c -P -o$@ $(CORELIB_CXXFLAGS) $** @@ -11296,6 +11360,9 @@ $(OBJS)\advdll_version.res: ..\..\src\msw\version.rc $(OBJS)\advdll_datectrl.obj: ..\..\src\msw\datectrl.cpp $(CXX) -q -c -P -o$@ $(ADVDLL_CXXFLAGS) $** +$(OBJS)\advdll_animatecmn.obj: ..\..\src\common\animatecmn.cpp + $(CXX) -q -c -P -o$@ $(ADVDLL_CXXFLAGS) $** + $(OBJS)\advdll_datavcmn.obj: ..\..\src\common\datavcmn.cpp $(CXX) -q -c -P -o$@ $(ADVDLL_CXXFLAGS) $** @@ -11350,6 +11417,9 @@ $(OBJS)\advdll_tipdlg.obj: ..\..\src\generic\tipdlg.cpp $(OBJS)\advdll_wizard.obj: ..\..\src\generic\wizard.cpp $(CXX) -q -c -P -o$@ $(ADVDLL_CXXFLAGS) $** +$(OBJS)\advdll_animateg.obj: ..\..\src\generic\animateg.cpp + $(CXX) -q -c -P -o$@ $(ADVDLL_CXXFLAGS) $** + $(OBJS)\advdll_taskbarcmn.obj: ..\..\src\common\taskbarcmn.cpp $(CXX) -q -c -P -o$@ $(ADVDLL_CXXFLAGS) $** @@ -11371,6 +11441,9 @@ $(OBJS)\advlib_dummy.obj: ..\..\src\common\dummy.cpp $(OBJS)\advlib_datectrl.obj: ..\..\src\msw\datectrl.cpp $(CXX) -q -c -P -o$@ $(ADVLIB_CXXFLAGS) $** +$(OBJS)\advlib_animatecmn.obj: ..\..\src\common\animatecmn.cpp + $(CXX) -q -c -P -o$@ $(ADVLIB_CXXFLAGS) $** + $(OBJS)\advlib_datavcmn.obj: ..\..\src\common\datavcmn.cpp $(CXX) -q -c -P -o$@ $(ADVLIB_CXXFLAGS) $** @@ -11425,6 +11498,9 @@ $(OBJS)\advlib_tipdlg.obj: ..\..\src\generic\tipdlg.cpp $(OBJS)\advlib_wizard.obj: ..\..\src\generic\wizard.cpp $(CXX) -q -c -P -o$@ $(ADVLIB_CXXFLAGS) $** +$(OBJS)\advlib_animateg.obj: ..\..\src\generic\animateg.cpp + $(CXX) -q -c -P -o$@ $(ADVLIB_CXXFLAGS) $** + $(OBJS)\advlib_taskbarcmn.obj: ..\..\src\common\taskbarcmn.cpp $(CXX) -q -c -P -o$@ $(ADVLIB_CXXFLAGS) $** diff --git a/build/msw/makefile.gcc b/build/msw/makefile.gcc index 5426f56632..e5d1946fa9 100644 --- a/build/msw/makefile.gcc +++ b/build/msw/makefile.gcc @@ -1379,6 +1379,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \ $(OBJS)\monodll_fdrepdlg.o \ $(OBJS)\monodll_fontdlg.o \ $(OBJS)\monodll_accesscmn.o \ + $(OBJS)\monodll_anidecod.o \ $(OBJS)\monodll_appcmn.o \ $(OBJS)\monodll_artprov.o \ $(OBJS)\monodll_artstd.o \ @@ -1599,6 +1600,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \ $(OBJS)\monodll_mono.o \ $(OBJS)\monodll_win32.o \ $(OBJS)\monodll_accesscmn.o \ + $(OBJS)\monodll_anidecod.o \ $(OBJS)\monodll_appcmn.o \ $(OBJS)\monodll_artprov.o \ $(OBJS)\monodll_artstd.o \ @@ -1716,6 +1718,7 @@ endif endif ifeq ($(WXUNIV),0) ____ADVANCED_SRC_FILENAMES_OBJECTS = \ + $(OBJS)\monodll_animatecmn.o \ $(OBJS)\monodll_datavcmn.o \ $(OBJS)\monodll_aboutdlgg.o \ $(OBJS)\monodll_bmpcboxg.o \ @@ -1734,6 +1737,7 @@ ____ADVANCED_SRC_FILENAMES_OBJECTS = \ $(OBJS)\monodll_splash.o \ $(OBJS)\monodll_tipdlg.o \ $(OBJS)\monodll_wizard.o \ + $(OBJS)\monodll_animateg.o \ $(OBJS)\monodll_taskbarcmn.o \ $(OBJS)\monodll_aboutdlg.o \ $(OBJS)\monodll_sound.o \ @@ -1743,6 +1747,7 @@ ____ADVANCED_SRC_FILENAMES_OBJECTS = \ endif ifeq ($(WXUNIV),1) ____ADVANCED_SRC_FILENAMES_OBJECTS = \ + $(OBJS)\monodll_animatecmn.o \ $(OBJS)\monodll_datavcmn.o \ $(OBJS)\monodll_aboutdlgg.o \ $(OBJS)\monodll_bmpcboxg.o \ @@ -1761,6 +1766,7 @@ ____ADVANCED_SRC_FILENAMES_OBJECTS = \ $(OBJS)\monodll_splash.o \ $(OBJS)\monodll_tipdlg.o \ $(OBJS)\monodll_wizard.o \ + $(OBJS)\monodll_animateg.o \ $(OBJS)\monodll_taskbarcmn.o \ $(OBJS)\monodll_aboutdlg.o \ $(OBJS)\monodll_sound.o \ @@ -1977,6 +1983,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \ $(OBJS)\monolib_fdrepdlg.o \ $(OBJS)\monolib_fontdlg.o \ $(OBJS)\monolib_accesscmn.o \ + $(OBJS)\monolib_anidecod.o \ $(OBJS)\monolib_appcmn.o \ $(OBJS)\monolib_artprov.o \ $(OBJS)\monolib_artstd.o \ @@ -2197,6 +2204,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \ $(OBJS)\monolib_mono.o \ $(OBJS)\monolib_win32.o \ $(OBJS)\monolib_accesscmn.o \ + $(OBJS)\monolib_anidecod.o \ $(OBJS)\monolib_appcmn.o \ $(OBJS)\monolib_artprov.o \ $(OBJS)\monolib_artstd.o \ @@ -2314,6 +2322,7 @@ endif endif ifeq ($(WXUNIV),0) ____ADVANCED_SRC_FILENAMES_1_OBJECTS = \ + $(OBJS)\monolib_animatecmn.o \ $(OBJS)\monolib_datavcmn.o \ $(OBJS)\monolib_aboutdlgg.o \ $(OBJS)\monolib_bmpcboxg.o \ @@ -2332,6 +2341,7 @@ ____ADVANCED_SRC_FILENAMES_1_OBJECTS = \ $(OBJS)\monolib_splash.o \ $(OBJS)\monolib_tipdlg.o \ $(OBJS)\monolib_wizard.o \ + $(OBJS)\monolib_animateg.o \ $(OBJS)\monolib_taskbarcmn.o \ $(OBJS)\monolib_aboutdlg.o \ $(OBJS)\monolib_sound.o \ @@ -2341,6 +2351,7 @@ ____ADVANCED_SRC_FILENAMES_1_OBJECTS = \ endif ifeq ($(WXUNIV),1) ____ADVANCED_SRC_FILENAMES_1_OBJECTS = \ + $(OBJS)\monolib_animatecmn.o \ $(OBJS)\monolib_datavcmn.o \ $(OBJS)\monolib_aboutdlgg.o \ $(OBJS)\monolib_bmpcboxg.o \ @@ -2359,6 +2370,7 @@ ____ADVANCED_SRC_FILENAMES_1_OBJECTS = \ $(OBJS)\monolib_splash.o \ $(OBJS)\monolib_tipdlg.o \ $(OBJS)\monolib_wizard.o \ + $(OBJS)\monolib_animateg.o \ $(OBJS)\monolib_taskbarcmn.o \ $(OBJS)\monolib_aboutdlg.o \ $(OBJS)\monolib_sound.o \ @@ -2499,6 +2511,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \ $(OBJS)\coredll_fdrepdlg.o \ $(OBJS)\coredll_fontdlg.o \ $(OBJS)\coredll_accesscmn.o \ + $(OBJS)\coredll_anidecod.o \ $(OBJS)\coredll_appcmn.o \ $(OBJS)\coredll_artprov.o \ $(OBJS)\coredll_artstd.o \ @@ -2719,6 +2732,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \ $(OBJS)\coredll_mono.o \ $(OBJS)\coredll_win32.o \ $(OBJS)\coredll_accesscmn.o \ + $(OBJS)\coredll_anidecod.o \ $(OBJS)\coredll_appcmn.o \ $(OBJS)\coredll_artprov.o \ $(OBJS)\coredll_artstd.o \ @@ -2944,6 +2958,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \ $(OBJS)\corelib_fdrepdlg.o \ $(OBJS)\corelib_fontdlg.o \ $(OBJS)\corelib_accesscmn.o \ + $(OBJS)\corelib_anidecod.o \ $(OBJS)\corelib_appcmn.o \ $(OBJS)\corelib_artprov.o \ $(OBJS)\corelib_artstd.o \ @@ -3164,6 +3179,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \ $(OBJS)\corelib_mono.o \ $(OBJS)\corelib_win32.o \ $(OBJS)\corelib_accesscmn.o \ + $(OBJS)\corelib_anidecod.o \ $(OBJS)\corelib_appcmn.o \ $(OBJS)\corelib_artprov.o \ $(OBJS)\corelib_artstd.o \ @@ -3289,6 +3305,7 @@ endif endif ifeq ($(WXUNIV),0) ____ADVANCED_SRC_FILENAMES_2_OBJECTS = \ + $(OBJS)\advdll_animatecmn.o \ $(OBJS)\advdll_datavcmn.o \ $(OBJS)\advdll_aboutdlgg.o \ $(OBJS)\advdll_bmpcboxg.o \ @@ -3307,6 +3324,7 @@ ____ADVANCED_SRC_FILENAMES_2_OBJECTS = \ $(OBJS)\advdll_splash.o \ $(OBJS)\advdll_tipdlg.o \ $(OBJS)\advdll_wizard.o \ + $(OBJS)\advdll_animateg.o \ $(OBJS)\advdll_taskbarcmn.o \ $(OBJS)\advdll_aboutdlg.o \ $(OBJS)\advdll_sound.o \ @@ -3316,6 +3334,7 @@ ____ADVANCED_SRC_FILENAMES_2_OBJECTS = \ endif ifeq ($(WXUNIV),1) ____ADVANCED_SRC_FILENAMES_2_OBJECTS = \ + $(OBJS)\advdll_animatecmn.o \ $(OBJS)\advdll_datavcmn.o \ $(OBJS)\advdll_aboutdlgg.o \ $(OBJS)\advdll_bmpcboxg.o \ @@ -3334,6 +3353,7 @@ ____ADVANCED_SRC_FILENAMES_2_OBJECTS = \ $(OBJS)\advdll_splash.o \ $(OBJS)\advdll_tipdlg.o \ $(OBJS)\advdll_wizard.o \ + $(OBJS)\advdll_animateg.o \ $(OBJS)\advdll_taskbarcmn.o \ $(OBJS)\advdll_aboutdlg.o \ $(OBJS)\advdll_sound.o \ @@ -3350,6 +3370,7 @@ endif endif ifeq ($(WXUNIV),0) ____ADVANCED_SRC_FILENAMES_3_OBJECTS = \ + $(OBJS)\advlib_animatecmn.o \ $(OBJS)\advlib_datavcmn.o \ $(OBJS)\advlib_aboutdlgg.o \ $(OBJS)\advlib_bmpcboxg.o \ @@ -3368,6 +3389,7 @@ ____ADVANCED_SRC_FILENAMES_3_OBJECTS = \ $(OBJS)\advlib_splash.o \ $(OBJS)\advlib_tipdlg.o \ $(OBJS)\advlib_wizard.o \ + $(OBJS)\advlib_animateg.o \ $(OBJS)\advlib_taskbarcmn.o \ $(OBJS)\advlib_aboutdlg.o \ $(OBJS)\advlib_sound.o \ @@ -3377,6 +3399,7 @@ ____ADVANCED_SRC_FILENAMES_3_OBJECTS = \ endif ifeq ($(WXUNIV),1) ____ADVANCED_SRC_FILENAMES_3_OBJECTS = \ + $(OBJS)\advlib_animatecmn.o \ $(OBJS)\advlib_datavcmn.o \ $(OBJS)\advlib_aboutdlgg.o \ $(OBJS)\advlib_bmpcboxg.o \ @@ -3395,6 +3418,7 @@ ____ADVANCED_SRC_FILENAMES_3_OBJECTS = \ $(OBJS)\advlib_splash.o \ $(OBJS)\advlib_tipdlg.o \ $(OBJS)\advlib_wizard.o \ + $(OBJS)\advlib_animateg.o \ $(OBJS)\advlib_taskbarcmn.o \ $(OBJS)\advlib_aboutdlg.o \ $(OBJS)\advlib_sound.o \ @@ -5852,6 +5876,11 @@ $(OBJS)\monodll_accesscmn.o: ../../src/common/accesscmn.cpp $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $< endif +ifeq ($(USE_GUI),1) +$(OBJS)\monodll_anidecod.o: ../../src/common/anidecod.cpp + $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $< +endif + ifeq ($(USE_GUI),1) $(OBJS)\monodll_appcmn.o: ../../src/common/appcmn.cpp $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $< @@ -6417,6 +6446,11 @@ $(OBJS)\monodll_vscroll.o: ../../src/generic/vscroll.cpp $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $< endif +ifeq ($(USE_GUI),1) +$(OBJS)\monodll_animatecmn.o: ../../src/common/animatecmn.cpp + $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $< +endif + ifeq ($(USE_GUI),1) $(OBJS)\monodll_datavcmn.o: ../../src/common/datavcmn.cpp $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $< @@ -6507,6 +6541,11 @@ $(OBJS)\monodll_wizard.o: ../../src/generic/wizard.cpp $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $< endif +ifeq ($(USE_GUI),1) +$(OBJS)\monodll_animateg.o: ../../src/generic/animateg.cpp + $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $< +endif + ifeq ($(USE_GUI),1) $(OBJS)\monodll_taskbarcmn.o: ../../src/common/taskbarcmn.cpp $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $< @@ -7865,6 +7904,11 @@ $(OBJS)\monolib_accesscmn.o: ../../src/common/accesscmn.cpp $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $< endif +ifeq ($(USE_GUI),1) +$(OBJS)\monolib_anidecod.o: ../../src/common/anidecod.cpp + $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $< +endif + ifeq ($(USE_GUI),1) $(OBJS)\monolib_appcmn.o: ../../src/common/appcmn.cpp $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $< @@ -8430,6 +8474,11 @@ $(OBJS)\monolib_vscroll.o: ../../src/generic/vscroll.cpp $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $< endif +ifeq ($(USE_GUI),1) +$(OBJS)\monolib_animatecmn.o: ../../src/common/animatecmn.cpp + $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $< +endif + ifeq ($(USE_GUI),1) $(OBJS)\monolib_datavcmn.o: ../../src/common/datavcmn.cpp $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $< @@ -8520,6 +8569,11 @@ $(OBJS)\monolib_wizard.o: ../../src/generic/wizard.cpp $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $< endif +ifeq ($(USE_GUI),1) +$(OBJS)\monolib_animateg.o: ../../src/generic/animateg.cpp + $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $< +endif + ifeq ($(USE_GUI),1) $(OBJS)\monolib_taskbarcmn.o: ../../src/common/taskbarcmn.cpp $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $< @@ -9899,6 +9953,11 @@ $(OBJS)\coredll_accesscmn.o: ../../src/common/accesscmn.cpp $(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $< endif +ifeq ($(USE_GUI),1) +$(OBJS)\coredll_anidecod.o: ../../src/common/anidecod.cpp + $(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $< +endif + ifeq ($(USE_GUI),1) $(OBJS)\coredll_appcmn.o: ../../src/common/appcmn.cpp $(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $< @@ -11239,6 +11298,11 @@ $(OBJS)\corelib_accesscmn.o: ../../src/common/accesscmn.cpp $(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $< endif +ifeq ($(USE_GUI),1) +$(OBJS)\corelib_anidecod.o: ../../src/common/anidecod.cpp + $(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $< +endif + ifeq ($(USE_GUI),1) $(OBJS)\corelib_appcmn.o: ../../src/common/appcmn.cpp $(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $< @@ -11813,6 +11877,9 @@ $(OBJS)\advdll_version_rc.o: ../../src/msw/version.rc $(OBJS)\advdll_datectrl.o: ../../src/msw/datectrl.cpp $(CXX) -c -o $@ $(ADVDLL_CXXFLAGS) $(CPPDEPS) $< +$(OBJS)\advdll_animatecmn.o: ../../src/common/animatecmn.cpp + $(CXX) -c -o $@ $(ADVDLL_CXXFLAGS) $(CPPDEPS) $< + $(OBJS)\advdll_datavcmn.o: ../../src/common/datavcmn.cpp $(CXX) -c -o $@ $(ADVDLL_CXXFLAGS) $(CPPDEPS) $< @@ -11867,6 +11934,9 @@ $(OBJS)\advdll_tipdlg.o: ../../src/generic/tipdlg.cpp $(OBJS)\advdll_wizard.o: ../../src/generic/wizard.cpp $(CXX) -c -o $@ $(ADVDLL_CXXFLAGS) $(CPPDEPS) $< +$(OBJS)\advdll_animateg.o: ../../src/generic/animateg.cpp + $(CXX) -c -o $@ $(ADVDLL_CXXFLAGS) $(CPPDEPS) $< + $(OBJS)\advdll_taskbarcmn.o: ../../src/common/taskbarcmn.cpp $(CXX) -c -o $@ $(ADVDLL_CXXFLAGS) $(CPPDEPS) $< @@ -11888,6 +11958,9 @@ $(OBJS)\advlib_dummy.o: ../../src/common/dummy.cpp $(OBJS)\advlib_datectrl.o: ../../src/msw/datectrl.cpp $(CXX) -c -o $@ $(ADVLIB_CXXFLAGS) $(CPPDEPS) $< +$(OBJS)\advlib_animatecmn.o: ../../src/common/animatecmn.cpp + $(CXX) -c -o $@ $(ADVLIB_CXXFLAGS) $(CPPDEPS) $< + $(OBJS)\advlib_datavcmn.o: ../../src/common/datavcmn.cpp $(CXX) -c -o $@ $(ADVLIB_CXXFLAGS) $(CPPDEPS) $< @@ -11942,6 +12015,9 @@ $(OBJS)\advlib_tipdlg.o: ../../src/generic/tipdlg.cpp $(OBJS)\advlib_wizard.o: ../../src/generic/wizard.cpp $(CXX) -c -o $@ $(ADVLIB_CXXFLAGS) $(CPPDEPS) $< +$(OBJS)\advlib_animateg.o: ../../src/generic/animateg.cpp + $(CXX) -c -o $@ $(ADVLIB_CXXFLAGS) $(CPPDEPS) $< + $(OBJS)\advlib_taskbarcmn.o: ../../src/common/taskbarcmn.cpp $(CXX) -c -o $@ $(ADVLIB_CXXFLAGS) $(CPPDEPS) $< diff --git a/build/msw/makefile.vc b/build/msw/makefile.vc index a606c68d1f..1acada9fb5 100644 --- a/build/msw/makefile.vc +++ b/build/msw/makefile.vc @@ -1536,6 +1536,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \ $(OBJS)\monodll_fdrepdlg.obj \ $(OBJS)\monodll_fontdlg.obj \ $(OBJS)\monodll_accesscmn.obj \ + $(OBJS)\monodll_anidecod.obj \ $(OBJS)\monodll_appcmn.obj \ $(OBJS)\monodll_artprov.obj \ $(OBJS)\monodll_artstd.obj \ @@ -1754,6 +1755,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \ $(OBJS)\monodll_mono.obj \ $(OBJS)\monodll_win32.obj \ $(OBJS)\monodll_accesscmn.obj \ + $(OBJS)\monodll_anidecod.obj \ $(OBJS)\monodll_appcmn.obj \ $(OBJS)\monodll_artprov.obj \ $(OBJS)\monodll_artstd.obj \ @@ -1870,6 +1872,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \ !endif !if "$(WXUNIV)" == "0" ____ADVANCED_SRC_FILENAMES_OBJECTS = \ + $(OBJS)\monodll_animatecmn.obj \ $(OBJS)\monodll_datavcmn.obj \ $(OBJS)\monodll_aboutdlgg.obj \ $(OBJS)\monodll_bmpcboxg.obj \ @@ -1888,6 +1891,7 @@ ____ADVANCED_SRC_FILENAMES_OBJECTS = \ $(OBJS)\monodll_splash.obj \ $(OBJS)\monodll_tipdlg.obj \ $(OBJS)\monodll_wizard.obj \ + $(OBJS)\monodll_animateg.obj \ $(OBJS)\monodll_taskbarcmn.obj \ $(OBJS)\monodll_aboutdlg.obj \ $(OBJS)\monodll_sound.obj \ @@ -1897,6 +1901,7 @@ ____ADVANCED_SRC_FILENAMES_OBJECTS = \ !endif !if "$(WXUNIV)" == "1" ____ADVANCED_SRC_FILENAMES_OBJECTS = \ + $(OBJS)\monodll_animatecmn.obj \ $(OBJS)\monodll_datavcmn.obj \ $(OBJS)\monodll_aboutdlgg.obj \ $(OBJS)\monodll_bmpcboxg.obj \ @@ -1915,6 +1920,7 @@ ____ADVANCED_SRC_FILENAMES_OBJECTS = \ $(OBJS)\monodll_splash.obj \ $(OBJS)\monodll_tipdlg.obj \ $(OBJS)\monodll_wizard.obj \ + $(OBJS)\monodll_animateg.obj \ $(OBJS)\monodll_taskbarcmn.obj \ $(OBJS)\monodll_aboutdlg.obj \ $(OBJS)\monodll_sound.obj \ @@ -2134,6 +2140,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \ $(OBJS)\monolib_fdrepdlg.obj \ $(OBJS)\monolib_fontdlg.obj \ $(OBJS)\monolib_accesscmn.obj \ + $(OBJS)\monolib_anidecod.obj \ $(OBJS)\monolib_appcmn.obj \ $(OBJS)\monolib_artprov.obj \ $(OBJS)\monolib_artstd.obj \ @@ -2352,6 +2359,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \ $(OBJS)\monolib_mono.obj \ $(OBJS)\monolib_win32.obj \ $(OBJS)\monolib_accesscmn.obj \ + $(OBJS)\monolib_anidecod.obj \ $(OBJS)\monolib_appcmn.obj \ $(OBJS)\monolib_artprov.obj \ $(OBJS)\monolib_artstd.obj \ @@ -2468,6 +2476,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \ !endif !if "$(WXUNIV)" == "0" ____ADVANCED_SRC_FILENAMES_1_OBJECTS = \ + $(OBJS)\monolib_animatecmn.obj \ $(OBJS)\monolib_datavcmn.obj \ $(OBJS)\monolib_aboutdlgg.obj \ $(OBJS)\monolib_bmpcboxg.obj \ @@ -2486,6 +2495,7 @@ ____ADVANCED_SRC_FILENAMES_1_OBJECTS = \ $(OBJS)\monolib_splash.obj \ $(OBJS)\monolib_tipdlg.obj \ $(OBJS)\monolib_wizard.obj \ + $(OBJS)\monolib_animateg.obj \ $(OBJS)\monolib_taskbarcmn.obj \ $(OBJS)\monolib_aboutdlg.obj \ $(OBJS)\monolib_sound.obj \ @@ -2495,6 +2505,7 @@ ____ADVANCED_SRC_FILENAMES_1_OBJECTS = \ !endif !if "$(WXUNIV)" == "1" ____ADVANCED_SRC_FILENAMES_1_OBJECTS = \ + $(OBJS)\monolib_animatecmn.obj \ $(OBJS)\monolib_datavcmn.obj \ $(OBJS)\monolib_aboutdlgg.obj \ $(OBJS)\monolib_bmpcboxg.obj \ @@ -2513,6 +2524,7 @@ ____ADVANCED_SRC_FILENAMES_1_OBJECTS = \ $(OBJS)\monolib_splash.obj \ $(OBJS)\monolib_tipdlg.obj \ $(OBJS)\monolib_wizard.obj \ + $(OBJS)\monolib_animateg.obj \ $(OBJS)\monolib_taskbarcmn.obj \ $(OBJS)\monolib_aboutdlg.obj \ $(OBJS)\monolib_sound.obj \ @@ -2670,6 +2682,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \ $(OBJS)\coredll_fdrepdlg.obj \ $(OBJS)\coredll_fontdlg.obj \ $(OBJS)\coredll_accesscmn.obj \ + $(OBJS)\coredll_anidecod.obj \ $(OBJS)\coredll_appcmn.obj \ $(OBJS)\coredll_artprov.obj \ $(OBJS)\coredll_artstd.obj \ @@ -2888,6 +2901,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \ $(OBJS)\coredll_mono.obj \ $(OBJS)\coredll_win32.obj \ $(OBJS)\coredll_accesscmn.obj \ + $(OBJS)\coredll_anidecod.obj \ $(OBJS)\coredll_appcmn.obj \ $(OBJS)\coredll_artprov.obj \ $(OBJS)\coredll_artstd.obj \ @@ -3113,6 +3127,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \ $(OBJS)\corelib_fdrepdlg.obj \ $(OBJS)\corelib_fontdlg.obj \ $(OBJS)\corelib_accesscmn.obj \ + $(OBJS)\corelib_anidecod.obj \ $(OBJS)\corelib_appcmn.obj \ $(OBJS)\corelib_artprov.obj \ $(OBJS)\corelib_artstd.obj \ @@ -3331,6 +3346,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \ $(OBJS)\corelib_mono.obj \ $(OBJS)\corelib_win32.obj \ $(OBJS)\corelib_accesscmn.obj \ + $(OBJS)\corelib_anidecod.obj \ $(OBJS)\corelib_appcmn.obj \ $(OBJS)\corelib_artprov.obj \ $(OBJS)\corelib_artstd.obj \ @@ -3457,6 +3473,7 @@ __RUNTIME_LIBS_195 = $(__THREADSFLAG) !endif !if "$(WXUNIV)" == "0" ____ADVANCED_SRC_FILENAMES_2_OBJECTS = \ + $(OBJS)\advdll_animatecmn.obj \ $(OBJS)\advdll_datavcmn.obj \ $(OBJS)\advdll_aboutdlgg.obj \ $(OBJS)\advdll_bmpcboxg.obj \ @@ -3475,6 +3492,7 @@ ____ADVANCED_SRC_FILENAMES_2_OBJECTS = \ $(OBJS)\advdll_splash.obj \ $(OBJS)\advdll_tipdlg.obj \ $(OBJS)\advdll_wizard.obj \ + $(OBJS)\advdll_animateg.obj \ $(OBJS)\advdll_taskbarcmn.obj \ $(OBJS)\advdll_aboutdlg.obj \ $(OBJS)\advdll_sound.obj \ @@ -3484,6 +3502,7 @@ ____ADVANCED_SRC_FILENAMES_2_OBJECTS = \ !endif !if "$(WXUNIV)" == "1" ____ADVANCED_SRC_FILENAMES_2_OBJECTS = \ + $(OBJS)\advdll_animatecmn.obj \ $(OBJS)\advdll_datavcmn.obj \ $(OBJS)\advdll_aboutdlgg.obj \ $(OBJS)\advdll_bmpcboxg.obj \ @@ -3502,6 +3521,7 @@ ____ADVANCED_SRC_FILENAMES_2_OBJECTS = \ $(OBJS)\advdll_splash.obj \ $(OBJS)\advdll_tipdlg.obj \ $(OBJS)\advdll_wizard.obj \ + $(OBJS)\advdll_animateg.obj \ $(OBJS)\advdll_taskbarcmn.obj \ $(OBJS)\advdll_aboutdlg.obj \ $(OBJS)\advdll_sound.obj \ @@ -3520,6 +3540,7 @@ __RUNTIME_LIBS_208 = $(__THREADSFLAG) !endif !if "$(WXUNIV)" == "0" ____ADVANCED_SRC_FILENAMES_3_OBJECTS = \ + $(OBJS)\advlib_animatecmn.obj \ $(OBJS)\advlib_datavcmn.obj \ $(OBJS)\advlib_aboutdlgg.obj \ $(OBJS)\advlib_bmpcboxg.obj \ @@ -3538,6 +3559,7 @@ ____ADVANCED_SRC_FILENAMES_3_OBJECTS = \ $(OBJS)\advlib_splash.obj \ $(OBJS)\advlib_tipdlg.obj \ $(OBJS)\advlib_wizard.obj \ + $(OBJS)\advlib_animateg.obj \ $(OBJS)\advlib_taskbarcmn.obj \ $(OBJS)\advlib_aboutdlg.obj \ $(OBJS)\advlib_sound.obj \ @@ -3547,6 +3569,7 @@ ____ADVANCED_SRC_FILENAMES_3_OBJECTS = \ !endif !if "$(WXUNIV)" == "1" ____ADVANCED_SRC_FILENAMES_3_OBJECTS = \ + $(OBJS)\advlib_animatecmn.obj \ $(OBJS)\advlib_datavcmn.obj \ $(OBJS)\advlib_aboutdlgg.obj \ $(OBJS)\advlib_bmpcboxg.obj \ @@ -3565,6 +3588,7 @@ ____ADVANCED_SRC_FILENAMES_3_OBJECTS = \ $(OBJS)\advlib_splash.obj \ $(OBJS)\advlib_tipdlg.obj \ $(OBJS)\advlib_wizard.obj \ + $(OBJS)\advlib_animateg.obj \ $(OBJS)\advlib_taskbarcmn.obj \ $(OBJS)\advlib_aboutdlg.obj \ $(OBJS)\advlib_sound.obj \ @@ -5968,6 +5992,11 @@ $(OBJS)\monodll_accesscmn.obj: ..\..\src\common\accesscmn.cpp $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) $** !endif +!if "$(USE_GUI)" == "1" +$(OBJS)\monodll_anidecod.obj: ..\..\src\common\anidecod.cpp + $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) $** +!endif + !if "$(USE_GUI)" == "1" $(OBJS)\monodll_appcmn.obj: ..\..\src\common\appcmn.cpp $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) $** @@ -6533,6 +6562,11 @@ $(OBJS)\monodll_vscroll.obj: ..\..\src\generic\vscroll.cpp $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) $** !endif +!if "$(USE_GUI)" == "1" +$(OBJS)\monodll_animatecmn.obj: ..\..\src\common\animatecmn.cpp + $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) $** +!endif + !if "$(USE_GUI)" == "1" $(OBJS)\monodll_datavcmn.obj: ..\..\src\common\datavcmn.cpp $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) $** @@ -6623,6 +6657,11 @@ $(OBJS)\monodll_wizard.obj: ..\..\src\generic\wizard.cpp $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) $** !endif +!if "$(USE_GUI)" == "1" +$(OBJS)\monodll_animateg.obj: ..\..\src\generic\animateg.cpp + $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) $** +!endif + !if "$(USE_GUI)" == "1" $(OBJS)\monodll_taskbarcmn.obj: ..\..\src\common\taskbarcmn.cpp $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) $** @@ -7881,6 +7920,11 @@ $(OBJS)\monolib_accesscmn.obj: ..\..\src\common\accesscmn.cpp $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) $** !endif +!if "$(USE_GUI)" == "1" +$(OBJS)\monolib_anidecod.obj: ..\..\src\common\anidecod.cpp + $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) $** +!endif + !if "$(USE_GUI)" == "1" $(OBJS)\monolib_appcmn.obj: ..\..\src\common\appcmn.cpp $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) $** @@ -8446,6 +8490,11 @@ $(OBJS)\monolib_vscroll.obj: ..\..\src\generic\vscroll.cpp $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) $** !endif +!if "$(USE_GUI)" == "1" +$(OBJS)\monolib_animatecmn.obj: ..\..\src\common\animatecmn.cpp + $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) $** +!endif + !if "$(USE_GUI)" == "1" $(OBJS)\monolib_datavcmn.obj: ..\..\src\common\datavcmn.cpp $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) $** @@ -8536,6 +8585,11 @@ $(OBJS)\monolib_wizard.obj: ..\..\src\generic\wizard.cpp $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) $** !endif +!if "$(USE_GUI)" == "1" +$(OBJS)\monolib_animateg.obj: ..\..\src\generic\animateg.cpp + $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) $** +!endif + !if "$(USE_GUI)" == "1" $(OBJS)\monolib_taskbarcmn.obj: ..\..\src\common\taskbarcmn.cpp $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) $** @@ -9815,6 +9869,11 @@ $(OBJS)\coredll_accesscmn.obj: ..\..\src\common\accesscmn.cpp $(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) $** !endif +!if "$(USE_GUI)" == "1" +$(OBJS)\coredll_anidecod.obj: ..\..\src\common\anidecod.cpp + $(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) $** +!endif + !if "$(USE_GUI)" == "1" $(OBJS)\coredll_appcmn.obj: ..\..\src\common\appcmn.cpp $(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) $** @@ -11055,6 +11114,11 @@ $(OBJS)\corelib_accesscmn.obj: ..\..\src\common\accesscmn.cpp $(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) $** !endif +!if "$(USE_GUI)" == "1" +$(OBJS)\corelib_anidecod.obj: ..\..\src\common\anidecod.cpp + $(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) $** +!endif + !if "$(USE_GUI)" == "1" $(OBJS)\corelib_appcmn.obj: ..\..\src\common\appcmn.cpp $(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) $** @@ -11629,6 +11693,9 @@ $(OBJS)\advdll_version.res: ..\..\src\msw\version.rc $(OBJS)\advdll_datectrl.obj: ..\..\src\msw\datectrl.cpp $(CXX) /c /nologo /TP /Fo$@ $(ADVDLL_CXXFLAGS) $** +$(OBJS)\advdll_animatecmn.obj: ..\..\src\common\animatecmn.cpp + $(CXX) /c /nologo /TP /Fo$@ $(ADVDLL_CXXFLAGS) $** + $(OBJS)\advdll_datavcmn.obj: ..\..\src\common\datavcmn.cpp $(CXX) /c /nologo /TP /Fo$@ $(ADVDLL_CXXFLAGS) $** @@ -11683,6 +11750,9 @@ $(OBJS)\advdll_tipdlg.obj: ..\..\src\generic\tipdlg.cpp $(OBJS)\advdll_wizard.obj: ..\..\src\generic\wizard.cpp $(CXX) /c /nologo /TP /Fo$@ $(ADVDLL_CXXFLAGS) $** +$(OBJS)\advdll_animateg.obj: ..\..\src\generic\animateg.cpp + $(CXX) /c /nologo /TP /Fo$@ $(ADVDLL_CXXFLAGS) $** + $(OBJS)\advdll_taskbarcmn.obj: ..\..\src\common\taskbarcmn.cpp $(CXX) /c /nologo /TP /Fo$@ $(ADVDLL_CXXFLAGS) $** @@ -11704,6 +11774,9 @@ $(OBJS)\advlib_dummy.obj: ..\..\src\common\dummy.cpp $(OBJS)\advlib_datectrl.obj: ..\..\src\msw\datectrl.cpp $(CXX) /c /nologo /TP /Fo$@ $(ADVLIB_CXXFLAGS) $** +$(OBJS)\advlib_animatecmn.obj: ..\..\src\common\animatecmn.cpp + $(CXX) /c /nologo /TP /Fo$@ $(ADVLIB_CXXFLAGS) $** + $(OBJS)\advlib_datavcmn.obj: ..\..\src\common\datavcmn.cpp $(CXX) /c /nologo /TP /Fo$@ $(ADVLIB_CXXFLAGS) $** @@ -11758,6 +11831,9 @@ $(OBJS)\advlib_tipdlg.obj: ..\..\src\generic\tipdlg.cpp $(OBJS)\advlib_wizard.obj: ..\..\src\generic\wizard.cpp $(CXX) /c /nologo /TP /Fo$@ $(ADVLIB_CXXFLAGS) $** +$(OBJS)\advlib_animateg.obj: ..\..\src\generic\animateg.cpp + $(CXX) /c /nologo /TP /Fo$@ $(ADVLIB_CXXFLAGS) $** + $(OBJS)\advlib_taskbarcmn.obj: ..\..\src\common\taskbarcmn.cpp $(CXX) /c /nologo /TP /Fo$@ $(ADVLIB_CXXFLAGS) $** diff --git a/build/msw/makefile.wat b/build/msw/makefile.wat index ae2182a250..b367c426a2 100644 --- a/build/msw/makefile.wat +++ b/build/msw/makefile.wat @@ -301,6 +301,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = & $(OBJS)\monodll_fdrepdlg.obj & $(OBJS)\monodll_fontdlg.obj & $(OBJS)\monodll_accesscmn.obj & + $(OBJS)\monodll_anidecod.obj & $(OBJS)\monodll_appcmn.obj & $(OBJS)\monodll_artprov.obj & $(OBJS)\monodll_artstd.obj & @@ -521,6 +522,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = & $(OBJS)\monodll_mono.obj & $(OBJS)\monodll_win32.obj & $(OBJS)\monodll_accesscmn.obj & + $(OBJS)\monodll_anidecod.obj & $(OBJS)\monodll_appcmn.obj & $(OBJS)\monodll_artprov.obj & $(OBJS)\monodll_artstd.obj & @@ -639,6 +641,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = & ____ADVANCED_SRC_FILENAMES_OBJECTS = !ifeq WXUNIV 0 ____ADVANCED_SRC_FILENAMES_OBJECTS = & + $(OBJS)\monodll_animatecmn.obj & $(OBJS)\monodll_datavcmn.obj & $(OBJS)\monodll_aboutdlgg.obj & $(OBJS)\monodll_bmpcboxg.obj & @@ -657,6 +660,7 @@ ____ADVANCED_SRC_FILENAMES_OBJECTS = & $(OBJS)\monodll_splash.obj & $(OBJS)\monodll_tipdlg.obj & $(OBJS)\monodll_wizard.obj & + $(OBJS)\monodll_animateg.obj & $(OBJS)\monodll_taskbarcmn.obj & $(OBJS)\monodll_aboutdlg.obj & $(OBJS)\monodll_sound.obj & @@ -666,6 +670,7 @@ ____ADVANCED_SRC_FILENAMES_OBJECTS = & !endif !ifeq WXUNIV 1 ____ADVANCED_SRC_FILENAMES_OBJECTS = & + $(OBJS)\monodll_animatecmn.obj & $(OBJS)\monodll_datavcmn.obj & $(OBJS)\monodll_aboutdlgg.obj & $(OBJS)\monodll_bmpcboxg.obj & @@ -684,6 +689,7 @@ ____ADVANCED_SRC_FILENAMES_OBJECTS = & $(OBJS)\monodll_splash.obj & $(OBJS)\monodll_tipdlg.obj & $(OBJS)\monodll_wizard.obj & + $(OBJS)\monodll_animateg.obj & $(OBJS)\monodll_taskbarcmn.obj & $(OBJS)\monodll_aboutdlg.obj & $(OBJS)\monodll_sound.obj & @@ -903,6 +909,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = & $(OBJS)\monolib_fdrepdlg.obj & $(OBJS)\monolib_fontdlg.obj & $(OBJS)\monolib_accesscmn.obj & + $(OBJS)\monolib_anidecod.obj & $(OBJS)\monolib_appcmn.obj & $(OBJS)\monolib_artprov.obj & $(OBJS)\monolib_artstd.obj & @@ -1123,6 +1130,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = & $(OBJS)\monolib_mono.obj & $(OBJS)\monolib_win32.obj & $(OBJS)\monolib_accesscmn.obj & + $(OBJS)\monolib_anidecod.obj & $(OBJS)\monolib_appcmn.obj & $(OBJS)\monolib_artprov.obj & $(OBJS)\monolib_artstd.obj & @@ -1241,6 +1249,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = & ____ADVANCED_SRC_FILENAMES_1_OBJECTS = !ifeq WXUNIV 0 ____ADVANCED_SRC_FILENAMES_1_OBJECTS = & + $(OBJS)\monolib_animatecmn.obj & $(OBJS)\monolib_datavcmn.obj & $(OBJS)\monolib_aboutdlgg.obj & $(OBJS)\monolib_bmpcboxg.obj & @@ -1259,6 +1268,7 @@ ____ADVANCED_SRC_FILENAMES_1_OBJECTS = & $(OBJS)\monolib_splash.obj & $(OBJS)\monolib_tipdlg.obj & $(OBJS)\monolib_wizard.obj & + $(OBJS)\monolib_animateg.obj & $(OBJS)\monolib_taskbarcmn.obj & $(OBJS)\monolib_aboutdlg.obj & $(OBJS)\monolib_sound.obj & @@ -1268,6 +1278,7 @@ ____ADVANCED_SRC_FILENAMES_1_OBJECTS = & !endif !ifeq WXUNIV 1 ____ADVANCED_SRC_FILENAMES_1_OBJECTS = & + $(OBJS)\monolib_animatecmn.obj & $(OBJS)\monolib_datavcmn.obj & $(OBJS)\monolib_aboutdlgg.obj & $(OBJS)\monolib_bmpcboxg.obj & @@ -1286,6 +1297,7 @@ ____ADVANCED_SRC_FILENAMES_1_OBJECTS = & $(OBJS)\monolib_splash.obj & $(OBJS)\monolib_tipdlg.obj & $(OBJS)\monolib_wizard.obj & + $(OBJS)\monolib_animateg.obj & $(OBJS)\monolib_taskbarcmn.obj & $(OBJS)\monolib_aboutdlg.obj & $(OBJS)\monolib_sound.obj & @@ -1432,6 +1444,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = & $(OBJS)\coredll_fdrepdlg.obj & $(OBJS)\coredll_fontdlg.obj & $(OBJS)\coredll_accesscmn.obj & + $(OBJS)\coredll_anidecod.obj & $(OBJS)\coredll_appcmn.obj & $(OBJS)\coredll_artprov.obj & $(OBJS)\coredll_artstd.obj & @@ -1652,6 +1665,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = & $(OBJS)\coredll_mono.obj & $(OBJS)\coredll_win32.obj & $(OBJS)\coredll_accesscmn.obj & + $(OBJS)\coredll_anidecod.obj & $(OBJS)\coredll_appcmn.obj & $(OBJS)\coredll_artprov.obj & $(OBJS)\coredll_artstd.obj & @@ -1879,6 +1893,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = & $(OBJS)\corelib_fdrepdlg.obj & $(OBJS)\corelib_fontdlg.obj & $(OBJS)\corelib_accesscmn.obj & + $(OBJS)\corelib_anidecod.obj & $(OBJS)\corelib_appcmn.obj & $(OBJS)\corelib_artprov.obj & $(OBJS)\corelib_artstd.obj & @@ -2099,6 +2114,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = & $(OBJS)\corelib_mono.obj & $(OBJS)\corelib_win32.obj & $(OBJS)\corelib_accesscmn.obj & + $(OBJS)\corelib_anidecod.obj & $(OBJS)\corelib_appcmn.obj & $(OBJS)\corelib_artprov.obj & $(OBJS)\corelib_artstd.obj & @@ -2226,6 +2242,7 @@ __advdll___depname = & ____ADVANCED_SRC_FILENAMES_2_OBJECTS = !ifeq WXUNIV 0 ____ADVANCED_SRC_FILENAMES_2_OBJECTS = & + $(OBJS)\advdll_animatecmn.obj & $(OBJS)\advdll_datavcmn.obj & $(OBJS)\advdll_aboutdlgg.obj & $(OBJS)\advdll_bmpcboxg.obj & @@ -2244,6 +2261,7 @@ ____ADVANCED_SRC_FILENAMES_2_OBJECTS = & $(OBJS)\advdll_splash.obj & $(OBJS)\advdll_tipdlg.obj & $(OBJS)\advdll_wizard.obj & + $(OBJS)\advdll_animateg.obj & $(OBJS)\advdll_taskbarcmn.obj & $(OBJS)\advdll_aboutdlg.obj & $(OBJS)\advdll_sound.obj & @@ -2253,6 +2271,7 @@ ____ADVANCED_SRC_FILENAMES_2_OBJECTS = & !endif !ifeq WXUNIV 1 ____ADVANCED_SRC_FILENAMES_2_OBJECTS = & + $(OBJS)\advdll_animatecmn.obj & $(OBJS)\advdll_datavcmn.obj & $(OBJS)\advdll_aboutdlgg.obj & $(OBJS)\advdll_bmpcboxg.obj & @@ -2271,6 +2290,7 @@ ____ADVANCED_SRC_FILENAMES_2_OBJECTS = & $(OBJS)\advdll_splash.obj & $(OBJS)\advdll_tipdlg.obj & $(OBJS)\advdll_wizard.obj & + $(OBJS)\advdll_animateg.obj & $(OBJS)\advdll_taskbarcmn.obj & $(OBJS)\advdll_aboutdlg.obj & $(OBJS)\advdll_sound.obj & @@ -2289,6 +2309,7 @@ __advlib___depname = & ____ADVANCED_SRC_FILENAMES_3_OBJECTS = !ifeq WXUNIV 0 ____ADVANCED_SRC_FILENAMES_3_OBJECTS = & + $(OBJS)\advlib_animatecmn.obj & $(OBJS)\advlib_datavcmn.obj & $(OBJS)\advlib_aboutdlgg.obj & $(OBJS)\advlib_bmpcboxg.obj & @@ -2307,6 +2328,7 @@ ____ADVANCED_SRC_FILENAMES_3_OBJECTS = & $(OBJS)\advlib_splash.obj & $(OBJS)\advlib_tipdlg.obj & $(OBJS)\advlib_wizard.obj & + $(OBJS)\advlib_animateg.obj & $(OBJS)\advlib_taskbarcmn.obj & $(OBJS)\advlib_aboutdlg.obj & $(OBJS)\advlib_sound.obj & @@ -2316,6 +2338,7 @@ ____ADVANCED_SRC_FILENAMES_3_OBJECTS = & !endif !ifeq WXUNIV 1 ____ADVANCED_SRC_FILENAMES_3_OBJECTS = & + $(OBJS)\advlib_animatecmn.obj & $(OBJS)\advlib_datavcmn.obj & $(OBJS)\advlib_aboutdlgg.obj & $(OBJS)\advlib_bmpcboxg.obj & @@ -2334,6 +2357,7 @@ ____ADVANCED_SRC_FILENAMES_3_OBJECTS = & $(OBJS)\advlib_splash.obj & $(OBJS)\advlib_tipdlg.obj & $(OBJS)\advlib_wizard.obj & + $(OBJS)\advlib_animateg.obj & $(OBJS)\advlib_taskbarcmn.obj & $(OBJS)\advlib_aboutdlg.obj & $(OBJS)\advlib_sound.obj & @@ -6080,6 +6104,11 @@ $(OBJS)\monodll_accesscmn.obj : .AUTODEPEND ..\..\src\common\accesscmn.cpp $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $< !endif +!ifeq USE_GUI 1 +$(OBJS)\monodll_anidecod.obj : .AUTODEPEND ..\..\src\common\anidecod.cpp + $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $< +!endif + !ifeq USE_GUI 1 $(OBJS)\monodll_appcmn.obj : .AUTODEPEND ..\..\src\common\appcmn.cpp $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $< @@ -6645,6 +6674,11 @@ $(OBJS)\monodll_vscroll.obj : .AUTODEPEND ..\..\src\generic\vscroll.cpp $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $< !endif +!ifeq USE_GUI 1 +$(OBJS)\monodll_animatecmn.obj : .AUTODEPEND ..\..\src\common\animatecmn.cpp + $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $< +!endif + !ifeq USE_GUI 1 $(OBJS)\monodll_datavcmn.obj : .AUTODEPEND ..\..\src\common\datavcmn.cpp $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $< @@ -6735,6 +6769,11 @@ $(OBJS)\monodll_wizard.obj : .AUTODEPEND ..\..\src\generic\wizard.cpp $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $< !endif +!ifeq USE_GUI 1 +$(OBJS)\monodll_animateg.obj : .AUTODEPEND ..\..\src\generic\animateg.cpp + $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $< +!endif + !ifeq USE_GUI 1 $(OBJS)\monodll_taskbarcmn.obj : .AUTODEPEND ..\..\src\common\taskbarcmn.cpp $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $< @@ -8093,6 +8132,11 @@ $(OBJS)\monolib_accesscmn.obj : .AUTODEPEND ..\..\src\common\accesscmn.cpp $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $< !endif +!ifeq USE_GUI 1 +$(OBJS)\monolib_anidecod.obj : .AUTODEPEND ..\..\src\common\anidecod.cpp + $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $< +!endif + !ifeq USE_GUI 1 $(OBJS)\monolib_appcmn.obj : .AUTODEPEND ..\..\src\common\appcmn.cpp $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $< @@ -8658,6 +8702,11 @@ $(OBJS)\monolib_vscroll.obj : .AUTODEPEND ..\..\src\generic\vscroll.cpp $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $< !endif +!ifeq USE_GUI 1 +$(OBJS)\monolib_animatecmn.obj : .AUTODEPEND ..\..\src\common\animatecmn.cpp + $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $< +!endif + !ifeq USE_GUI 1 $(OBJS)\monolib_datavcmn.obj : .AUTODEPEND ..\..\src\common\datavcmn.cpp $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $< @@ -8748,6 +8797,11 @@ $(OBJS)\monolib_wizard.obj : .AUTODEPEND ..\..\src\generic\wizard.cpp $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $< !endif +!ifeq USE_GUI 1 +$(OBJS)\monolib_animateg.obj : .AUTODEPEND ..\..\src\generic\animateg.cpp + $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $< +!endif + !ifeq USE_GUI 1 $(OBJS)\monolib_taskbarcmn.obj : .AUTODEPEND ..\..\src\common\taskbarcmn.cpp $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $< @@ -10127,6 +10181,11 @@ $(OBJS)\coredll_accesscmn.obj : .AUTODEPEND ..\..\src\common\accesscmn.cpp $(CXX) -bt=nt -zq -fo=$^@ $(COREDLL_CXXFLAGS) $< !endif +!ifeq USE_GUI 1 +$(OBJS)\coredll_anidecod.obj : .AUTODEPEND ..\..\src\common\anidecod.cpp + $(CXX) -bt=nt -zq -fo=$^@ $(COREDLL_CXXFLAGS) $< +!endif + !ifeq USE_GUI 1 $(OBJS)\coredll_appcmn.obj : .AUTODEPEND ..\..\src\common\appcmn.cpp $(CXX) -bt=nt -zq -fo=$^@ $(COREDLL_CXXFLAGS) $< @@ -11467,6 +11526,11 @@ $(OBJS)\corelib_accesscmn.obj : .AUTODEPEND ..\..\src\common\accesscmn.cpp $(CXX) -bt=nt -zq -fo=$^@ $(CORELIB_CXXFLAGS) $< !endif +!ifeq USE_GUI 1 +$(OBJS)\corelib_anidecod.obj : .AUTODEPEND ..\..\src\common\anidecod.cpp + $(CXX) -bt=nt -zq -fo=$^@ $(CORELIB_CXXFLAGS) $< +!endif + !ifeq USE_GUI 1 $(OBJS)\corelib_appcmn.obj : .AUTODEPEND ..\..\src\common\appcmn.cpp $(CXX) -bt=nt -zq -fo=$^@ $(CORELIB_CXXFLAGS) $< @@ -12041,6 +12105,9 @@ $(OBJS)\advdll_version.res : .AUTODEPEND ..\..\src\msw\version.rc $(OBJS)\advdll_datectrl.obj : .AUTODEPEND ..\..\src\msw\datectrl.cpp $(CXX) -bt=nt -zq -fo=$^@ $(ADVDLL_CXXFLAGS) $< +$(OBJS)\advdll_animatecmn.obj : .AUTODEPEND ..\..\src\common\animatecmn.cpp + $(CXX) -bt=nt -zq -fo=$^@ $(ADVDLL_CXXFLAGS) $< + $(OBJS)\advdll_datavcmn.obj : .AUTODEPEND ..\..\src\common\datavcmn.cpp $(CXX) -bt=nt -zq -fo=$^@ $(ADVDLL_CXXFLAGS) $< @@ -12095,6 +12162,9 @@ $(OBJS)\advdll_tipdlg.obj : .AUTODEPEND ..\..\src\generic\tipdlg.cpp $(OBJS)\advdll_wizard.obj : .AUTODEPEND ..\..\src\generic\wizard.cpp $(CXX) -bt=nt -zq -fo=$^@ $(ADVDLL_CXXFLAGS) $< +$(OBJS)\advdll_animateg.obj : .AUTODEPEND ..\..\src\generic\animateg.cpp + $(CXX) -bt=nt -zq -fo=$^@ $(ADVDLL_CXXFLAGS) $< + $(OBJS)\advdll_taskbarcmn.obj : .AUTODEPEND ..\..\src\common\taskbarcmn.cpp $(CXX) -bt=nt -zq -fo=$^@ $(ADVDLL_CXXFLAGS) $< @@ -12116,6 +12186,9 @@ $(OBJS)\advlib_dummy.obj : .AUTODEPEND ..\..\src\common\dummy.cpp $(OBJS)\advlib_datectrl.obj : .AUTODEPEND ..\..\src\msw\datectrl.cpp $(CXX) -bt=nt -zq -fo=$^@ $(ADVLIB_CXXFLAGS) $< +$(OBJS)\advlib_animatecmn.obj : .AUTODEPEND ..\..\src\common\animatecmn.cpp + $(CXX) -bt=nt -zq -fo=$^@ $(ADVLIB_CXXFLAGS) $< + $(OBJS)\advlib_datavcmn.obj : .AUTODEPEND ..\..\src\common\datavcmn.cpp $(CXX) -bt=nt -zq -fo=$^@ $(ADVLIB_CXXFLAGS) $< @@ -12170,6 +12243,9 @@ $(OBJS)\advlib_tipdlg.obj : .AUTODEPEND ..\..\src\generic\tipdlg.cpp $(OBJS)\advlib_wizard.obj : .AUTODEPEND ..\..\src\generic\wizard.cpp $(CXX) -bt=nt -zq -fo=$^@ $(ADVLIB_CXXFLAGS) $< +$(OBJS)\advlib_animateg.obj : .AUTODEPEND ..\..\src\generic\animateg.cpp + $(CXX) -bt=nt -zq -fo=$^@ $(ADVLIB_CXXFLAGS) $< + $(OBJS)\advlib_taskbarcmn.obj : .AUTODEPEND ..\..\src\common\taskbarcmn.cpp $(CXX) -bt=nt -zq -fo=$^@ $(ADVLIB_CXXFLAGS) $< diff --git a/build/msw/wx_adv.dsp b/build/msw/wx_adv.dsp index e6de6d2529..44064f85c7 100644 --- a/build/msw/wx_adv.dsp +++ b/build/msw/wx_adv.dsp @@ -452,6 +452,10 @@ LIB32=link.exe -lib # PROP Default_Filter "" # Begin Source File +SOURCE=..\..\src\common\animatecmn.cpp +# End Source File +# Begin Source File + SOURCE=..\..\src\common\datavcmn.cpp # End Source File # Begin Source File @@ -620,6 +624,10 @@ SOURCE=..\..\src\generic\aboutdlgg.cpp # End Source File # Begin Source File +SOURCE=..\..\src\generic\animateg.cpp +# End Source File +# Begin Source File + SOURCE=..\..\src\generic\bmpcboxg.cpp # End Source File # Begin Source File @@ -1137,6 +1145,10 @@ SOURCE=..\..\include\wx\generic\aboutdlgg.h # End Source File # Begin Source File +SOURCE=..\..\include\wx\generic\animate.h +# End Source File +# Begin Source File + SOURCE=..\..\include\wx\generic\bmpcbox.h # End Source File # Begin Source File @@ -1197,6 +1209,10 @@ SOURCE=..\..\include\wx\aboutdlg.h # End Source File # Begin Source File +SOURCE=..\..\include\wx\animate.h +# End Source File +# Begin Source File + SOURCE=..\..\include\wx\bmpcbox.h # End Source File # Begin Source File diff --git a/build/msw/wx_core.dsp b/build/msw/wx_core.dsp index 17b8d2c14f..b7ea3d8e6f 100644 --- a/build/msw/wx_core.dsp +++ b/build/msw/wx_core.dsp @@ -456,6 +456,10 @@ SOURCE=..\..\src\common\accesscmn.cpp # End Source File # Begin Source File +SOURCE=..\..\src\common\anidecod.cpp +# End Source File +# Begin Source File + SOURCE=..\..\src\common\appcmn.cpp # End Source File # Begin Source File @@ -8165,6 +8169,10 @@ SOURCE=..\..\include\wx\generic\accel.h # End Source File # Begin Source File +SOURCE=..\..\include\wx\generic\animate.h +# End Source File +# Begin Source File + SOURCE=..\..\include\wx\generic\bmpcbox.h # End Source File # Begin Source File @@ -8589,6 +8597,14 @@ SOURCE=..\..\include\wx\access.h # End Source File # Begin Source File +SOURCE=..\..\include\wx\anidecod.h +# End Source File +# Begin Source File + +SOURCE=..\..\include\wx\animate.h +# End Source File +# Begin Source File + SOURCE=..\..\include\wx\artprov.h # End Source File # Begin Source File diff --git a/configure.in b/configure.in index 5179c97467..ecb36ecaa6 100644 --- a/configure.in +++ b/configure.in @@ -510,6 +510,7 @@ if test $DEBUG_CONFIGURE = 1; then DEFAULT_wxUSE_VALIDATORS=no DEFAULT_wxUSE_ACCEL=no + DEFAULT_wxUSE_ANIMATIONCTRL=no DEFAULT_wxUSE_BUTTON=no DEFAULT_wxUSE_BMPBUTTON=no DEFAULT_wxUSE_BITMAPCOMBOBOX=no @@ -726,6 +727,7 @@ else DEFAULT_wxUSE_VALIDATORS=yes DEFAULT_wxUSE_ACCEL=yes + DEFAULT_wxUSE_ANIMATIONCTRL=yes DEFAULT_wxUSE_BUTTON=yes DEFAULT_wxUSE_BMPBUTTON=yes DEFAULT_wxUSE_BITMAPCOMBOBOX=yes @@ -1054,6 +1056,7 @@ dnl --disable- later on the command line - but by default all will be dnl used (and vice versa) if test "$wxUSE_CONTROLS" = "yes"; then DEFAULT_wxUSE_ACCEL=yes + DEFAULT_wxUSE_ANIMATIONCTRL=yes DEFAULT_wxUSE_BMPBUTTON=yes DEFAULT_wxUSE_BUTTON=yes DEFAULT_wxUSE_CALCTRL=yes @@ -1103,6 +1106,7 @@ if test "$wxUSE_CONTROLS" = "yes"; then DEFAULT_wxUSE_TIPWINDOW=yes elif test "$wxUSE_CONTROLS" = "no"; then DEFAULT_wxUSE_ACCEL=no + DEFAULT_wxUSE_ANIMATIONCTRL=no DEFAULT_wxUSE_BMPBUTTON=no DEFAULT_wxUSE_BUTTON=no DEFAULT_wxUSE_CALCTRL=no @@ -1153,6 +1157,7 @@ elif test "$wxUSE_CONTROLS" = "no"; then fi WX_ARG_ENABLE(accel, [ --enable-accel use accelerators], wxUSE_ACCEL) +WX_ARG_ENABLE(animatectrl, [ --enable-animatectrl use wxAnimationCtrl class], wxUSE_ANIMATIONCTRL) WX_ARG_ENABLE(button, [ --enable-button use wxButton class], wxUSE_BUTTON) WX_ARG_ENABLE(bmpbutton, [ --enable-bmpbutton use wxBitmapButton class], wxUSE_BMPBUTTON) WX_ARG_ENABLE(bmpcombobox, [ --enable-bmpcombobox use wxBitmapComboBox class], wxUSE_BITMAPCOMBOBOX) @@ -6462,6 +6467,12 @@ if test "$wxUSE_ACCEL" = "yes"; then USES_CONTROLS=1 fi +if test "$wxUSE_ACCEL" = "yes"; then + AC_DEFINE(wxUSE_ANIMATIONCTRL) + USES_CONTROLS=1 + SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS animate" +fi + if test "$wxUSE_BUTTON" = "yes"; then AC_DEFINE(wxUSE_BUTTON) USES_CONTROLS=1 diff --git a/docs/changes.txt b/docs/changes.txt index cceaf5143d..4c145eeb69 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -68,6 +68,7 @@ All (GUI): - Support for right-to-left text layout (started by Diaa Sami during Google Summer of Code, with a lot of help from Tim Kosse and others). +- wxAnimationCtrl added (Francesco Montorsi) - Added wxAboutBox() function for displaying the standard about dialog - Added wxID_PAGE_SETUP standard id. - Added wxSize::IncBy() and DecBy() methods. diff --git a/docs/latex/wx/animatctrl.tex b/docs/latex/wx/animatctrl.tex new file mode 100644 index 0000000000..d66bac7f0c --- /dev/null +++ b/docs/latex/wx/animatctrl.tex @@ -0,0 +1,159 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Name: animatctrl.tex +%% Purpose: wxAnimationCtrl documentation +%% Author: Francesco Montorsi +%% Created: 24-9-2006 +%% RCS-ID: $Id$ +%% Copyright: (c) 2006 Francesco Montorsi +%% License: wxWindows license +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\section{\class{wxAnimationCtrl}}\label{wxanimationctrl} + +This is a static control which displays an animation. +wxAnimationCtrl API is simple as possible and won't give you full control on the +animation; if you need it then use \helpref{wxMediaCtrl}{wxmediactrl}. + +This control is useful to display a (small) animation while doing a long task +(e.g. a "throbber"). + +It is only available if \texttt{wxUSE\_ANIMATIONCTRL} is set to $1$ (the default). + +\wxheading{Derived from} + +\helpref{wxControl}{wxcontrol}\\ +\helpref{wxWindow}{wxwindow}\\ +\helpref{wxEvtHandler}{wxevthandler}\\ +\helpref{wxObject}{wxobject} + +\wxheading{Include files} + + + +\wxheading{Window styles} + +\twocolwidtha{5cm}% +\begin{twocollist}\itemsep=0pt +\twocolitem{\windowstyle{wxAC\_DEFAULT\_STYLE}}{The default style: wxNO_BORDER.} +\twocolitem{\windowstyle{wxAC\_NO_AUTORESIZE}}{By default, the control will adjust +its size to exactly fit to the size of the animation when \helpref{SetAnimation}{wxanimationctrlsetanimation} +is called. If this style flag is given, the control will not change its size} +\end{twocollist} + +%\wxheading{Event handling} +% +%\twocolwidtha{7cm}% +%\begin{twocollist}\itemsep=0pt +%\twocolitem{{\bf EVT\_ANIMATION\_END(id, func)}}{} +%\end{twocollist} + +\wxheading{See also} + +\helpref{wxAnimation}{wxanimation} + + +\latexignore{\rtfignore{\wxheading{Members}}} + +\membersection{wxAnimationCtrl::wxAnimationCtrl}\label{wxanimationctrl} + +\func{}{wxAnimationCtrl}{\param{wxWindow *}{parent},\rtfsp +\param{wxWindowID}{ id},\rtfsp +\param{const wxAnimation\& }{anim},\rtfsp +\param{const wxPoint\& }{pos = wxDefaultPosition},\rtfsp +\param{const wxSize\& }{size = wxDefaultSize},\rtfsp +\param{long}{ style = wxAC\_DEFAULT\_STYLE},\rtfsp +\param{const wxString\& }{name = ``animationctrl"}} + +Initializes the object and calls \helpref{Create}{wxanimationctrlcreate} with +all the parameters. + + +\membersection{wxAnimationCtrl::Create}\label{wxanimationctrlcreate} + +\func{bool}{Create}{\param{wxWindow *}{parent},\rtfsp +\param{wxWindowID}{ id},\rtfsp +\param{const wxAnimation\& }{anim},\rtfsp +\param{const wxPoint\& }{pos = wxDefaultPosition},\rtfsp +\param{const wxSize\& }{size = wxDefaultSize},\rtfsp +\param{long}{ style = wxAC\_DEFAULT\_STYLE},\rtfsp +\param{const wxString\& }{name = ``animationctrl"}} + +\wxheading{Parameters} + +\docparam{parent}{Parent window, must not be non-\texttt{NULL}.} + +\docparam{id}{The identifier for the control.} + +\docparam{anim}{The initial animation shown in the control.} + +\docparam{pos}{Initial position.} + +\docparam{size}{Initial size.} + +\docparam{style}{The window style, see {\tt wxAC\_*} flags.} + +\docparam{name}{Control name.} + +After control creation you must explicitely call \helpref{Play}{wxanimationctrlplay} +to start to play the animation. Until that function won't be called, the first frame +of the animation is displayed. + +\wxheading{Return value} + +\true if the control was successfully created or \false if creation failed. + + +\membersection{wxAnimationCtrl::GetAnimation}\label{wxanimationctrlgetanimation} + +\constfunc{wxAnimation}{GetAnimation}{\void} + +Returns the animation associated with this control. + + +\membersection{wxAnimationCtrl::IsPlaying}\label{wxanimationctrlisplaying} + +\constfunc{bool}{IsPlaying}{\void} + +Returns \true if the animation is being played. + + +\membersection{wxAnimationCtrl::LoadFile}\label{wxanimationctrlloadfile} + +\func{bool}{LoadFile}{\param{const wxString \&}{ file}, \param{wxAnimationType }{ animType = wxANIMATION\_TYPE\_ANY}} + +Loads the animation from the given file and calls \helpref{SetAnimation}{wxanimationctrlsetanimation}. +See \helpref{wxAnimation::LoadFile}{wxanimationloadfile} for more info. + + +\membersection{wxAnimationCtrl::Play}\label{wxanimationctrlplay} + +\func{bool}{Play}{\void} + +Starts playing the animation. +The animation is always played in loop mode (unless the last frame of the animation +has an infinite delay time) and always start from the first frame +(even if you \helpref{atopped}{wxanimationctrlstop} it while some other frame was +displayed). + + +\membersection{wxAnimationCtrl::SetAnimation}\label{wxanimationctrlsetanimation} + +\func{void}{SetAnimation}{\param{const wxAnimation \&}{ anim}} + +Sets the animation to play in this control. +If the previous animation is being played, it's \helpref{Stopped}{wxanimationctrlstop}. + +Until \helpref{Play}{wxanimationctrlplay} isn't called, the first frame +of the animation is displayed. + +If {\tt wxNullAnimation} is given as animation, the control will be cleared to display +the background colour (see \helpref{wxWindow::GetBackgroundColour}{wxwindowgetbackgroundcolour}). + + +\membersection{wxAnimationCtrl::Stop}\label{wxanimationctrlstop} + +\func{void}{Stop}{\void} + +Stops playing the animation. +The control will show the last frame rendered of the current animation until +\helpref{Play}{wxanimationctrlplay} is called. diff --git a/docs/latex/wx/animation.tex b/docs/latex/wx/animation.tex new file mode 100644 index 0000000000..298c9f1df4 --- /dev/null +++ b/docs/latex/wx/animation.tex @@ -0,0 +1,153 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Name: animation.tex +%% Purpose: wxAnimation documentation +%% Author: Francesco Montorsi +%% Created: 24-9-2006 +%% RCS-ID: $Id$ +%% Copyright: (c) 2006 Francesco Montorsi +%% License: wxWindows license +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\section{\class{wxAnimation}}\label{wxanimation} + +This class encapsulates the concept of a platform-dependent animation. +An animation is a sequence of frames of the same size. +Sound is not supported by wxAnimation. + +\wxheading{Derived from} + +\helpref{wxGDIObject}{wxgdiobject}\\ +\helpref{wxObject}{wxobject} + +\wxheading{Include files} + + + +\wxheading{Predefined objects} + +Objects: + +{\bf wxNullAnimation} + +\wxheading{See also} + +\helpref{wxAnimationCtrl}{wxanimationctrl} + +\latexignore{\rtfignore{\wxheading{Members}}} + + +\membersection{wxAnimation::wxAnimation}\label{wxanimationctor} + +\func{}{wxAnimation}{\void} + +Default constructor. + +\func{}{wxAnimation}{\param{const wxAnimation\& }{anim}} + +Copy constructor. +wxAnimation objects are reference counted so that this operation is very fast. + +\func{}{wxAnimation}{\param{const wxString\& }{name}, \param{wxAnimationType}{ type = wxANIMATION\_TYPE\_ANY}} + +Loads an animation from a file. + +\docparam{name}{The name of the file to load.} + +\docparam{type}{See \helpref{LoadFile}{wxanimationloadfile} for more info.} + + +\membersection{wxAnimation::\destruct{wxAnimation}}\label{wxanimationdtor} + +\func{}{\destruct{wxAnimation}}{\void} + +Destroys the wxAnimation object and possibly the underlying animation data. +Because reference counting is used, the animation may not actually be +destroyed at this point - only when the reference count is zero will the +data be deleted. + + +\membersection{wxAnimation::GetDelay}\label{wxanimationgetdelay} + +\constfunc{int}{GetDelay}{\param{size_t }{i}} + +Returns the delay for the i-th frame in milliseconds. +If {\tt -1} is returned the frame is to be displayed forever. + + +\membersection{wxAnimation::GetFrameCount}\label{wxanimationgetframecount} + +\constfunc{size_t}{GetFrameCount}{\void} + +Returns the number of frames for this animation. + + +\membersection{wxAnimation::GetFrame}\label{wxanimationgetframe} + +\constfunc{wxImage}{GetFrame}{\param{size_t }{i}} + +Returns the i-th frame as a \helpref{wxImage}{wximage}. + + +\membersection{wxAnimation::GetSize}\label{wxanimationgetsize} + +\constfunc{wxSize}{GetSize}{\void} + +Returns the size of the animation. + + +\membersection{wxAnimation::IsOk}\label{wxanimationisok} + +\constfunc{bool}{IsOk}{\void} + +Returns \true if animation data is present. + + +\membersection{wxAnimation::Load}\label{wxanimationload} + +\func{bool}{Load}{\param{wxInputStream&}{ stream}, \param{wxAnimationType}{ type = wxANIMATION\_TYPE\_ANY}} + +Loads an animation from the given stream. + +\wxheading{Parameters} + +\docparam{stream}{The stream to use to load the animation.} + +\docparam{type}{One of the following values: + +\twocolwidtha{5cm} +\begin{twocollist} +\twocolitem{\indexit{wxANIM\_TYPE\_GIF}}{Load an animated GIF file.} +\twocolitem{\indexit{wxANIM\_TYPE\_ANI}}{Load an ANI file.} +\twocolitem{\indexit{wxANIM\_TYPE\_ANY}}{Try to autodetect the filetype.} +\end{twocollist} +} + +\wxheading{Return value} + +\true if the operation succeeded, \false otherwise. + + +\membersection{wxAnimation::LoadFile}\label{wxanimationloadfile} + +\func{bool}{LoadFile}{\param{const wxString\&}{ name}, \param{wxAnimationType}{ type = wxANIMATION\_TYPE\_ANY}} + +Loads an animation from a file. + +\wxheading{Parameters} + +\docparam{name}{A filename.} + +\docparam{type}{One of the following values: + +\twocolwidtha{5cm} +\begin{twocollist} +\twocolitem{\indexit{wxANIM\_TYPE\_GIF}}{Load an animated GIF file.} +\twocolitem{\indexit{wxANIM\_TYPE\_ANI}}{Load an ANI file.} +\twocolitem{\indexit{wxANIM\_TYPE\_ANY}}{Try to autodetect the filetype.} +\end{twocollist} +} + +\wxheading{Return value} + +\true if the operation succeeded, \false otherwise. + diff --git a/docs/latex/wx/category.tex b/docs/latex/wx/category.tex index 764cebed52..750d1456b7 100644 --- a/docs/latex/wx/category.tex +++ b/docs/latex/wx/category.tex @@ -85,6 +85,7 @@ that are not static can have \helpref{validators}{wxvalidator} associated with t \twocolwidtha{6cm} \begin{twocollist}\itemsep=0pt +\twocolitem{\helpref{wxAnimationCtrl}{wxanimationctrl}}{A control to display an animation} \twocolitem{\helpref{wxControl}{wxcontrol}}{The base class for controls} \twocolitem{\helpref{wxButton}{wxbutton}}{Push button control, displaying text} \twocolitem{\helpref{wxBitmapButton}{wxbitmapbutton}}{Push button control, displaying a bitmap} diff --git a/docs/latex/wx/classes.tex b/docs/latex/wx/classes.tex index 60d8b51378..08aa6d1a82 100644 --- a/docs/latex/wx/classes.tex +++ b/docs/latex/wx/classes.tex @@ -11,6 +11,8 @@ \input activevt.tex \input activexcontainer.tex \input activexevt.tex +\input animation.tex +\input animatctrl.tex \input app.tex \input apptraits.tex \input archive.tex diff --git a/include/wx/anidecod.h b/include/wx/anidecod.h new file mode 100644 index 0000000000..4fe25b6da8 --- /dev/null +++ b/include/wx/anidecod.h @@ -0,0 +1,77 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: wx/anidecod.h +// Purpose: wxANIDecoder, ANI reader for wxImage and wxAnimation +// Author: Francesco Montorsi +// CVS-ID: $Id$ +// Copyright: (c) 2006 Francesco Montorsi +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_ANIDECOD_H +#define _WX_ANIDECOD_H + +#include "wx/defs.h" + +#if wxUSE_STREAMS && wxUSE_GIF + +#include "wx/stream.h" +#include "wx/image.h" +#include "wx/animdecod.h" + + +class /*WXDLLEXPORT*/ wxANIFrameInfo; + +WX_DECLARE_OBJARRAY(wxANIFrameInfo, wxANIFrameInfoArray); +WX_DECLARE_OBJARRAY(wxImage, wxImageArray); + +// -------------------------------------------------------------------------- +// wxANIDecoder class +// -------------------------------------------------------------------------- + +class WXDLLEXPORT wxANIDecoder : public wxAnimationDecoder +{ +private: + + // frames stored as wxImage(s): ANI files are meant to be used mostly for animated + // cursors and thus they do not use any optimization to encode differences between + // two frames: they are just a list of images to display sequentially. + wxImageArray m_images; + + // the info about each image stored in m_images. + // NB: m_info.GetCount() may differ from m_images.GetCount()! + wxANIFrameInfoArray m_info; + + // this is the wxCURHandler used to load the ICON chunk of the ANI files + static wxCURHandler sm_handler; + +public: + virtual wxSize GetFrameSize(size_t frame) const; + virtual wxPoint GetFramePosition(size_t frame) const; + virtual wxAnimationDisposal GetDisposalMethod(size_t frame) const; + virtual long GetDelay(size_t frame) const; + +public: + // constructor, destructor, etc. + wxANIDecoder(); + ~wxANIDecoder(); + +public: // implementation of wxAnimationDecoder's pure virtuals + + virtual bool CanRead( wxInputStream& stream ) const; + virtual bool Load( wxInputStream& stream ); + + bool ConvertToImage(size_t frame, wxImage *image) const; + + wxAnimationDecoder *Clone() const + { return new wxANIDecoder; } + wxAnimationType GetType() const + { return wxANIMATION_TYPE_ANI; } + +private: + DECLARE_NO_COPY_CLASS(wxANIDecoder) +}; + + +#endif // wxUSE_STREAM && wxUSE_GIF +#endif // _WX_ANIDECOD_H + diff --git a/include/wx/animate.h b/include/wx/animate.h new file mode 100644 index 0000000000..5d2772fec5 --- /dev/null +++ b/include/wx/animate.h @@ -0,0 +1,108 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: wx/animate.h +// Purpose: wxAnimation and wxAnimationCtrl +// Author: Julian Smart and Guillermo Rodriguez Garcia +// Modified by: Francesco Montorsi +// Created: 13/8/99 +// RCS-ID: $Id$ +// Copyright: (c) Julian Smart and Guillermo Rodriguez Garcia +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_ANIMATEH__ +#define _WX_ANIMATEH__ + +#include "wx/defs.h" + +#if wxUSE_ANIMATIONCTRL + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class WXDLLIMPEXP_ADV wxAnimation; + +extern WXDLLEXPORT_DATA(wxAnimation) wxNullAnimation; +extern WXDLLEXPORT_DATA(const wxChar) wxAnimationCtrlNameStr[]; + + +// ---------------------------------------------------------------------------- +// wxAnimationBase +// ---------------------------------------------------------------------------- + +class WXDLLEXPORT wxAnimationBase : public wxGDIObject +{ +public: + wxAnimationBase() {} + + virtual bool IsOk() const = 0; + + // can be -1 + virtual int GetDelay(size_t i) const = 0; + + virtual size_t GetFrameCount() const = 0; + virtual wxImage GetFrame(size_t i) const = 0; + virtual wxSize GetSize() const = 0; + + virtual bool LoadFile(const wxString &name, wxAnimationType type = wxANIMATION_TYPE_ANY) = 0; + virtual bool Load(wxInputStream &stream, wxAnimationType type = wxANIMATION_TYPE_ANY) = 0; + +protected: + DECLARE_ABSTRACT_CLASS(wxAnimationBase) +}; + + + +// ---------------------------------------------------------------------------- +// wxAnimationCtrlBase +// ---------------------------------------------------------------------------- + +// do not autoresize to the animation's size when SetAnimation() is called +#define wxAC_NO_AUTORESIZE (0x0010) + +// default style does not include wxAC_NO_AUTORESIZE, that is, the control +// auto-resizes by default to fit the new animation when SetAnimation() is called +#define wxAC_DEFAULT_STYLE (wxNO_BORDER) + + +class WXDLLIMPEXP_ADV wxAnimationCtrlBase : public wxControl +{ +public: + wxAnimationCtrlBase() {} + +public: // public API + + virtual bool LoadFile(const wxString& filename, wxAnimationType type = wxANIMATION_TYPE_ANY) = 0; + + virtual void SetAnimation(const wxAnimation &anim) = 0; + virtual wxAnimation GetAnimation() const = 0; + + virtual bool Play() = 0; + virtual void Stop() = 0; + + virtual bool IsPlaying() const = 0; + +private: + DECLARE_ABSTRACT_CLASS(wxAnimationCtrlBase) +}; + + +// ---------------------------------------------------------------------------- +// include the platform-specific version of the wxAnimationCtrl class +// ---------------------------------------------------------------------------- + +#if defined(__WXGTK__) + #include "wx/gtk/animate.h" +#else + #include "wx/generic/animate.h" +#endif + +#endif // wxUSE_ANIMATIONCTRL + +#endif // _WX_ANIMATEH__ diff --git a/include/wx/animdecod.h b/include/wx/animdecod.h new file mode 100644 index 0000000000..2c65126e75 --- /dev/null +++ b/include/wx/animdecod.h @@ -0,0 +1,139 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: wx/animdecod.h +// Purpose: wxAnimationDecoder +// Author: Francesco Montorsi +// CVS-ID: $Id$ +// Copyright: (c) 2006 Francesco Montorsi +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_ANIMDECOD_H +#define _WX_ANIMDECOD_H + +#include "wx/defs.h" + +#if wxUSE_STREAMS && wxUSE_GIF + +#include "wx/stream.h" +#include "wx/image.h" + +/* + + Differences between a wxAnimationDecoder and a wxImageHandler: + + 1) wxImageHandlers always load an input stream directly into a given wxImage + object converting from the format-specific data representation to the + wxImage native format (RGB24). + wxAnimationDecoders always load an input stream using some optimized format + to store it which is format-depedent. This allows to store a (possibly big) + animation using a format which is a good compromise between required memory + and time required to blit in on the screen. + + 2) wxAnimationDecoders contain the animation data in some internal var. + That's why they derive from wxObjectRefData: they are data which can be shared. + + 3) wxAnimationDecoders can be used by a wxImageHandler to retrieve a frame + in wxImage format; the viceversa cannot be done. + + 4) wxAnimationDecoders are decoders only, thus do not support save features. + + 5) wxAnimationDecoders are directly used by wxAnimation (generic implementation) + as wxObjectRefData while they need to be 'wrapped' by a wxImageHandler for + wxImage uses. + +*/ + + +// -------------------------------------------------------------------------- +// Constants +// -------------------------------------------------------------------------- + +// NB: the values of these enum items are not casual but coincide with the +// GIF disposal codes. Do not change them !! +enum wxAnimationDisposal +{ + // No disposal specified. The decoder is not required to take any action. + wxANIM_UNSPECIFIED = -1, + + // Do not dispose. The graphic is to be left in place. + wxANIM_DONOTREMOVE = 0, + + // Restore to background color. The area used by the graphic must be + // restored to the background color. + wxANIM_TOBACKGROUND = 1, + + // Restore to previous. The decoder is required to restore the area + // overwritten by the graphic with what was there prior to rendering the graphic. + wxANIM_TOPREVIOUS = 2 +}; + +enum wxAnimationType +{ + wxANIMATION_TYPE_INVALID, + wxANIMATION_TYPE_GIF, + wxANIMATION_TYPE_ANI, + + wxANIMATION_TYPE_ANY +}; + + +// -------------------------------------------------------------------------- +// wxAnimationDecoder class +// -------------------------------------------------------------------------- + +class WXDLLEXPORT wxAnimationDecoder : public wxObjectRefData +{ +protected: + wxSize m_szAnimation; + size_t m_nFrames; + + // this is the colour to use for the wxANIM_TOBACKGROUND disposal. + // if not specified by the animation, it's set to wxNullColour + wxColour m_background; + +public: // frame specific data getters + + // not all frames may be of the same size; e.g. GIF allows to + // specify that between two frames only a smaller portion of the + // entire animation has changed. + virtual wxSize GetFrameSize(size_t frame) const = 0; + + // the position of this frame in case it's not as big as m_szAnimation + // or wxPoint(0,0) otherwise. + virtual wxPoint GetFramePosition(size_t frame) const = 0; + + // what should be done after displaying this frame. + virtual wxAnimationDisposal GetDisposalMethod(size_t frame) const = 0; + + // the number of milliseconds this frame should be displayed. + // if returns -1 then the frame must be displayed forever. + virtual long GetDelay(size_t frame) const = 0; + + // get global data + wxSize GetAnimationSize() const { return m_szAnimation; } + wxColour GetBackgroundColour() const { return m_background; } + size_t GetFrameCount() const { return m_nFrames; } + +public: + wxAnimationDecoder() + { + m_background = wxNullColour; + m_nFrames = 0; + } + ~wxAnimationDecoder() {} + + + virtual bool Load( wxInputStream& stream ) = 0; + virtual bool CanRead( wxInputStream& stream ) const = 0; + + virtual wxAnimationDecoder *Clone() const = 0; + virtual wxAnimationType GetType() const = 0; + + // convert given frame to wxImage + virtual bool ConvertToImage(size_t frame, wxImage *image) const = 0; +}; + + +#endif // wxUSE_STREAM && wxUSE_GIF +#endif // _WX_ANIMDECOD_H + diff --git a/include/wx/chkconf.h b/include/wx/chkconf.h index 39a66b6c4e..6ad8476e07 100644 --- a/include/wx/chkconf.h +++ b/include/wx/chkconf.h @@ -328,6 +328,14 @@ # endif #endif /* !defined(wxUSE_ACCEL) */ +#ifndef wxUSE_ANIMATIONCTRL +# ifdef wxABORT_ON_CONFIG_ERROR +# error "wxUSE_ANIMATIONCTRL must be defined." +# else +# define wxUSE_ANIMATIONCTRL 0 +# endif +#endif /* !defined(wxUSE_ANIMATIONCTRL) */ + #ifndef wxUSE_BITMAPCOMBOBOX # ifdef wxABORT_ON_CONFIG_ERROR # error "wxUSE_BITMAPCOMBOBOX must be defined." diff --git a/include/wx/generic/animate.h b/include/wx/generic/animate.h new file mode 100644 index 0000000000..a244d32ccd --- /dev/null +++ b/include/wx/generic/animate.h @@ -0,0 +1,189 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: wx/generic/animate.h +// Purpose: wxAnimation and wxAnimationCtrl +// Author: Julian Smart and Guillermo Rodriguez Garcia +// Modified by: Francesco Montorsi +// Created: 13/8/99 +// RCS-ID: $Id$ +// Copyright: (c) Julian Smart and Guillermo Rodriguez Garcia +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_GENERIC_ANIMATEH__ +#define _WX_GENERIC_ANIMATEH__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class WXDLLIMPEXP_ADV wxAnimationBase; +class WXDLLIMPEXP_ADV wxAnimationPlayer; +class WXDLLEXPORT wxImage; +class WXDLLEXPORT wxGIFDecoder; +class WXDLLEXPORT wxAnimation; + + +// ---------------------------------------------------------------------------- +// wxAnimation +// ---------------------------------------------------------------------------- + +WX_DECLARE_LIST(wxAnimationDecoder, wxAnimationDecoderList); + +class WXDLLIMPEXP_ADV wxAnimation : public wxAnimationBase +{ +public: + wxAnimation(const wxAnimation &tocopy) + { Ref(tocopy); } + wxAnimation() {} + ~wxAnimation() { UnRef(); } + + wxAnimation &operator= (const wxAnimation &tocopy) + { + Ref(tocopy); + return *this; + } + + bool operator == (const wxAnimation& anim) const + { return m_refData == anim.m_refData; } + bool operator != (const wxAnimation& anim) const + { return m_refData != anim.m_refData; } + + bool IsOk() const + { return m_refData != NULL; } + + size_t GetFrameCount() const; + int GetDelay(size_t i) const; + wxImage GetFrame(size_t i) const; + wxSize GetSize() const; + + bool LoadFile(const wxString& filename, wxAnimationType type = wxANIMATION_TYPE_ANY); + bool Load(wxInputStream &stream, wxAnimationType type = wxANIMATION_TYPE_ANY); + +public: // extended interface used by the generic implementation of wxAnimationCtrl + + wxPoint GetFramePosition(size_t frame) const; + wxAnimationDisposal GetDisposalMethod(size_t frame) const; + wxColour GetBackgroundColour() const; + +protected: + static wxAnimationDecoderList sm_handlers; + +public: + static inline wxAnimationDecoderList& GetHandlers() { return sm_handlers; } + static void AddHandler(wxAnimationDecoder *handler); + static void InsertHandler(wxAnimationDecoder *handler); + static const wxAnimationDecoder *FindHandler( wxAnimationType animType ); + + static void CleanUpHandlers(); + static void InitStandardHandlers(); + +protected: + DECLARE_DYNAMIC_CLASS(wxAnimation) +}; + + +// ---------------------------------------------------------------------------- +// wxAnimationCtrl +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_ADV wxAnimationCtrl: public wxAnimationCtrlBase +{ +public: + wxAnimationCtrl() {} + wxAnimationCtrl(wxWindow *parent, + wxWindowID id, + const wxAnimation& anim = wxNullAnimation, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxAC_DEFAULT_STYLE, + const wxString& name = wxAnimationCtrlNameStr) + { + Create(parent, id, anim, pos, size, style, name); + } + + bool Create(wxWindow *parent, wxWindowID id, + const wxAnimation& anim = wxNullAnimation, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxAC_DEFAULT_STYLE, + const wxString& name = wxAnimationCtrlNameStr); + + ~wxAnimationCtrl(); + +public: + virtual bool LoadFile(const wxString& filename, wxAnimationType type = wxANIMATION_TYPE_ANY); + + virtual void Stop(); + virtual bool Play() + { return Play(true /* looped */); } + virtual bool IsPlaying() const + { return m_isPlaying; } + + void SetAnimation(const wxAnimation &animation); + wxAnimation GetAnimation() const + { return m_animation; } + +public: // event handlers + + void OnPaint(wxPaintEvent& event); + void OnTimer(wxTimerEvent& event); + void OnSize(wxSizeEvent& event); + +public: // extended API specific to this implementation of wxAnimateCtrl + + // Specify whether the animation's background colour is to be shown (the default), + // or whether the window background should show through + void SetUseWindowBackgroundColour(bool useWinBackground = true) + { m_useWinBackgroundColour = useWinBackground; } + bool IsUsingWindowBackgroundColour() const + { return m_useWinBackgroundColour; } + + // This overload of Play() lets you specify if the animation must loop or not + bool Play(bool looped); + + // Draw the current frame of the animation into given DC. + // This is fast as current frame is always cached. + void DrawCurrentFrame(wxDC& dc); + + // Returns a wxBitmap with the current frame drawn in it + wxBitmap& GetBackingStore() + { return m_backingStore; } + +protected: // internal utilities + + // resize this control to fit m_animation + void FitToAnimation(); + + // Draw the background; use this when e.g. previous frame had wxANIM_TOBACKGROUND disposal. + void DisposeToBackground(wxDC& dc); + + void IncrementalUpdateBackingStore(); + void RebuildBackingStoreUpToFrame(size_t); + void DrawFrame(wxDC &dc, size_t); + + virtual wxSize DoGetBestSize() const; + +protected: + size_t m_currentFrame; // Current frame + bool m_looped; // Looped, or not + wxTimer m_timer; // The timer + wxAnimation m_animation; // The animation + + bool m_isPlaying; // Is the animation playing? + bool m_useWinBackgroundColour; // Use animation bg colour or window bg colour? + + wxBitmap m_backingStore; // The frames are drawn here and then blitted + // on the screen + +private: + DECLARE_DYNAMIC_CLASS(wxAnimationCtrl) + DECLARE_EVENT_TABLE() +}; + +#endif // _WX_GENERIC_ANIMATEH__ diff --git a/include/wx/gifdecod.h b/include/wx/gifdecod.h index cb9490e892..346ae800b9 100644 --- a/include/wx/gifdecod.h +++ b/include/wx/gifdecod.h @@ -17,6 +17,10 @@ #include "wx/stream.h" #include "wx/image.h" +#include "wx/animdecod.h" + +// internal utility used to store a frame in 8bit-per-pixel format +class /*WXDLLEXPORT*/ GIFImage; // -------------------------------------------------------------------------- @@ -29,7 +33,7 @@ // stream; this means that if it was not reading directly from file, // the stream will not be correctly positioned. the // -enum +enum wxGIFErrorCode { wxGIF_OK = 0, /* everything was OK */ wxGIF_INVFORMAT, /* error in gif header */ @@ -37,18 +41,6 @@ enum wxGIF_TRUNCATED /* file appears to be truncated */ }; -// Disposal method -// Experimental; subject to change. -// -enum -{ - wxGIF_D_UNSPECIFIED = -1, /* not specified */ - wxGIF_D_DONOTDISPOSE = 0, /* do not dispose */ - wxGIF_D_TOBACKGROUND = 1, /* restore to background colour */ - wxGIF_D_TOPREVIOUS = 2 /* restore to previous image */ -}; - - #define MAX_BLOCK_SIZE 256 /* max. block size */ @@ -56,45 +48,12 @@ enum // wxGIFDecoder class // -------------------------------------------------------------------------- -// internal class for storing GIF image data -class GIFImage -{ -public: - // def ctor - GIFImage(); - - unsigned int w; /* width */ - unsigned int h; /* height */ - unsigned int left; /* x coord (in logical screen) */ - unsigned int top; /* y coord (in logical screen) */ - int transparent; /* transparent color (-1 = none) */ - int disposal; /* disposal method (-1 = unspecified) */ - long delay; /* delay in ms (-1 = unused) */ - unsigned char *p; /* bitmap */ - unsigned char *pal; /* palette */ - unsigned int ncolours; /* number of colours */ - GIFImage *next; /* next image */ - GIFImage *prev; /* prev image */ - - DECLARE_NO_COPY_CLASS(GIFImage) -}; - - -class WXDLLEXPORT wxGIFDecoder +class WXDLLEXPORT wxGIFDecoder : public wxAnimationDecoder { private: - // logical screen - unsigned int m_screenw; /* logical screen width */ - unsigned int m_screenh; /* logical screen height */ - int m_background; /* background color (-1 = none) */ - - // image data - bool m_anim; /* animated GIF */ - int m_nimages; /* number of images */ - int m_image; /* current image */ - GIFImage *m_pimage; /* pointer to current image */ - GIFImage *m_pfirst; /* pointer to first image */ - GIFImage *m_plast; /* pointer to last image */ + // a wxArray provides a constant access time rather than a linear time + // like for linked lists. + wxArrayPtrVoid m_frames; // decoder state vars int m_restbits; /* remaining valid bits */ @@ -103,52 +62,51 @@ private: unsigned char m_buffer[MAX_BLOCK_SIZE]; /* buffer for reading */ unsigned char *m_bufp; /* pointer to next byte in buffer */ - // input stream - wxInputStream *m_f; /* input stream */ - private: - int getcode(int bits, int abfin); - int dgif(GIFImage *img, int interl, int bits); + int getcode(wxInputStream& stream, int bits, int abfin); + wxGIFErrorCode dgif(wxInputStream& stream, GIFImage *img, int interl, int bits); public: // get data of current frame - int GetFrameIndex() const; - unsigned char* GetData() const; - unsigned char* GetPalette() const; - unsigned int GetNcolours() const; - unsigned int GetWidth() const; - unsigned int GetHeight() const; - unsigned int GetLeft() const; - unsigned int GetTop() const; - int GetDisposalMethod() const; - int GetTransparentColour() const; - long GetDelay() const; - - // get global data - unsigned int GetLogicalScreenWidth() const; - unsigned int GetLogicalScreenHeight() const; - int GetBackgroundColour() const; - int GetNumberOfFrames() const; - bool IsAnimation() const; - - // move through the animation - bool GoFirstFrame(); - bool GoLastFrame(); - bool GoNextFrame(bool cyclic = false); - bool GoPrevFrame(bool cyclic = false); - bool GoFrame(int which); + unsigned char* GetData(size_t frame) const; + unsigned char* GetPalette(size_t frame) const; + unsigned int GetNcolours(size_t frame) const; + int GetTransparentColour(size_t frame) const; + + virtual wxSize GetFrameSize(size_t frame) const; + virtual wxPoint GetFramePosition(size_t frame) const; + virtual wxAnimationDisposal GetDisposalMethod(size_t frame) const; + virtual long GetDelay(size_t frame) const; + + // GIFs can contain both static images and animations + bool IsAnimation() const + { return m_nFrames > 1; } public: // constructor, destructor, etc. - wxGIFDecoder(wxInputStream *s, bool anim = false); + wxGIFDecoder(); ~wxGIFDecoder(); - bool CanRead(); - int ReadGIF(); + + // load function which returns more info than just Load(): + wxGIFErrorCode LoadGIF( wxInputStream& stream ); + + // free all internal frames void Destroy(); - // convert current frame to wxImage - bool ConvertToImage(wxImage *image) const; +public: // implementation of wxAnimationDecoder's pure virtuals + + virtual bool CanRead( wxInputStream& stream ) const; + virtual bool Load( wxInputStream& stream ) + { return LoadGIF(stream) == wxGIF_OK; } + + bool ConvertToImage(size_t frame, wxImage *image) const; + wxAnimationDecoder *Clone() const + { return new wxGIFDecoder; } + wxAnimationType GetType() const + { return wxANIMATION_TYPE_GIF; } + +private: DECLARE_NO_COPY_CLASS(wxGIFDecoder) }; diff --git a/include/wx/gtk/animate.h b/include/wx/gtk/animate.h new file mode 100644 index 0000000000..6e4704a42c --- /dev/null +++ b/include/wx/gtk/animate.h @@ -0,0 +1,181 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: wx/gtk/animate.h +// Purpose: Animation classes +// Author: Julian Smart and Guillermo Rodriguez Garcia +// Modified by: Francesco Montorsi +// Created: 13/8/99 +// RCS-ID: $Id$ +// Copyright: (c) Julian Smart and Guillermo Rodriguez Garcia +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_GTKANIMATEH__ +#define _WX_GTKANIMATEH__ + +#include "wx/defs.h" +#include + +// ---------------------------------------------------------------------------- +// wxAnimation +// Unlike the generic wxAnimation object (see generic\animate.cpp), we won't +// use directly wxAnimationHandlers as gdk-pixbuf already provides the +// concept of handler and will automatically use the available handlers. +// Like generic wxAnimation object, this implementation of wxAnimation is +// refcounted so that assignment is very fast +// ---------------------------------------------------------------------------- + +class WXDLLEXPORT wxAnimation : public wxAnimationBase +{ +public: + wxAnimation(const wxAnimation &tocopy) + { m_pixbuf=tocopy.m_pixbuf; if (m_pixbuf) g_object_ref(m_pixbuf); } + wxAnimation(GdkPixbufAnimation *p = NULL) + { m_pixbuf=p; } + ~wxAnimation() + { UnRef(); } + + wxAnimation &operator= (const wxAnimation &tocopy) + { + m_pixbuf=tocopy.m_pixbuf; + if (m_pixbuf) g_object_ref(m_pixbuf); + return *this; + } + + bool operator == (const wxAnimation& anim) const + { return m_pixbuf == anim.m_pixbuf; } + bool operator != (const wxAnimation& anim) const + { return m_pixbuf != anim.m_pixbuf; } + + virtual bool IsOk() const + { return m_pixbuf != NULL; } + + + // unfortunately GdkPixbufAnimation does not expose these info: + + virtual size_t GetFrameCount() const + { return 0; } + virtual wxImage GetFrame(size_t i) const + { return wxNullImage; } + + // we can retrieve the delay for a frame only after building + // a GdkPixbufAnimationIter... + virtual int GetDelay(size_t i) const + { return 0; } + + virtual wxSize GetSize() const + { return wxSize(gdk_pixbuf_animation_get_width(m_pixbuf), + gdk_pixbuf_animation_get_height(m_pixbuf)); } + + virtual bool LoadFile(const wxString &name, wxAnimationType type = wxANIMATION_TYPE_ANY); + virtual bool Load(wxInputStream &stream, wxAnimationType type = wxANIMATION_TYPE_ANY); + + void UnRef() + { + if (m_pixbuf) + g_object_unref(m_pixbuf); + m_pixbuf = NULL; + } + +public: // used by GTK callbacks + + GdkPixbufAnimation *GetPixbuf() const + { return m_pixbuf; } + void SetPixbuf(GdkPixbufAnimation *p) + { m_pixbuf=p; if (m_pixbuf) g_object_ref(m_pixbuf); } + +protected: + GdkPixbufAnimation *m_pixbuf; + + // used temporary by Load() + //bool m_bLoadComplete; + +protected: + DECLARE_DYNAMIC_CLASS(wxAnimation) +}; + + + +// ---------------------------------------------------------------------------- +// wxAnimationCtrl +// ---------------------------------------------------------------------------- + +// Resize to animation size if this is set +#define wxAN_FIT_ANIMATION 0x0010 + +class WXDLLIMPEXP_ADV wxAnimationCtrl: public wxAnimationCtrlBase +{ +public: + wxAnimationCtrl() {} + wxAnimationCtrl(wxWindow *parent, + wxWindowID id, + const wxAnimation& anim = wxNullAnimation, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxAC_DEFAULT_STYLE, + const wxString& name = wxAnimationCtrlNameStr) + { + Create(parent, id, anim, pos, size, style, name); + } + + bool Create(wxWindow *parent, wxWindowID id, + const wxAnimation& anim = wxNullAnimation, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxAC_DEFAULT_STYLE, + const wxString& name = wxAnimationCtrlNameStr); + + ~wxAnimationCtrl(); + +public: // event handler + + void OnTimer(wxTimerEvent &); + +public: // public API + + virtual bool LoadFile(const wxString& filename, wxAnimationType type = wxANIMATION_TYPE_ANY); + + virtual void SetAnimation(const wxAnimation &anim); + virtual wxAnimation GetAnimation() const + { return wxAnimation(m_anim); } + + virtual bool Play(); + virtual void Stop(); + + virtual bool IsPlaying() const; + + bool SetBackgroundColour( const wxColour &colour ); + +protected: + + virtual wxSize DoGetBestSize() const; + void FitToAnimation(); + void ClearToBackgroundColour(); + + void ResetAnim() + { + if (m_anim) + g_object_unref(m_anim); + m_anim = NULL; + } + + void ResetIter() + { + if (m_iter) + g_object_unref(m_iter); + m_iter = NULL; + } + +protected: // internal vars + + GdkPixbufAnimation *m_anim; + GdkPixbufAnimationIter *m_iter; + + wxTimer m_timer; + bool m_bPlaying; + +private: + DECLARE_DYNAMIC_CLASS(wxAnimationCtrl) + DECLARE_EVENT_TABLE() +}; + +#endif // _WX_GTKANIMATEH__ diff --git a/include/wx/imagbmp.h b/include/wx/imagbmp.h index d452670793..c85fac0e6a 100644 --- a/include/wx/imagbmp.h +++ b/include/wx/imagbmp.h @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // Name: imagbmp.h -// Purpose: wxImage BMP, ICO and CUR handlers +// Purpose: wxImage BMP, ICO, CUR and ANI handlers // Author: Robert Roebling, Chris Elliott // RCS-ID: $Id$ // Copyright: (c) Robert Roebling, Chris Elliott diff --git a/include/wx/mac/setup0.h b/include/wx/mac/setup0.h index 01a5ed2e82..9e2c824b85 100644 --- a/include/wx/mac/setup0.h +++ b/include/wx/mac/setup0.h @@ -601,6 +601,7 @@ // Default is 1 // // Recommended setting: 1 +#define wxUSE_ANIMATIONCTRL 1 // wxAnimationCtrl #define wxUSE_BUTTON 1 // wxButton #define wxUSE_BMPBUTTON 1 // wxBitmapButton #define wxUSE_CALENDARCTRL 1 // wxCalendarCtrl diff --git a/include/wx/motif/setup0.h b/include/wx/motif/setup0.h index 23bc554f40..43f560b438 100644 --- a/include/wx/motif/setup0.h +++ b/include/wx/motif/setup0.h @@ -600,6 +600,7 @@ // Default is 1 // // Recommended setting: 1 +#define wxUSE_ANIMATIONCTRL 1 // wxAnimationCtrl #define wxUSE_BUTTON 1 // wxButton #define wxUSE_BMPBUTTON 1 // wxBitmapButton #define wxUSE_CALENDARCTRL 1 // wxCalendarCtrl diff --git a/include/wx/msw/setup0.h b/include/wx/msw/setup0.h index 58d7558478..9b47d2cc3d 100644 --- a/include/wx/msw/setup0.h +++ b/include/wx/msw/setup0.h @@ -600,6 +600,7 @@ // Default is 1 // // Recommended setting: 1 +#define wxUSE_ANIMATIONCTRL 1 // wxAnimationCtrl #define wxUSE_BUTTON 1 // wxButton #define wxUSE_BMPBUTTON 1 // wxBitmapButton #define wxUSE_CALENDARCTRL 1 // wxCalendarCtrl diff --git a/include/wx/msw/wince/setup.h b/include/wx/msw/wince/setup.h index e0027b3598..8b055bab1d 100644 --- a/include/wx/msw/wince/setup.h +++ b/include/wx/msw/wince/setup.h @@ -600,6 +600,7 @@ // Default is 1 // // Recommended setting: 1 +#define wxUSE_ANIMATIONCTRL 1 // wxAnimationCtrl #define wxUSE_BUTTON 1 // wxButton #define wxUSE_BMPBUTTON 1 // wxBitmapButton #define wxUSE_CALENDARCTRL 1 // wxCalendarCtrl diff --git a/include/wx/os2/setup0.h b/include/wx/os2/setup0.h index 03405feab3..55b47dde66 100644 --- a/include/wx/os2/setup0.h +++ b/include/wx/os2/setup0.h @@ -600,6 +600,7 @@ // Default is 1 // // Recommended setting: 1 +#define wxUSE_ANIMATIONCTRL 1 // wxAnimationCtrl #define wxUSE_BUTTON 1 // wxButton #define wxUSE_BMPBUTTON 1 // wxBitmapButton #define wxUSE_CALENDARCTRL 1 // wxCalendarCtrl diff --git a/include/wx/palmos/setup0.h b/include/wx/palmos/setup0.h index fb5eacf1d6..a06bffa257 100644 --- a/include/wx/palmos/setup0.h +++ b/include/wx/palmos/setup0.h @@ -600,6 +600,7 @@ // Default is 1 // // Recommended setting: 1 +#define wxUSE_ANIMATIONCTRL 1 // wxAnimationCtrl #define wxUSE_BUTTON 1 // wxButton #define wxUSE_BMPBUTTON 1 // wxBitmapButton #define wxUSE_CALENDARCTRL 1 // wxCalendarCtrl diff --git a/include/wx/setup_inc.h b/include/wx/setup_inc.h index e0b6cb987e..387c59a715 100644 --- a/include/wx/setup_inc.h +++ b/include/wx/setup_inc.h @@ -596,6 +596,7 @@ // Default is 1 // // Recommended setting: 1 +#define wxUSE_ANIMATIONCTRL 1 // wxAnimationCtrl #define wxUSE_BUTTON 1 // wxButton #define wxUSE_BMPBUTTON 1 // wxBitmapButton #define wxUSE_CALENDARCTRL 1 // wxCalendarCtrl diff --git a/samples/animate/Makefile.in b/samples/animate/Makefile.in new file mode 100644 index 0000000000..4775d42bc5 --- /dev/null +++ b/samples/animate/Makefile.in @@ -0,0 +1,209 @@ +# ========================================================================= +# This makefile was generated by +# Bakefile 0.2.0 (http://bakefile.sourceforge.net) +# Do not modify, all changes will be overwritten! +# ========================================================================= + + +@MAKE_SET@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +INSTALL = @INSTALL@ +EXEEXT = @EXEEXT@ +WINDRES = @WINDRES@ +REZ = @REZ@ +SETFILE = @SETFILE@ +NM = @NM@ +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ +LIBS = @LIBS@ +LDFLAGS_GUI = @LDFLAGS_GUI@ +CXX = @CXX@ +CXXFLAGS = @CXXFLAGS@ +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +WX_LIB_FLAVOUR = @WX_LIB_FLAVOUR@ +TOOLKIT = @TOOLKIT@ +TOOLKIT_LOWERCASE = @TOOLKIT_LOWERCASE@ +TOOLKIT_VERSION = @TOOLKIT_VERSION@ +TOOLCHAIN_FULLNAME = @TOOLCHAIN_FULLNAME@ +EXTRALIBS = @EXTRALIBS@ +EXTRALIBS_GUI = @EXTRALIBS_GUI@ +EXTRALIBS_SDL = @EXTRALIBS_SDL@ +HOST_SUFFIX = @HOST_SUFFIX@ +SAMPLES_RPATH_FLAG = @SAMPLES_RPATH_FLAG@ +SAMPLES_RPATH_POSTLINK = @SAMPLES_RPATH_POSTLINK@ + +### Variables: ### + +DESTDIR = +WX_RELEASE = 2.7 +WX_VERSION = $(WX_RELEASE).0 +LIBDIRNAME = $(top_builddir)lib +ANITEST_CXXFLAGS = -D__WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p) \ + $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) \ + -I$(srcdir) $(__DLLFLAG_p) -I$(srcdir)/../../samples $(CPPFLAGS) $(CXXFLAGS) +ANITEST_OBJECTS = \ + $(__anitest_os2_lib_res) \ + anitest_anitest.o \ + $(__anitest___win32rc) + +### Conditionally set variables: ### + +@COND_DEPS_TRACKING_0@CXXC = $(CXX) +@COND_DEPS_TRACKING_1@CXXC = $(top_builddir)./bk-deps $(CXX) +@COND_USE_PLUGINS_0@PLUGIN_ADV_EXTRALIBS = $(EXTRALIBS_SDL) +@COND_USE_GUI_0@PORTNAME = base +@COND_USE_GUI_1@PORTNAME = $(TOOLKIT_LOWERCASE)$(TOOLKIT_VERSION) +@COND_TOOLKIT_MAC@WXBASEPORT = _carbon +@COND_BUILD_DEBUG_DEBUG_FLAG_DEFAULT@WXDEBUGFLAG = d +@COND_DEBUG_FLAG_1@WXDEBUGFLAG = d +@COND_UNICODE_1@WXUNICODEFLAG = u +@COND_WXUNIV_1@WXUNIVNAME = univ +@COND_MONOLITHIC_0@EXTRALIBS_FOR_BASE = $(EXTRALIBS) +@COND_MONOLITHIC_1@EXTRALIBS_FOR_BASE = $(EXTRALIBS) $(EXTRALIBS_GUI) +@COND_MONOLITHIC_0@EXTRALIBS_FOR_GUI = $(EXTRALIBS_GUI) +@COND_MONOLITHIC_1@EXTRALIBS_FOR_GUI = +@COND_PLATFORM_MAC_1@__anitest___mac_setfilecmd = \ +@COND_PLATFORM_MAC_1@ $(SETFILE) -a C anitest$(EXEEXT) +@COND_PLATFORM_MAC_1@__anitest___mac_rezcmd = $(__MACOSX_RESOURCES_p_1) +@COND_WXUNIV_1@__WXUNIV_DEFINE_p = -D__WXUNIVERSAL__ +@COND_WXUNIV_1@__WXUNIV_DEFINE_p_1 = -d __WXUNIVERSAL__ +@COND_WXUNIV_1@__WXUNIV_DEFINE_p_2 = --define __WXUNIVERSAL__ +@COND_USE_EXCEPTIONS_0@__EXCEPTIONS_DEFINE_p = -DwxNO_EXCEPTIONS +@COND_USE_EXCEPTIONS_0@__EXCEPTIONS_DEFINE_p_1 = -d wxNO_EXCEPTIONS +@COND_USE_EXCEPTIONS_0@__EXCEPTIONS_DEFINE_p_2 = --define wxNO_EXCEPTIONS +@COND_USE_RTTI_0@__RTTI_DEFINE_p = -DwxNO_RTTI +@COND_USE_RTTI_0@__RTTI_DEFINE_p_1 = -d wxNO_RTTI +@COND_USE_RTTI_0@__RTTI_DEFINE_p_2 = --define wxNO_RTTI +@COND_USE_THREADS_0@__THREAD_DEFINE_p = -DwxNO_THREADS +@COND_USE_THREADS_0@__THREAD_DEFINE_p_1 = -d wxNO_THREADS +@COND_USE_THREADS_0@__THREAD_DEFINE_p_2 = --define wxNO_THREADS +@COND_SHARED_1@__DLLFLAG_p = -DWXUSINGDLL +@COND_SHARED_1@__DLLFLAG_p_1 = -d WXUSINGDLL +@COND_SHARED_1@__DLLFLAG_p_2 = --define WXUSINGDLL +COND_PLATFORM_OS2_1___anitest___os2_emxbindcmd = $(NM) anitest$(EXEEXT) | if \ + grep -q pmwin.763 ; then emxbind -ep anitest$(EXEEXT) ; fi +@COND_PLATFORM_OS2_1@__anitest___os2_emxbindcmd = $(COND_PLATFORM_OS2_1___anitest___os2_emxbindcmd) +@COND_TOOLKIT_MSW@__RCDEFDIR_p = -i \ +@COND_TOOLKIT_MSW@ $(LIBDIRNAME)/wx/include/$(TOOLCHAIN_FULLNAME) +@COND_TOOLKIT_MSW@__RCDEFDIR_p_1 = --include-dir \ +@COND_TOOLKIT_MSW@ $(LIBDIRNAME)/wx/include/$(TOOLCHAIN_FULLNAME) +@COND_PLATFORM_OS2_1@__anitest_os2_lib_res = \ +@COND_PLATFORM_OS2_1@ $(top_srcdir)/include/wx/os2/wx.res +@COND_PLATFORM_MACOSX_1@__anitest_bundle___depname = anitest_bundle +@COND_TOOLKIT_COCOA@____anitest_BUNDLE_TGT_REF_DEP = \ +@COND_TOOLKIT_COCOA@ anitest.app/Contents/PkgInfo +@COND_TOOLKIT_MAC@____anitest_BUNDLE_TGT_REF_DEP = \ +@COND_TOOLKIT_MAC@ anitest.app/Contents/PkgInfo +COND_MONOLITHIC_0___WXLIB_ADV_p = \ + -lwx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv-$(WX_RELEASE)$(HOST_SUFFIX) +@COND_MONOLITHIC_0@__WXLIB_ADV_p = $(COND_MONOLITHIC_0___WXLIB_ADV_p) +COND_MONOLITHIC_0___WXLIB_CORE_p = \ + -lwx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core-$(WX_RELEASE)$(HOST_SUFFIX) +@COND_MONOLITHIC_0@__WXLIB_CORE_p = $(COND_MONOLITHIC_0___WXLIB_CORE_p) +COND_MONOLITHIC_0___WXLIB_BASE_p = \ + -lwx_base$(WXBASEPORT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) +@COND_MONOLITHIC_0@__WXLIB_BASE_p = $(COND_MONOLITHIC_0___WXLIB_BASE_p) +@COND_PLATFORM_WIN32_1@__anitest___win32rc = anitest_sample_rc.o +COND_MONOLITHIC_1___WXLIB_MONO_p = \ + -lwx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) +@COND_MONOLITHIC_1@__WXLIB_MONO_p = $(COND_MONOLITHIC_1___WXLIB_MONO_p) +@COND_USE_GUI_1_WXUSE_LIBTIFF_BUILTIN@__LIB_TIFF_p \ +@COND_USE_GUI_1_WXUSE_LIBTIFF_BUILTIN@ = \ +@COND_USE_GUI_1_WXUSE_LIBTIFF_BUILTIN@ -lwxtiff$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) +@COND_USE_GUI_1_WXUSE_LIBJPEG_BUILTIN@__LIB_JPEG_p \ +@COND_USE_GUI_1_WXUSE_LIBJPEG_BUILTIN@ = \ +@COND_USE_GUI_1_WXUSE_LIBJPEG_BUILTIN@ -lwxjpeg$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) +@COND_USE_GUI_1_WXUSE_LIBPNG_BUILTIN@__LIB_PNG_p \ +@COND_USE_GUI_1_WXUSE_LIBPNG_BUILTIN@ = \ +@COND_USE_GUI_1_WXUSE_LIBPNG_BUILTIN@ -lwxpng$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) +@COND_WXUSE_ZLIB_BUILTIN@__LIB_ZLIB_p = \ +@COND_WXUSE_ZLIB_BUILTIN@ -lwxzlib$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) +@COND_WXUSE_ODBC_BUILTIN@__LIB_ODBC_p = \ +@COND_WXUSE_ODBC_BUILTIN@ -lwxodbc$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) +COND_WXUSE_REGEX_BUILTIN___LIB_REGEX_p = \ + -lwxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) +@COND_WXUSE_REGEX_BUILTIN@__LIB_REGEX_p = $(COND_WXUSE_REGEX_BUILTIN___LIB_REGEX_p) +@COND_WXUSE_EXPAT_BUILTIN@__LIB_EXPAT_p = \ +@COND_WXUSE_EXPAT_BUILTIN@ -lwxexpat$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) +COND_TOOLKIT_MAC___MACOSX_RESOURCES_p_1 = $(REZ) -d __DARWIN__ -t APPL -d \ + __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_1) $(__EXCEPTIONS_DEFINE_p_1) \ + $(__RTTI_DEFINE_p_1) $(__THREAD_DEFINE_p_1) -i $(srcdir) $(__DLLFLAG_p_1) -i \ + $(srcdir)/../../samples $(__RCDEFDIR_p) -i $(top_srcdir)/include -o \ + anitest$(EXEEXT) Carbon.r sample.r +@COND_TOOLKIT_MAC@__MACOSX_RESOURCES_p_1 = $(COND_TOOLKIT_MAC___MACOSX_RESOURCES_p_1) + +### Targets: ### + +all: anitest$(EXEEXT) $(__anitest_bundle___depname) catalog + +install: all + +uninstall: + +install-strip: install + +clean: + rm -rf ./.deps ./.pch + rm -f ./*.o + rm -f anitest$(EXEEXT) + rm -rf anitest.app + +distclean: clean + rm -f config.cache config.log config.status bk-deps bk-make-pch shared-ld-sh Makefile + +anitest$(EXEEXT): $(ANITEST_OBJECTS) $(__anitest___win32rc) + $(CXX) -o $@ $(ANITEST_OBJECTS) $(LDFLAGS) -L$(LIBDIRNAME) $(LDFLAGS_GUI) $(SAMPLES_RPATH_FLAG) $(LIBS) $(__WXLIB_ADV_p) $(PLUGIN_ADV_EXTRALIBS) $(__WXLIB_CORE_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(EXTRALIBS_FOR_GUI) $(__LIB_ZLIB_p) $(__LIB_ODBC_p) $(__LIB_REGEX_p) $(__LIB_EXPAT_p) $(EXTRALIBS_FOR_BASE) + $(__anitest___mac_rezcmd) + $(__anitest___mac_setfilecmd) + $(__anitest___os2_emxbindcmd) + $(SAMPLES_RPATH_POSTLINK) + +anitest.app/Contents/PkgInfo: anitest$(EXEEXT) $(top_srcdir)/src/mac/carbon/Info.plist.in $(top_srcdir)/src/mac/carbon/wxmac.icns + mkdir -p anitest.app/Contents + mkdir -p anitest.app/Contents/MacOS + mkdir -p anitest.app/Contents/Resources + + + sed -e "s/IDENTIFIER/`echo $(srcdir) | sed -e 's,\.\./,,g' | sed -e 's,/,.,g'`/" \ + -e "s/EXECUTABLE/anitest/" \ + -e "s/VERSION/$(WX_VERSION)/" \ + $(top_srcdir)/src/mac/carbon/Info.plist.in >anitest.app/Contents/Info.plist + + + echo -n "APPL????" >anitest.app/Contents/PkgInfo + + + ln -f anitest$(EXEEXT) anitest.app/Contents/MacOS/anitest + + + cp -f $(top_srcdir)/src/mac/carbon/wxmac.icns anitest.app/Contents/Resources/wxmac.icns + +@COND_PLATFORM_MACOSX_1@anitest_bundle: $(____anitest_BUNDLE_TGT_REF_DEP) + +catalog: + @mkdir -p . + @for f in throbber.gif hourglass.ani; do \ + if test ! -f ./$$f -a ! -d ./$$f ; \ + then x=yep ; \ + else x=`find $(srcdir)/$$f -newer ./$$f -print` ; \ + fi; \ + case "$$x" in ?*) \ + cp -pRf $(srcdir)/$$f . ;; \ + esac; \ + done + +anitest_anitest.o: $(srcdir)/anitest.cpp + $(CXXC) -c -o $@ $(ANITEST_CXXFLAGS) $(srcdir)/anitest.cpp + +anitest_sample_rc.o: $(srcdir)/../sample.rc + $(WINDRES) -i$< -o$@ --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_2) $(__EXCEPTIONS_DEFINE_p_2) $(__RTTI_DEFINE_p_2) $(__THREAD_DEFINE_p_2) --include-dir $(srcdir) $(__DLLFLAG_p_2) --include-dir $(srcdir)/../../samples $(__RCDEFDIR_p_1) --include-dir $(top_srcdir)/include + + +# Include dependency info, if present: +@IF_GNU_MAKE@-include .deps/*.d + +.PHONY: all install uninstall clean distclean anitest_bundle catalog diff --git a/samples/animate/anitest.bkl b/samples/animate/anitest.bkl new file mode 100644 index 0000000000..27b4cc59c5 --- /dev/null +++ b/samples/animate/anitest.bkl @@ -0,0 +1,20 @@ + + + + + + + + anitest.cpp + + adv + core + base + ../sample.rc + + + + throbber.gif hourglass.ani + + + diff --git a/samples/animate/anitest.cpp b/samples/animate/anitest.cpp new file mode 100644 index 0000000000..a75e0f0c08 --- /dev/null +++ b/samples/animate/anitest.cpp @@ -0,0 +1,266 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: anitest.cpp +// Purpose: Animation sample +// Author: Julian Smart +// Modified by: Francesco Montorsi +// Created: 02/07/2001 +// RCS-ID: $Id$ +// Copyright: (c) Julian Smart +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +// =========================================================================== +// declarations +// =========================================================================== + +// --------------------------------------------------------------------------- +// headers +// --------------------------------------------------------------------------- + +// For compilers that support precompilation, includes "wx/wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + +#ifndef WX_PRECOMP + #include "wx/wx.h" +#endif + +#ifndef __WXMSW__ + #include "mondrian.xpm" +#endif + +#include "anitest.h" + +IMPLEMENT_APP(MyApp) + +// --------------------------------------------------------------------------- +// global variables +// --------------------------------------------------------------------------- + +// --------------------------------------------------------------------------- +// event tables +// --------------------------------------------------------------------------- + +enum +{ + wxID_PLAY +}; + +BEGIN_EVENT_TABLE(MyFrame, wxFrame) + EVT_MENU(wxID_PLAY, MyFrame::OnPlay) + EVT_MENU(wxID_STOP, MyFrame::OnStop) + EVT_MENU(wxID_ABOUT, MyFrame::OnAbout) + EVT_MENU(wxID_EXIT, MyFrame::OnQuit) +#if wxUSE_FILEDLG + EVT_MENU(wxID_OPEN, MyFrame::OnOpen) +#endif // wxUSE_FILEDLG + + EVT_SIZE(MyFrame::OnSize) + EVT_UPDATE_UI(wxID_ANY, MyFrame::OnUpdateUI) +END_EVENT_TABLE() + +// =========================================================================== +// implementation +// =========================================================================== + +// --------------------------------------------------------------------------- +// MyApp +// --------------------------------------------------------------------------- + +// Initialise this in OnInit, not statically +bool MyApp::OnInit() +{ + // Create the main frame window + + MyFrame* frame = new MyFrame((wxFrame *)NULL, -1, _T("Animation Demo"), + wxPoint(-1, -1), wxSize(500, 400), + wxDEFAULT_FRAME_STYLE); + + // Give it an icon +#ifdef __WXMSW__ + frame->SetIcon(wxIcon(_T("mdi_icn"))); +#else + frame->SetIcon(wxIcon( mondrian_xpm )); +#endif + + // Make a menubar + wxMenu *file_menu = new wxMenu; + +#if wxUSE_FILEDLG + file_menu->Append(wxID_OPEN, _T("&Open Animation...\tCtrl+O"), _T("Loads an animation")); +#endif // wxUSE_FILEDLG + file_menu->Append(wxID_EXIT); + + wxMenu *play_menu = new wxMenu; + play_menu->Append(wxID_PLAY, _T("Play\tCtrl+P"), _T("Play the animation")); + play_menu->Append(wxID_STOP, _T("Stop\tCtrl+P"), _T("Stop the animation")); + + wxMenu *help_menu = new wxMenu; + help_menu->Append(wxID_ABOUT); + + wxMenuBar *menu_bar = new wxMenuBar; + + menu_bar->Append(file_menu, _T("&File")); + menu_bar->Append(play_menu, _T("&Animation")); + menu_bar->Append(help_menu, _T("&Help")); + + // Associate the menu bar with the frame + frame->SetMenuBar(menu_bar); + +#if wxUSE_STATUSBAR + frame->CreateStatusBar(); +#endif // wxUSE_STATUSBAR + + frame->Show(true); + + SetTopWindow(frame); + + return true; +} + +// --------------------------------------------------------------------------- +// MyFrame +// --------------------------------------------------------------------------- + +#include "wx/wfstream.h" + +// Define my frame constructor +MyFrame::MyFrame(wxWindow *parent, + const wxWindowID id, + const wxString& title, + const wxPoint& pos, + const wxSize& size, + const long style) + : wxFrame(parent, id, title, pos, size, + style | wxNO_FULL_REPAINT_ON_RESIZE) +{ + //m_canvas = new MyCanvas(this, wxPoint(0, 0), wxDefaultSize); + + //wxSizer *sz = new wxBoxSizer(wxVERTICAL); + + m_animationCtrl = new wxAnimationCtrl(this, wxID_ANY, wxNullAnimation, + wxPoint(0,0),wxSize(100,100)); + if (m_animationCtrl->LoadFile(wxT("throbber.gif"))) + m_animationCtrl->Play(); + + //sz->Add(m_animationCtrl, 1, wxGROW); + + //SetSizer(sz); +} + +MyFrame::~MyFrame() +{ +} + +void MyFrame::OnPlay(wxCommandEvent& WXUNUSED(event)) +{ + if (!m_animationCtrl->Play()) + wxLogError(wxT("Invalid animation")); +} + +void MyFrame::OnStop(wxCommandEvent& WXUNUSED(event)) +{ + m_animationCtrl->Stop(); +} + +void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) +{ + Close(); +} + +void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) ) +{ + /* + + FIXME: on wxGTK at least using File->About command it shows + the message dialog but does not focus it + + */ + + (void)wxMessageBox(_T("wxWidgets 2 Animation Demo\n") + _T("Author: Julian Smart (c) 2001\n"), + _T("About Animation Demo")); +} + +#if wxUSE_FILEDLG +void MyFrame::OnOpen(wxCommandEvent& WXUNUSED(event)) +{ + wxFileDialog dialog(this, _T("Please choose an animation"), + wxEmptyString, wxEmptyString, wxT("*.gif;*.ani"), wxFD_OPEN); + if (dialog.ShowModal() == wxID_OK) + { + wxString filename(dialog.GetPath()); + + // enable one of the two chunk of codes to test different parts of wxAnimation/wxAnimationCtrl +#if 0 + if (m_animationCtrl->LoadFile(filename)) + m_animationCtrl->Play(); + else + wxMessageBox(_T("Sorry, this animation is not a valid format for wxAnimation.")); +#else + #if 0 + wxAnimation temp; + if (!temp.LoadFile(filename)) + { + wxLogError(wxT("Sorry, this animation is not a valid format for wxAnimation.")); + return; + } + + m_animationCtrl->SetAnimation(temp); + m_animationCtrl->Play(); + #else + wxFileInputStream stream(filename); + if (!stream.Ok()) + { + wxLogError(wxT("Sorry, this animation is not a valid format for wxAnimation.")); + return; + } + + wxAnimation temp; + if (!temp.Load(stream)) + { + wxLogError(wxT("Sorry, this animation is not a valid format for wxAnimation.")); + return; + } + + m_animationCtrl->SetAnimation(temp); + m_animationCtrl->Play(); + #endif +#endif + } +} +#endif // wxUSE_FILEDLG + +void MyFrame::OnUpdateUI(wxUpdateUIEvent& WXUNUSED(event) ) +{ + GetMenuBar()->FindItem(wxID_STOP)->Enable(m_animationCtrl->IsPlaying()); + GetMenuBar()->FindItem(wxID_PLAY)->Enable(!m_animationCtrl->IsPlaying()); +} + +// --------------------------------------------------------------------------- +// MyCanvas +// --------------------------------------------------------------------------- + +BEGIN_EVENT_TABLE(MyCanvas, wxScrolledWindow) + //EVT_PAINT(MyCanvas::OnPaint) +END_EVENT_TABLE() + +// Define a constructor for my canvas +MyCanvas::MyCanvas(wxWindow *parent, const wxPoint& pos, const wxSize& size) + : wxScrolledWindow(parent, -1, pos, size, + wxSUNKEN_BORDER | + wxNO_FULL_REPAINT_ON_RESIZE | + wxVSCROLL | wxHSCROLL) +{ + SetBackgroundColour(wxColour(_T("YELLOW"))); +} + +void MyCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) +{ + //wxPaintDC dc(this); + + //dc.DrawRotatedText(wxT("Background"), +} diff --git a/samples/animate/anitest.h b/samples/animate/anitest.h new file mode 100644 index 0000000000..2a265afa4d --- /dev/null +++ b/samples/animate/anitest.h @@ -0,0 +1,61 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: anitest.cpp +// Purpose: anitest sample +// Author: Julian Smart +// Modified by: +// Created: 02/07/2001 +// RCS-ID: $Id$ +// Copyright: (c) Julian Smart +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#include "wx/animate.h" + +// Define a new application +class MyApp : public wxApp +{ +public: + bool OnInit(); +}; + +class MyCanvas : public wxScrolledWindow +{ +public: + MyCanvas(wxWindow *parent, const wxPoint& pos, const wxSize& size); + void OnPaint(wxPaintEvent& event); + +private: + DECLARE_EVENT_TABLE() +}; + +// Define a new frame +class MyFrame : public wxFrame +{ +public: + + MyFrame(wxWindow *parent, const wxWindowID id, const wxString& title, + const wxPoint& pos, const wxSize& size, const long style); + ~MyFrame(); + + void OnAbout(wxCommandEvent& event); + void OnQuit(wxCommandEvent& event); + + void OnPlay(wxCommandEvent& event); + void OnStop(wxCommandEvent& event); + + void OnUpdateUI(wxUpdateUIEvent& event); + +#if wxUSE_FILEDLG + void OnOpen(wxCommandEvent& event); +#endif // wxUSE_FILEDLG + + MyCanvas* GetCanvas() const { return m_canvas; } + wxAnimationCtrl* GetAnimationCtrl() const { return m_animationCtrl; } + +protected: + MyCanvas* m_canvas; + wxAnimationCtrl* m_animationCtrl; + +private: + DECLARE_EVENT_TABLE() +}; diff --git a/samples/animate/anitest.rc b/samples/animate/anitest.rc new file mode 100644 index 0000000000..7655c62a4c --- /dev/null +++ b/samples/animate/anitest.rc @@ -0,0 +1,3 @@ +mondrian ICON "mondrian.ico" +#include "wx/msw/wx.rc" + diff --git a/samples/animate/hourglass.ani b/samples/animate/hourglass.ani new file mode 100644 index 0000000000000000000000000000000000000000..68d1a3125c7b4d227f467d374368dfc2a66b4a72 GIT binary patch literal 45182 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�&ERxc#0vb5 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 literal 0 HcmV?d00001 diff --git a/samples/animate/mondrian.ico b/samples/animate/mondrian.ico new file mode 100644 index 0000000000000000000000000000000000000000..2310c5d275a87af295d5ea8dc79ea417a5e74c53 GIT binary patch literal 766 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 Nt(EtWmIPqi{{az}4IBUf literal 0 HcmV?d00001 diff --git a/samples/samples.bkl b/samples/samples.bkl index 932d95063f..5cfa6bad12 100644 --- a/samples/samples.bkl +++ b/samples/samples.bkl @@ -10,6 +10,7 @@ + diff --git a/setup.h.in b/setup.h.in index 1e968bbc70..60df19067f 100644 --- a/setup.h.in +++ b/setup.h.in @@ -305,6 +305,7 @@ #define wxUSE_TIPWINDOW 0 +#define wxUSE_ANIMATIONCTRL 0 #define wxUSE_BUTTON 0 #define wxUSE_BMPBUTTON 0 #define wxUSE_CALENDARCTRL 0 diff --git a/src/common/anidecod.cpp b/src/common/anidecod.cpp new file mode 100644 index 0000000000..61cfb664d5 --- /dev/null +++ b/src/common/anidecod.cpp @@ -0,0 +1,314 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: src/common/anidecod.cpp +// Purpose: wxANIDecoder, ANI reader for wxImage and wxAnimation +// Author: Francesco Montorsi +// RCS-ID: $Id$ +// Copyright: (c) Francesco Montorsi +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + +#if wxUSE_STREAMS && wxUSE_GIF + +#ifndef WX_PRECOMP + #include "wx/palette.h" +#endif + +#include +#include +#include "wx/anidecod.h" + +// static +wxCURHandler wxANIDecoder::sm_handler; + + + +//--------------------------------------------------------------------------- +// wxANIFrameInfo +//--------------------------------------------------------------------------- + +class wxANIFrameInfo +{ +public: + wxANIFrameInfo(size_t delay = 0, int idx = -1) + { m_delay=delay; m_imageIndex=idx; } + + size_t m_delay; + int m_imageIndex; +}; + +#include // this is a magic incantation which must be done! +WX_DEFINE_OBJARRAY(wxImageArray); + +#include // this is a magic incantation which must be done! +WX_DEFINE_OBJARRAY(wxANIFrameInfoArray); + + + + +//--------------------------------------------------------------------------- +// wxANIDecoder +//--------------------------------------------------------------------------- + +wxANIDecoder::wxANIDecoder() +{ +} + +wxANIDecoder::~wxANIDecoder() +{ +} + +bool wxANIDecoder::ConvertToImage(size_t frame, wxImage *image) const +{ + size_t idx = m_info[frame].m_imageIndex; + *image = m_images[idx]; // copy + return image->Ok(); +} + + +//--------------------------------------------------------------------------- +// Data accessors +//--------------------------------------------------------------------------- + +wxSize wxANIDecoder::GetFrameSize(size_t WXUNUSED(frame)) const +{ + // all frames are of the same size... + return m_szAnimation; +} + +wxPoint wxANIDecoder::GetFramePosition(size_t WXUNUSED(frame)) const +{ + // all frames are of the same size... + return wxPoint(0,0); +} + +wxAnimationDisposal wxANIDecoder::GetDisposalMethod(size_t WXUNUSED(frame)) const +{ + // this disposal is implicit for all frames inside an ANI file + return wxANIM_TOBACKGROUND; +} + +long wxANIDecoder::GetDelay(size_t frame) const +{ + return m_info[frame].m_delay; +} + + +//--------------------------------------------------------------------------- +// ANI reading and decoding +//--------------------------------------------------------------------------- + +bool wxANIDecoder::CanRead(wxInputStream& stream) const +{ + wxInt32 FCC1, FCC2; + wxUint32 datalen ; + + wxInt32 riff32; + memcpy( &riff32, "RIFF", 4 ); + wxInt32 list32; + memcpy( &list32, "LIST", 4 ); + wxInt32 ico32; + memcpy( &ico32, "icon", 4 ); + wxInt32 anih32; + memcpy( &anih32, "anih", 4 ); + + stream.SeekI(0); + if ( !stream.Read(&FCC1, 4) ) + return false; + + if ( FCC1 != riff32 ) + return false; + + // we have a riff file: + while ( stream.IsOk() ) + { + if ( FCC1 == anih32 ) + return true; // found the ANIH chunk - this should be an ANI file + + // we always have a data size: + stream.Read(&datalen, 4); + datalen = wxINT32_SWAP_ON_BE(datalen) ; + + // data should be padded to make even number of bytes + if (datalen % 2 == 1) datalen ++ ; + + // now either data or a FCC: + if ( (FCC1 == riff32) || (FCC1 == list32) ) + { + stream.Read(&FCC2, 4); + } + else + { + stream.SeekI(stream.TellI() + datalen); + } + + // try to read next data chunk: + if ( !stream.Read(&FCC1, 4) ) + { + // reading failed -- either EOF or IO error, bail out anyhow + return false; + } + } + + return false; +} + +// the "anih" RIFF chunk +struct wxANIHeader +{ + wxInt32 cbSizeOf; // Num bytes in AniHeader (36 bytes) + wxInt32 cFrames; // Number of unique Icons in this cursor + wxInt32 cSteps; // Number of Blits before the animation cycles + wxInt32 cx; // width of the frames + wxInt32 cy; // height of the frames + wxInt32 cBitCount; // bit depth + wxInt32 cPlanes; // 1 + wxInt32 JifRate; // Default Jiffies (1/60th of a second) if rate chunk not present. + wxInt32 flags; // Animation Flag (see AF_ constants) +}; + +bool wxANIDecoder::Load( wxInputStream& stream ) +{ + wxInt32 FCC1, FCC2; + wxUint32 datalen; + size_t globaldelay=0; + + wxInt32 riff32; + memcpy( &riff32, "RIFF", 4 ); + wxInt32 list32; + memcpy( &list32, "LIST", 4 ); + wxInt32 ico32; + memcpy( &ico32, "icon", 4 ); + wxInt32 anih32; + memcpy( &anih32, "anih", 4 ); + wxInt32 rate32; + memcpy( &rate32, "rate", 4 ); + wxInt32 seq32; + memcpy( &seq32, "seq ", 4 ); + + stream.SeekI(0); + stream.Read(&FCC1, 4); + if ( FCC1 != riff32 ) + return false; + + m_nFrames = 0; + m_szAnimation = wxDefaultSize; + + m_images.Clear(); + m_info.Clear(); + + // we have a riff file: + while ( stream.IsOk() ) + { + // we always have a data size: + stream.Read(&datalen, 4); + datalen = wxINT32_SWAP_ON_BE(datalen); + + //data should be padded to make even number of bytes + if (datalen % 2 == 1) datalen++; + + // now either data or a FCC: + if ( (FCC1 == riff32) || (FCC1 == list32) ) + { + stream.Read(&FCC2, 4); + } + else if ( FCC1 == anih32 ) + { + if ( datalen != sizeof(wxANIHeader) ) + return false; + + if (m_nFrames > 0) + return false; // already parsed an ani header? + + struct wxANIHeader header; + stream.Read(&header, sizeof(wxANIHeader)); + + // we should have a global frame size + m_szAnimation = wxSize(header.cx, header.cy); + + // save interesting info from the header + m_nFrames = header.cSteps; // NB: not cFrames!! + if (m_nFrames==0) + return false; + + globaldelay = wxINT32_SWAP_ON_BE(header.JifRate) * 1000 / 60; + + m_images.Alloc(header.cFrames); + m_info.Add(wxANIFrameInfo(), m_nFrames); + } + else if ( FCC1 == rate32 ) + { + // did we already process the anih32 chunk? + if (m_nFrames == 0) + return false; // rate chunks should always be placed after anih chunk + + wxASSERT(m_info.GetCount() == m_nFrames); + for (size_t i=0; inext; - free(pimg->p); - free(pimg->pal); - delete pimg; - pimg = paux; + GIFImage *f = (GIFImage*)m_frames[i]; + free(f->p); + free(f->pal); + delete f; } - m_pimage = NULL; - m_pfirst = NULL; - m_plast = NULL; - m_image = 0; - m_nimages = 0; + m_frames.Clear(); + m_nFrames = 0; } @@ -99,7 +106,7 @@ void wxGIFDecoder::Destroy() // This function was designed by Vaclav Slavik -bool wxGIFDecoder::ConvertToImage(wxImage *image) const +bool wxGIFDecoder::ConvertToImage(size_t frame, wxImage *image) const { unsigned char *src, *dst, *pal; unsigned long i; @@ -109,20 +116,21 @@ bool wxGIFDecoder::ConvertToImage(wxImage *image) const image->Destroy(); /* create the image */ - image->Create(GetWidth(), GetHeight()); + wxSize sz = GetFrameSize(frame); + image->Create(sz.GetWidth(), sz.GetHeight()); if (!image->Ok()) return false; - pal = GetPalette(); - src = GetData(); + pal = GetPalette(frame); + src = GetData(frame); dst = image->GetData(); - transparent = GetTransparentColour(); + transparent = GetTransparentColour(frame); /* set transparent colour mask */ if (transparent != -1) { - for (i = 0; i < GetNcolours(); i++) + for (i = 0; i < GetNcolours(frame); i++) { if ((pal[3 * i + 0] == 255) && (pal[3 * i + 1] == 0) && @@ -153,11 +161,12 @@ bool wxGIFDecoder::ConvertToImage(wxImage *image) const b[i] = pal[3*i + 2]; } - image->SetPalette(wxPalette(GetNcolours(), r, g, b)); + image->SetPalette(wxPalette(GetNcolours(frame), r, g, b)); #endif // wxUSE_PALETTE /* copy image data */ - for (i = 0; i < (GetWidth() * GetHeight()); i++, src++) + unsigned long npixel = sz.GetWidth() * sz.GetHeight(); + for (i = 0; i < npixel; i++, src++) { *(dst++) = pal[3 * (*src) + 0]; *(dst++) = pal[3 * (*src) + 1]; @@ -172,118 +181,36 @@ bool wxGIFDecoder::ConvertToImage(wxImage *image) const // Data accessors //--------------------------------------------------------------------------- -// Get data for current frame - -int wxGIFDecoder::GetFrameIndex() const { return m_image; } -unsigned char* wxGIFDecoder::GetData() const { return (m_pimage->p); } -unsigned char* wxGIFDecoder::GetPalette() const { return (m_pimage->pal); } -unsigned int wxGIFDecoder::GetNcolours() const { return (m_pimage->ncolours); } -unsigned int wxGIFDecoder::GetWidth() const { return (m_pimage->w); } -unsigned int wxGIFDecoder::GetHeight() const { return (m_pimage->h); } -unsigned int wxGIFDecoder::GetTop() const { return (m_pimage->top); } -unsigned int wxGIFDecoder::GetLeft() const { return (m_pimage->left); } -int wxGIFDecoder::GetTransparentColour() const { return (m_pimage->transparent); } -int wxGIFDecoder::GetDisposalMethod() const { return (m_pimage->disposal); } -long wxGIFDecoder::GetDelay() const { return (m_pimage->delay); } - -// Get global data - -unsigned int wxGIFDecoder::GetLogicalScreenWidth() const { return m_screenw; } -unsigned int wxGIFDecoder::GetLogicalScreenHeight() const { return m_screenh; } -int wxGIFDecoder::GetBackgroundColour() const { return m_background; } -int wxGIFDecoder::GetNumberOfFrames() const { return m_nimages; } -bool wxGIFDecoder::IsAnimation() const { return (m_nimages > 1); } +#define GetFrame(n) ((GIFImage*)m_frames[n]) -//--------------------------------------------------------------------------- -// Functions to move through the animation -//--------------------------------------------------------------------------- +// Get data for current frame -bool wxGIFDecoder::GoFirstFrame() +wxSize wxGIFDecoder::GetFrameSize(size_t frame) const { - if (!IsAnimation()) - return false; - - m_image = 1; - m_pimage = m_pfirst; - return true; + return wxSize(GetFrame(frame)->w, GetFrame(frame)->h); } -bool wxGIFDecoder::GoLastFrame() +wxPoint wxGIFDecoder::GetFramePosition(size_t frame) const { - if (!IsAnimation()) - return false; - - m_image = m_nimages; - m_pimage = m_plast; - return true; + return wxPoint(GetFrame(frame)->left, GetFrame(frame)->top); } -bool wxGIFDecoder::GoNextFrame(bool cyclic) +wxAnimationDisposal wxGIFDecoder::GetDisposalMethod(size_t frame) const { - if (!IsAnimation()) - return false; - - if ((m_image < m_nimages) || (cyclic)) - { - m_pimage = m_pimage->next; - m_image++; - - if (!m_pimage) - { - m_image = 1; - m_pimage = m_pfirst; - } - - return true; - } - else - return false; + return GetFrame(frame)->disposal; } -bool wxGIFDecoder::GoPrevFrame(bool cyclic) +long wxGIFDecoder::GetDelay(size_t frame) const { - if (!IsAnimation()) - return false; - - if ((m_image > 1) || (cyclic)) - { - m_pimage = m_pimage->prev; - m_image--; - - if (!m_pimage) - { - m_image = m_nimages; - m_pimage = m_plast; - } - - return true; - } - else - return false; + return GetFrame(frame)->delay; } -bool wxGIFDecoder::GoFrame(int which) -{ - if (!IsAnimation()) - return false; +unsigned char* wxGIFDecoder::GetData(size_t frame) const { return (GetFrame(frame)->p); } +unsigned char* wxGIFDecoder::GetPalette(size_t frame) const { return (GetFrame(frame)->pal); } +unsigned int wxGIFDecoder::GetNcolours(size_t frame) const { return (GetFrame(frame)->ncolours); } +int wxGIFDecoder::GetTransparentColour(size_t frame) const { return (GetFrame(frame)->transparent); } - if ((which >= 1) && (which <= m_nimages)) - { - m_image = 1; - m_pimage = m_pfirst; - - while (m_image < which) - { - m_image++; - m_pimage = m_pimage->next; - } - - return true; - } - else - return false; -} //--------------------------------------------------------------------------- @@ -293,12 +220,11 @@ bool wxGIFDecoder::GoFrame(int which) // getcode: // Reads the next code from the file stream, with size 'bits' // -int wxGIFDecoder::getcode(int bits, int ab_fin) +int wxGIFDecoder::getcode(wxInputStream& stream, int bits, int ab_fin) { unsigned int mask; /* bit mask */ unsigned int code; /* code (result) */ - /* get remaining bits from last byte read */ mask = (1 << bits) - 1; code = (m_lastbyte >> (8 - m_restbits)) & mask; @@ -309,7 +235,7 @@ int wxGIFDecoder::getcode(int bits, int ab_fin) /* if no bytes left in this block, read the next block */ if (m_restbyte == 0) { - m_restbyte = (unsigned char)m_f->GetC(); + m_restbyte = (unsigned char)stream.GetC(); /* Some encoders are a bit broken: instead of issuing * an end-of-image symbol (ab_fin) they come up with @@ -323,8 +249,8 @@ int wxGIFDecoder::getcode(int bits, int ab_fin) } /* prefetch data */ - m_f->Read((void *) m_buffer, m_restbyte); - if (m_f->LastRead() != m_restbyte) + stream.Read((void *) m_buffer, m_restbyte); + if (stream.LastRead() != m_restbyte) { code = ab_fin; return code; @@ -354,7 +280,7 @@ int wxGIFDecoder::getcode(int bits, int ab_fin) // is 'bits'. Supports interlaced images (interl == 1). // Returns wxGIF_OK (== 0) on success, or an error code if something // fails (see header file for details) -int wxGIFDecoder::dgif(GIFImage *img, int interl, int bits) +wxGIFErrorCode wxGIFDecoder::dgif(wxInputStream& stream, GIFImage *img, int interl, int bits) { static const int allocSize = 4096 + 1; int *ab_prefix = new int[allocSize]; /* alphabet (prefixes) */ @@ -410,7 +336,7 @@ int wxGIFDecoder::dgif(GIFImage *img, int interl, int bits) do { /* get next code */ - readcode = code = getcode(ab_bits, ab_fin); + readcode = code = getcode(stream, ab_bits, ab_fin); /* end of image? */ if (code == ab_fin) break; @@ -629,20 +555,20 @@ as an End of Information itself) // CanRead: // Returns true if the file looks like a valid GIF, false otherwise. // -bool wxGIFDecoder::CanRead() +bool wxGIFDecoder::CanRead(wxInputStream &stream) const { unsigned char buf[3]; - if ( !m_f->Read(buf, WXSIZEOF(buf)) ) + if ( !stream.Read(buf, WXSIZEOF(buf)) ) return false; - m_f->SeekI(-(wxFileOffset)WXSIZEOF(buf), wxFromCurrent); + stream.SeekI(-(wxFileOffset)WXSIZEOF(buf), wxFromCurrent); return memcmp(buf, "GIF", WXSIZEOF(buf)) == 0; } -// ReadGIF: +// LoadGIF: // Reads and decodes one or more GIF images, depending on whether // animated GIF support is enabled. Can read GIFs with any bit // size (color depth), but the output images are always expanded @@ -651,48 +577,48 @@ bool wxGIFDecoder::CanRead() // (== 0) on success, or an error code if something fails (see // header file for details) // -int wxGIFDecoder::ReadGIF() +wxGIFErrorCode wxGIFDecoder::LoadGIF(wxInputStream& stream) { unsigned int global_ncolors = 0; - int bits, interl, transparent, disposal, i; + int bits, interl, transparent, i; + wxAnimationDisposal disposal; long size; long delay; unsigned char type = 0; unsigned char pal[768]; unsigned char buf[16]; - GIFImage **ppimg; - GIFImage *pimg, *pprev; + bool anim = true; /* check GIF signature */ - if (!CanRead()) + if (!CanRead(stream)) return wxGIF_INVFORMAT; /* check for animated GIF support (ver. >= 89a) */ static const size_t headerSize = (3 + 3); - m_f->Read(buf, headerSize); - if (m_f->LastRead() != headerSize) + stream.Read(buf, headerSize); + if (stream.LastRead() != headerSize) { return wxGIF_INVFORMAT; } if (memcmp(buf + 3, "89a", 3) < 0) { - m_anim = false; + anim = false; } /* read logical screen descriptor block (LSDB) */ static const size_t lsdbSize = (2 + 2 + 1 + 1 + 1); - m_f->Read(buf, lsdbSize); - if (m_f->LastRead() != lsdbSize) + stream.Read(buf, lsdbSize); + if (stream.LastRead() != lsdbSize) { return wxGIF_INVFORMAT; } - m_screenw = buf[0] + 256 * buf[1]; - m_screenh = buf[2] + 256 * buf[3]; + m_szAnimation.SetWidth( buf[0] + 256 * buf[1] ); + m_szAnimation.SetHeight( buf[2] + 256 * buf[3] ); - if ((m_screenw == 0) || (m_screenh == 0)) + if ((m_szAnimation.GetWidth() == 0) || (m_szAnimation.GetHeight() == 0)) { return wxGIF_INVFORMAT; } @@ -700,32 +626,30 @@ int wxGIFDecoder::ReadGIF() /* load global color map if available */ if ((buf[4] & 0x80) == 0x80) { - m_background = buf[5]; + int backgroundColIndex = buf[5]; global_ncolors = 2 << (buf[4] & 0x07); size_t numBytes = 3 * global_ncolors; - m_f->Read(pal, numBytes); - if (m_f->LastRead() != numBytes) + stream.Read(pal, numBytes); + if (stream.LastRead() != numBytes) { return wxGIF_INVFORMAT; } + + m_background.Set(pal[backgroundColIndex*3 + 0], + pal[backgroundColIndex*3 + 1], + pal[backgroundColIndex*3 + 2]); } /* transparent colour, disposal method and delay default to unused */ transparent = -1; - disposal = -1; + disposal = wxANIM_UNSPECIFIED; delay = -1; - /* read images */ - ppimg = &m_pfirst; - pprev = NULL; - pimg = NULL; - bool done = false; - while (!done) { - type = (unsigned char)m_f->GetC(); + type = (unsigned char)stream.GetC(); /* If the end of file has been reached (or an error) and a ";" @@ -735,7 +659,7 @@ int wxGIFDecoder::ReadGIF() be decoded as far as possible). returning wxGIF_TRUNCATED is not possible here since some init code is done after this loop. */ - if (m_f->Eof())// || !m_f->IsOk()) + if (stream.Eof())// || !stream.IsOk()) { /* type is set to some bogus value, so there's no @@ -753,12 +677,12 @@ int wxGIFDecoder::ReadGIF() /* extension block? */ if (type == 0x21) { - if (((unsigned char)m_f->GetC()) == 0xF9) + if (((unsigned char)stream.GetC()) == 0xF9) /* graphics control extension, parse it */ { static const size_t gceSize = 6; - m_f->Read(buf, gceSize); - if (m_f->LastRead() != gceSize) + stream.Read(buf, gceSize); + if (stream.LastRead() != gceSize) { Destroy(); return wxGIF_INVFORMAT; @@ -772,15 +696,15 @@ int wxGIFDecoder::ReadGIF() transparent = buf[4]; /* read disposal method */ - disposal = ((buf[1] & 0x1C) >> 2) - 1; + disposal = (wxAnimationDisposal)(((buf[1] & 0x1C) >> 2) - 1); } else /* other extension, skip */ { - while ((i = (unsigned char)m_f->GetC()) != 0) + while ((i = (unsigned char)stream.GetC()) != 0) { - m_f->SeekI(i, wxFromCurrent); - if (m_f->Eof()) + stream.SeekI(i, wxFromCurrent); + if (stream.Eof()) { done = true; break; @@ -793,7 +717,7 @@ int wxGIFDecoder::ReadGIF() if (type == 0x2C) { /* allocate memory for IMAGEN struct */ - pimg = (*ppimg) = new GIFImage(); + GIFImage *pimg = new GIFImage(); if (pimg == NULL) { @@ -803,8 +727,8 @@ int wxGIFDecoder::ReadGIF() /* fill in the data */ static const size_t idbSize = (2 + 2 + 2 + 2 + 1); - m_f->Read(buf, idbSize); - if (m_f->LastRead() != idbSize) + stream.Read(buf, idbSize); + if (stream.LastRead() != idbSize) { Destroy(); return wxGIF_INVFORMAT; @@ -819,7 +743,8 @@ int wxGIFDecoder::ReadGIF() pimg->w = buf[4] + 256 * buf[5]; pimg->h = buf[6] + 256 * buf[7]; - if ((pimg->w == 0) || (pimg->w > m_screenw) || (pimg->h == 0) || (pimg->h > m_screenh)) + if ((pimg->w == 0) || (pimg->w > (unsigned int)m_szAnimation.GetWidth()) || + (pimg->h == 0) || (pimg->h > (unsigned int)m_szAnimation.GetHeight())) { Destroy(); return wxGIF_INVFORMAT; @@ -831,10 +756,6 @@ int wxGIFDecoder::ReadGIF() pimg->transparent = transparent; pimg->disposal = disposal; pimg->delay = delay; - pimg->next = NULL; - pimg->prev = pprev; - pprev = pimg; - ppimg = &pimg->next; /* allocate memory for image and palette */ pimg->p = (unsigned char *) malloc((size_t)size); @@ -851,9 +772,9 @@ int wxGIFDecoder::ReadGIF() { unsigned int local_ncolors = 2 << (buf[8] & 0x07); size_t numBytes = 3 * local_ncolors; - m_f->Read(pimg->pal, numBytes); + stream.Read(pimg->pal, numBytes); pimg->ncolours = local_ncolors; - if (m_f->LastRead() != numBytes) + if (stream.LastRead() != numBytes) { Destroy(); return wxGIF_INVFORMAT; @@ -866,7 +787,7 @@ int wxGIFDecoder::ReadGIF() } /* get initial code size from first byte in raster data */ - bits = (unsigned char)m_f->GetC(); + bits = (unsigned char)stream.GetC(); if (bits == 0) { Destroy(); @@ -874,56 +795,54 @@ int wxGIFDecoder::ReadGIF() } /* decode image */ - int result = dgif(pimg, interl, bits); + wxGIFErrorCode result = dgif(stream, pimg, interl, bits); if (result != wxGIF_OK) { Destroy(); return result; } - m_nimages++; + + /* add the image to our frame array */ + m_frames.Add((void*)pimg); + m_nFrames++; /* if this is not an animated GIF, exit after first image */ - if (!m_anim) + if (!anim) done = true; } } - if (m_nimages <= 0) + if (m_nFrames <= 0) { Destroy(); return wxGIF_INVFORMAT; } - /* setup image pointers */ - m_image = 1; - m_plast = pimg; - m_pimage = m_pfirst; - /* try to read to the end of the stream */ while (type != 0x3B) { - if (!m_f->IsOk()) + if (!stream.IsOk()) return wxGIF_TRUNCATED; - type = (unsigned char)m_f->GetC(); + type = (unsigned char)stream.GetC(); if (type == 0x21) { /* extension type */ - (void) m_f->GetC(); + (void) stream.GetC(); /* skip all data */ - while ((i = (unsigned char)m_f->GetC()) != 0) + while ((i = (unsigned char)stream.GetC()) != 0) { - m_f->SeekI(i, wxFromCurrent); + stream.SeekI(i, wxFromCurrent); } } else if (type == 0x2C) { /* image descriptor block */ static const size_t idbSize = (2 + 2 + 2 + 2 + 1); - m_f->Read(buf, idbSize); - if (m_f->LastRead() != idbSize) + stream.Read(buf, idbSize); + if (stream.LastRead() != idbSize) { Destroy(); return wxGIF_INVFORMAT; @@ -933,10 +852,10 @@ int wxGIFDecoder::ReadGIF() if ((buf[8] & 0x80) == 0x80) { unsigned int local_ncolors = 2 << (buf[8] & 0x07); - wxFileOffset pos = m_f->TellI(); + wxFileOffset pos = stream.TellI(); wxFileOffset numBytes = 3 * local_ncolors; - m_f->SeekI(numBytes, wxFromCurrent); - if (m_f->TellI() != (pos + numBytes)) + stream.SeekI(numBytes, wxFromCurrent); + if (stream.TellI() != (pos + numBytes)) { Destroy(); return wxGIF_INVFORMAT; @@ -944,12 +863,12 @@ int wxGIFDecoder::ReadGIF() } /* initial code size */ - (void) m_f->GetC(); + (void) stream.GetC(); /* skip all data */ - while ((i = (unsigned char)m_f->GetC()) != 0) + while ((i = (unsigned char)stream.GetC()) != 0) { - m_f->SeekI(i, wxFromCurrent); + stream.SeekI(i, wxFromCurrent); } } else if ((type != 0x3B) && (type != 00)) /* testing */ diff --git a/src/common/imagbmp.cpp b/src/common/imagbmp.cpp index c2e8e6599f..5f45ba9207 100644 --- a/src/common/imagbmp.cpp +++ b/src/common/imagbmp.cpp @@ -32,6 +32,7 @@ #include "wx/filefn.h" #include "wx/wfstream.h" #include "wx/quantize.h" +#include "wx/anidecod.h" // For memcpy #include @@ -1324,160 +1325,28 @@ IMPLEMENT_DYNAMIC_CLASS(wxANIHandler, wxCURHandler) #if wxUSE_STREAMS bool wxANIHandler::LoadFile(wxImage *image, wxInputStream& stream, - bool verbose, int index) + bool WXUNUSED(verbose), int index) { - wxInt32 FCC1, FCC2; - wxUint32 datalen; - - wxInt32 riff32; - memcpy( &riff32, "RIFF", 4 ); - wxInt32 list32; - memcpy( &list32, "LIST", 4 ); - wxInt32 ico32; - memcpy( &ico32, "icon", 4 ); - int iIcon = 0; - - stream.SeekI(0); - stream.Read(&FCC1, 4); - if ( FCC1 != riff32 ) + wxANIDecoder decoder; + if (!decoder.Load(stream)) return false; - // we have a riff file: - while (stream.IsOk()) - { - // we always have a data size - stream.Read(&datalen, 4); - datalen = wxINT32_SWAP_ON_BE(datalen) ; - //data should be padded to make even number of bytes - if (datalen % 2 == 1) datalen ++ ; - //now either data or a FCC - if ( (FCC1 == riff32) || (FCC1 == list32) ) - { - stream.Read(&FCC2, 4); - } - else - { - if (FCC1 == ico32 && iIcon >= index) - { - return DoLoadFile(image, stream, verbose, -1); - } - else - { - stream.SeekI(stream.TellI() + datalen); - if ( FCC1 == ico32 ) - iIcon ++; - } - } - - // try to read next data chunk: - stream.Read(&FCC1, 4); - } - return false; + return decoder.ConvertToImage(index != -1 ? (size_t)index : 0, image); } bool wxANIHandler::DoCanRead(wxInputStream& stream) { - wxInt32 FCC1, FCC2; - wxUint32 datalen ; - - wxInt32 riff32; - memcpy( &riff32, "RIFF", 4 ); - wxInt32 list32; - memcpy( &list32, "LIST", 4 ); - wxInt32 ico32; - memcpy( &ico32, "icon", 4 ); - wxInt32 anih32; - memcpy( &anih32, "anih", 4 ); - - stream.SeekI(0); - if ( !stream.Read(&FCC1, 4) ) - return false; - - if ( FCC1 != riff32 ) - return false; - - // we have a riff file: - while ( stream.IsOk() ) - { - if ( FCC1 == anih32 ) - return true; - // we always have a data size: - stream.Read(&datalen, 4); - datalen = wxINT32_SWAP_ON_BE(datalen) ; - //data should be padded to make even number of bytes - if (datalen % 2 == 1) datalen ++ ; - // now either data or a FCC: - if ( (FCC1 == riff32) || (FCC1 == list32) ) - { - stream.Read(&FCC2, 4); - } - else - { - stream.SeekI(stream.TellI() + datalen); - } - - // try to read next data chunk: - if ( !stream.Read(&FCC1, 4) ) - { - // reading failed -- either EOF or IO error, bail out anyhow - return false; - } - } - - return false; + wxANIDecoder decod; + return decod.CanRead(stream); } int wxANIHandler::GetImageCount(wxInputStream& stream) { - wxInt32 FCC1, FCC2; - wxUint32 datalen ; - - wxInt32 riff32; - memcpy( &riff32, "RIFF", 4 ); - wxInt32 list32; - memcpy( &list32, "LIST", 4 ); - wxInt32 ico32; - memcpy( &ico32, "icon", 4 ); - wxInt32 anih32; - memcpy( &anih32, "anih", 4 ); - - stream.SeekI(0); - stream.Read(&FCC1, 4); - if ( FCC1 != riff32 ) + wxANIDecoder decoder; + if (!decoder.Load(stream)) return wxNOT_FOUND; - // we have a riff file: - while ( stream.IsOk() ) - { - // we always have a data size: - stream.Read(&datalen, 4); - datalen = wxINT32_SWAP_ON_BE(datalen) ; - //data should be padded to make even number of bytes - if (datalen % 2 == 1) datalen ++ ; - // now either data or a FCC: - if ( (FCC1 == riff32) || (FCC1 == list32) ) - { - stream.Read(&FCC2, 4); - } - else - { - if ( FCC1 == anih32 ) - { - wxUint32 *pData = new wxUint32[datalen/4]; - stream.Read(pData, datalen); - int nIcons = wxINT32_SWAP_ON_BE(*(pData + 1)); - delete[] pData; - return nIcons; - } - else - stream.SeekI(stream.TellI() + datalen); - } - - // try to read next data chunk: - stream.Read(&FCC1, 4); - } - - return wxNOT_FOUND; + return decoder.GetFrameCount(); } #endif // wxUSE_STREAMS diff --git a/src/common/imaggif.cpp b/src/common/imaggif.cpp index 69a0fbb094..22a8dc04cc 100644 --- a/src/common/imaggif.cpp +++ b/src/common/imaggif.cpp @@ -37,12 +37,12 @@ bool wxGIFHandler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose, int index) { wxGIFDecoder *decod; - int error; + wxGIFErrorCode error; bool ok = true; // image->Destroy(); - decod = new wxGIFDecoder(&stream, true); - error = decod->ReadGIF(); + decod = new wxGIFDecoder(); + error = decod->LoadGIF(stream); if ((error != wxGIF_OK) && (error != wxGIF_TRUNCATED)) { @@ -71,24 +71,9 @@ bool wxGIFHandler::LoadFile(wxImage *image, wxInputStream& stream, /* go on; image data is OK */ } - if (index != -1) - { - // We're already on index = 0 by default. So no need - // to call GoFrame(0) then. On top of that GoFrame doesn't - // accept an index of 0. (Instead GoFirstFrame() should be used) - // Also if the gif image has only one frame, calling GoFrame(0) - // fails because GoFrame() only works with gif animations. - // (It fails if IsAnimation() returns false) - // All valid reasons to NOT call GoFrame when index equals 0. - if (index != 0) - { - ok = decod->GoFrame(index); - } - } - if (ok) { - ok = decod->ConvertToImage(image); + ok = decod->ConvertToImage(index != -1 ? (size_t)index : 0, image); } else { @@ -111,8 +96,8 @@ bool wxGIFHandler::SaveFile( wxImage * WXUNUSED(image), bool wxGIFHandler::DoCanRead( wxInputStream& stream ) { - wxGIFDecoder decod(&stream); - return decod.CanRead(); + wxGIFDecoder decod; + return decod.CanRead(stream); } #endif // wxUSE_STREAMS diff --git a/src/generic/animateg.cpp b/src/generic/animateg.cpp new file mode 100644 index 0000000000..2ab49659dd --- /dev/null +++ b/src/generic/animateg.cpp @@ -0,0 +1,549 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: animateg.cpp +// Purpose: wxAnimation and wxAnimationCtrl +// Author: Julian Smart and Guillermo Rodriguez Garcia +// Modified by: Francesco Montorsi +// Created: 13/8/99 +// RCS-ID: $Id$ +// Copyright: (c) Julian Smart and Guillermo Rodriguez Garcia +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif //__BORLANDC__ + + +#if wxUSE_ANIMATIONCTRL + +#include "wx/log.h" +#include "wx/wfstream.h" +#include "wx/image.h" +#include "wx/gifdecod.h" +#include "wx/anidecod.h" +#include "wx/dcmemory.h" +#include "wx/dc.h" +#include "wx/dcclient.h" +#include "wx/animate.h" +#include "wx/animdecod.h" + + +#include +WX_DEFINE_LIST(wxAnimationDecoderList); + +wxAnimationDecoderList wxAnimation::sm_handlers; + + + +// ---------------------------------------------------------------------------- +// wxAnimation +// ---------------------------------------------------------------------------- + +IMPLEMENT_DYNAMIC_CLASS(wxAnimation, wxAnimationBase) +#define M_ANIMDATA wx_static_cast(wxAnimationDecoder*, m_refData) + +wxSize wxAnimation::GetSize() const +{ + wxCHECK_MSG( IsOk(), wxDefaultSize, wxT("invalid animation") ); + + return M_ANIMDATA->GetAnimationSize(); +} + +size_t wxAnimation::GetFrameCount() const +{ + wxCHECK_MSG( IsOk(), 0, wxT("invalid animation") ); + + return M_ANIMDATA->GetFrameCount(); +} + +wxImage wxAnimation::GetFrame(size_t i) const +{ + wxCHECK_MSG( IsOk(), wxNullImage, wxT("invalid animation") ); + + wxImage ret; + if (!M_ANIMDATA->ConvertToImage(i, &ret)) + return wxNullImage; + return ret; +} + +int wxAnimation::GetDelay(size_t i) const +{ + wxCHECK_MSG( IsOk(), 0, wxT("invalid animation") ); + + return M_ANIMDATA->GetDelay(i); +} + +wxPoint wxAnimation::GetFramePosition(size_t frame) const +{ + wxCHECK_MSG( IsOk(), wxDefaultPosition, wxT("invalid animation") ); + + return M_ANIMDATA->GetFramePosition(frame); +} + +wxAnimationDisposal wxAnimation::GetDisposalMethod(size_t frame) const +{ + wxCHECK_MSG( IsOk(), wxANIM_UNSPECIFIED, wxT("invalid animation") ); + + return M_ANIMDATA->GetDisposalMethod(frame); +} + +wxColour wxAnimation::GetBackgroundColour() const +{ + wxCHECK_MSG( IsOk(), wxNullColour, wxT("invalid animation") ); + + return M_ANIMDATA->GetBackgroundColour(); +} + +bool wxAnimation::LoadFile(const wxString& filename, wxAnimationType type) +{ + wxFileInputStream stream(filename); + if (!stream.Ok()) + return false; + + return Load(stream, type); +} + +bool wxAnimation::Load(wxInputStream &stream, wxAnimationType type) +{ + UnRef(); + + const wxAnimationDecoder *handler; + if ( type == wxANIMATION_TYPE_ANY ) + { + for ( wxAnimationDecoderList::compatibility_iterator node = sm_handlers.GetFirst(); + node; node = node->GetNext() ) + { + handler=(const wxAnimationDecoder*)node->GetData(); + + if ( handler->CanRead(stream) ) + { + // do a copy of the handler from the static list which we will own + // as our reference data + m_refData = handler->Clone(); + return M_ANIMDATA->Load(stream); + } + + } + + wxLogWarning( _("No handler found for animation type.") ); + return false; + } + + handler = FindHandler(type); + + // do a copy of the handler from the static list which we will own + // as our reference data + m_refData = handler->Clone(); + + if (handler == NULL) + { + wxLogWarning( _("No animation handler for type %ld defined."), type ); + + return false; + } + + if (stream.IsSeekable() && !M_ANIMDATA->CanRead(stream)) + { + wxLogError(_("Animation file is not of type %ld."), type); + return false; + } + else + return M_ANIMDATA->Load(stream); +} + + +// ---------------------------------------------------------------------------- +// animation decoders +// ---------------------------------------------------------------------------- + +void wxAnimation::AddHandler( wxAnimationDecoder *handler ) +{ + // Check for an existing handler of the type being added. + if (FindHandler( handler->GetType() ) == 0) + { + sm_handlers.Append( handler ); + } + else + { + // This is not documented behaviour, merely the simplest 'fix' + // for preventing duplicate additions. If someone ever has + // a good reason to add and remove duplicate handlers (and they + // may) we should probably refcount the duplicates. + // also an issue in InsertHandler below. + + wxLogDebug( _T("Adding duplicate animation handler for '%d' type"), + handler->GetType() ); + delete handler; + } +} + +void wxAnimation::InsertHandler( wxAnimationDecoder *handler ) +{ + // Check for an existing handler of the type being added. + if (FindHandler( handler->GetType() ) == 0) + { + sm_handlers.Insert( handler ); + } + else + { + // see AddHandler for additional comments. + wxLogDebug( _T("Inserting duplicate animation handler for '%d' type"), + handler->GetType() ); + delete handler; + } +} + +const wxAnimationDecoder *wxAnimation::FindHandler( wxAnimationType animType ) +{ + wxAnimationDecoderList::compatibility_iterator node = sm_handlers.GetFirst(); + while (node) + { + const wxAnimationDecoder *handler = (const wxAnimationDecoder *)node->GetData(); + if (handler->GetType() == animType) return handler; + node = node->GetNext(); + } + return 0; +} + +void wxAnimation::InitStandardHandlers() +{ + AddHandler(new wxGIFDecoder); + AddHandler(new wxANIDecoder); +} + +void wxAnimation::CleanUpHandlers() +{ + wxAnimationDecoderList::compatibility_iterator node = sm_handlers.GetFirst(); + while (node) + { + wxAnimationDecoder *handler = (wxAnimationDecoder *)node->GetData(); + wxAnimationDecoderList::compatibility_iterator next = node->GetNext(); + delete handler; + node = next; + } + + sm_handlers.Clear(); +} + + +// A module to allow wxAnimation initialization/cleanup +// without calling these functions from app.cpp or from +// the user's application. + +class wxAnimationModule: public wxModule +{ +DECLARE_DYNAMIC_CLASS(wxAnimationModule) +public: + wxAnimationModule() {} + bool OnInit() { wxAnimation::InitStandardHandlers(); return true; }; + void OnExit() { wxAnimation::CleanUpHandlers(); }; +}; + +IMPLEMENT_DYNAMIC_CLASS(wxAnimationModule, wxModule) + + + + +// ---------------------------------------------------------------------------- +// wxAnimationCtrl +// ---------------------------------------------------------------------------- + +IMPLEMENT_CLASS(wxAnimationCtrl, wxAnimationCtrlBase) +BEGIN_EVENT_TABLE(wxAnimationCtrl, wxAnimationCtrlBase) + EVT_PAINT(wxAnimationCtrl::OnPaint) + EVT_SIZE(wxAnimationCtrl::OnSize) + EVT_TIMER(wxID_ANY, wxAnimationCtrl::OnTimer) +END_EVENT_TABLE() + +bool wxAnimationCtrl::Create(wxWindow *parent, wxWindowID id, + const wxAnimation& animation, const wxPoint& pos, + const wxSize& size, long style, const wxString& name) +{ + m_animation = animation; + m_currentFrame = 0; + m_looped = true; + m_isPlaying = false; + m_useWinBackgroundColour = false; + m_timer.SetOwner(this); + + if (!wxControl::Create(parent, id, pos, size, style, wxDefaultValidator, name)) + return false; + + // by default we get the same background colour of our parent + SetBackgroundColour(parent->GetBackgroundColour()); + return true; +} + +wxAnimationCtrl::~wxAnimationCtrl() +{ + Stop(); +} + +bool wxAnimationCtrl::LoadFile(const wxString& filename, wxAnimationType type) +{ + wxAnimation anim; + if (!anim.LoadFile(filename, type) || + !anim.IsOk()) + return false; + + SetAnimation(anim); + return true; +} + +wxSize wxAnimationCtrl::DoGetBestSize() const +{ + if (m_animation.IsOk() && !this->HasFlag(wxAC_NO_AUTORESIZE)) + return m_animation.GetSize(); + + return wxSize(100, 100); +} + +void wxAnimationCtrl::SetAnimation(const wxAnimation& animation) +{ + if (IsPlaying()) + Stop(); + + m_animation = animation; + + if (m_animation.GetBackgroundColour() == wxNullColour) + SetUseWindowBackgroundColour(); + if (!this->HasFlag(wxAC_NO_AUTORESIZE)) + FitToAnimation(); + + // display first frame + m_currentFrame = 0; + if (m_animation.IsOk()) + RebuildBackingStoreUpToFrame(0); + else + { + // clear to + wxMemoryDC dc; + dc.SelectObject(m_backingStore); + + // Draw the background + DisposeToBackground(dc); + } + + Refresh(); +} + +void wxAnimationCtrl::FitToAnimation() +{ + SetSize(m_animation.GetSize()); +} + + +// ---------------------------------------------------------------------------- +// wxAnimationCtrl - stop/play methods +// ---------------------------------------------------------------------------- + +void wxAnimationCtrl::Stop() +{ + // leave current frame displayed until Play() is called again + m_timer.Stop(); + m_isPlaying = false; +} + +bool wxAnimationCtrl::Play(bool looped) +{ + if (!m_animation.IsOk()) + return false; + + int oldframe = m_currentFrame; + m_looped = looped; + m_currentFrame = 0; + m_isPlaying = true; + + // small optimization: if the back store was already updated to the + // first frame, don't rebuild it + if (oldframe != 0) + RebuildBackingStoreUpToFrame(0); + + // DrawCurrentFrame() will use our updated backing store + wxClientDC clientDC(this); + DrawCurrentFrame(clientDC); + + // start the timer + int delay = m_animation.GetDelay(0); + if (delay == 0) + delay = 1; // 0 is invalid timeout for wxTimer. + m_timer.Start(delay); + + return true; +} + + + +// ---------------------------------------------------------------------------- +// wxAnimationCtrl - rendering methods +// ---------------------------------------------------------------------------- + +void wxAnimationCtrl::RebuildBackingStoreUpToFrame(size_t frame) +{ + // if we've not created the backing store yet or it's too + // small, then recreate it + wxSize sz = m_animation.GetSize(), + winsz = GetClientSize(); + int w = wxMin(sz.GetWidth(), winsz.GetWidth()); + int h = wxMin(sz.GetHeight(), winsz.GetHeight()); + + if (m_backingStore.GetWidth() < w || + m_backingStore.GetHeight() < h) + m_backingStore.Create(w, h); + + wxMemoryDC dc; + dc.SelectObject(m_backingStore); + + // Draw the background + DisposeToBackground(dc); + + // Draw all intermediate frames that haven't been removed from the animation + for (size_t i = 0; i < frame; i++) + { + if (m_animation.GetDisposalMethod(i) == wxANIM_DONOTREMOVE || + m_animation.GetDisposalMethod(i) == wxANIM_UNSPECIFIED) + { + DrawFrame(dc, i); + } + } + + // finally draw this frame + DrawFrame(dc, frame); + dc.SelectObject(wxNullBitmap); +} + +void wxAnimationCtrl::IncrementalUpdateBackingStore() +{ + wxMemoryDC dc; + dc.SelectObject(m_backingStore); + + // OPTIMIZATION: + // since wxAnimationCtrl can only play animations forward, without skipping + // frames, we can be sure that m_backingStore contains the m_currentFrame-1 + // frame and thus we just need to dispose the m_currentFrame-1 frame and + // render the m_currentFrame-th one. + + if (m_currentFrame == 0) + { + // before drawing the first frame always dispose to bg colour + DisposeToBackground(dc); + } + else + { + switch (m_animation.GetDisposalMethod(m_currentFrame-1)) + { + case wxANIM_TOBACKGROUND: + DisposeToBackground(dc); + break; + + case wxANIM_TOPREVIOUS: + // this disposal should never be used too often. + // E.g. GIF specification explicitely say to keep the usage of this + // disposal limited to the minimum. + // In fact it may require a lot of time to restore + if (m_currentFrame == 1) + { + // if 0-th frame disposal is to restore to previous frame, + // the best we can do is to restore to background + DisposeToBackground(dc); + } + else + RebuildBackingStoreUpToFrame(m_currentFrame-2); + break; + + case wxANIM_DONOTREMOVE: + case wxANIM_UNSPECIFIED: + break; + } + } + + // now just draw the current frame on the top of the backing store + DrawFrame(dc, m_currentFrame); + dc.SelectObject(wxNullBitmap); +} + +void wxAnimationCtrl::DrawFrame(wxDC &dc, size_t frame) +{ + // PERFORMANCE NOTE: + // this draw stuff is not as fast as possible: the wxAnimationDecoder + // needs first to convert from its internal format to wxImage RGB24; + // the wxImage is then converted as a wxBitmap and finally blitted. + // If wxAnimationDecoder had a function to convert directly from its + // internal format to a port-specific wxBitmap, it would be somewhat faster. + wxBitmap bmp(m_animation.GetFrame(frame)); + dc.DrawBitmap(bmp, m_animation.GetFramePosition(frame), + true /* use mask */); +} + +void wxAnimationCtrl::DrawCurrentFrame(wxDC& dc) +{ + wxASSERT(m_backingStore.Ok()); + + // m_backingStore always contains the current frame + dc.DrawBitmap(m_backingStore, 0, 0); +} + +void wxAnimationCtrl::DisposeToBackground(wxDC& dc) +{ + wxBrush brush(IsUsingWindowBackgroundColour() ? + this->GetBackgroundColour() : m_animation.GetBackgroundColour(), wxSOLID); + dc.SetBackground(brush); + dc.Clear(); +} + +// ---------------------------------------------------------------------------- +// wxAnimationCtrl - event handlers +// ---------------------------------------------------------------------------- + +void wxAnimationCtrl::OnPaint(wxPaintEvent& WXUNUSED(event)) +{ + // VERY IMPORTANT: the wxPaintDC *must* be created in any case + wxPaintDC dc(this); + + // both if we are playing or not, we need to refresh the current frame + if (m_backingStore.Ok()) + DrawCurrentFrame(dc); + //else: m_animation is not valid and thus we don't have a valid backing store... +} + +void wxAnimationCtrl::OnTimer(wxTimerEvent &WXUNUSED(event)) +{ + m_currentFrame++; + if (m_currentFrame == m_animation.GetFrameCount()) + { + // Should a non-looped animation display the last frame? + if (!m_looped) + { + m_timer.Stop(); + m_isPlaying = false; + return; + } + else + m_currentFrame = 0; // let's restart + } + + IncrementalUpdateBackingStore(); + + wxClientDC dc(this); + DrawCurrentFrame(dc); + + // Set the timer for the next frame + int delay = m_animation.GetDelay(m_currentFrame); + if (delay == 0) + delay = 1; // 0 is invalid timeout for wxTimer. + m_timer.Start(delay); +} + +void wxAnimationCtrl::OnSize(wxSizeEvent &WXUNUSED(event)) +{ + // NB: resizing an animation control may take a lot of time + // for big animations as the backing store must be + // extended and rebuilt. Try to avoid it!! + if (m_animation.IsOk()) + RebuildBackingStoreUpToFrame(m_currentFrame); +} + +#endif // wxUSE_ANIMATIONCTRL + diff --git a/src/gtk/animate.cpp b/src/gtk/animate.cpp new file mode 100644 index 0000000000..df942e3c1a --- /dev/null +++ b/src/gtk/animate.cpp @@ -0,0 +1,339 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: src/gtk/animate.cpp +// Purpose: wxAnimation and wxAnimationCtrl +// Author: Francesco Montorsi +// Modified By: +// Created: 24/09/2006 +// Id: $Id$ +// Copyright: (c) Francesco Montorsi +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + + +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#if wxUSE_ANIMATIONCTRL + +#include "wx/animate.h" +#include +#include + + +// ============================================================================ +// implementation +// ============================================================================ + +void gdk_pixbuf_area_updated(GdkPixbufLoader *loader, + gint x, + gint y, + gint width, + gint height, + wxAnimation *anim) +{ + if (anim && anim->GetPixbuf() == NULL) + { + // we need to set the pixbuf only if this is the first time this signal + // has been called! + anim->SetPixbuf(gdk_pixbuf_loader_get_animation(loader)); + } +} + + +//----------------------------------------------------------------------------- +// wxAnimation +//----------------------------------------------------------------------------- + +IMPLEMENT_DYNAMIC_CLASS(wxAnimation, wxAnimationBase) + +bool wxAnimation::LoadFile(const wxString &name, wxAnimationType WXUNUSED(type)) +{ + UnRef(); + m_pixbuf = gdk_pixbuf_animation_new_from_file(name.c_str(), NULL); + return IsOk(); +} + +bool wxAnimation::Load(wxInputStream &stream, wxAnimationType type) +{ + UnRef(); + + char anim_type[12]; + switch (type) + { + case wxANIMATION_TYPE_GIF: + strcpy(anim_type, "gif"); + break; + + case wxANIMATION_TYPE_ANI: + strcpy(anim_type, "ani"); + break; + + default: + break; + } + + // create a GdkPixbufLoader + GError *error = NULL; + GdkPixbufLoader *loader; + if (type != wxANIMATION_TYPE_INVALID && type != wxANIMATION_TYPE_ANY) + loader = gdk_pixbuf_loader_new_with_type(anim_type, &error); + else + loader = gdk_pixbuf_loader_new(); + + if (!loader) + { + wxLogDebug(wxT("Could not create the loader for '%s' animation type"), anim_type); + return false; + } + + // connect to loader signals + g_signal_connect(loader, "area-updated", G_CALLBACK(gdk_pixbuf_area_updated), this); + + //m_bLoadComplete = false; + guchar buf[2048]; + while (stream.IsOk()) + { + // read a chunk of data + stream.Read(buf, 2048); + + // fetch all data into the loader + if (!gdk_pixbuf_loader_write(loader, buf, stream.LastRead(), &error)) + { + gdk_pixbuf_loader_close(loader, &error); + wxLogDebug(wxT("Could not write to the loader")); + return false; + } + } + + // load complete + if (!gdk_pixbuf_loader_close(loader, &error)) + { + wxLogDebug(wxT("Could not close the loader")); + return false; + } + //m_bLoadComplete = true; + + // wait until we get the last area_updated signal + return true; +} + + +//----------------------------------------------------------------------------- +// wxAnimationCtrl +//----------------------------------------------------------------------------- + +IMPLEMENT_DYNAMIC_CLASS(wxAnimationCtrl, wxAnimationCtrlBase) +BEGIN_EVENT_TABLE(wxAnimationCtrl, wxAnimationCtrlBase) + EVT_TIMER(wxID_ANY, wxAnimationCtrl::OnTimer) +END_EVENT_TABLE() + +bool wxAnimationCtrl::Create( wxWindow *parent, wxWindowID id, + const wxAnimation& anim, + const wxPoint& pos, + const wxSize& size, + long style, + const wxString& name) +{ + m_needParent = true; + m_acceptsFocus = true; + + if (!PreCreation( parent, pos, size ) || + !wxControl::CreateBase(parent, id, pos, size, style & wxWINDOW_STYLE_MASK, + wxDefaultValidator, name)) + { + wxFAIL_MSG( wxT("wxAnimationCtrl creation failed") ); + return false; + } + + SetWindowStyle(style); + + m_widget = gtk_image_new(); + gtk_widget_show( GTK_WIDGET(m_widget) ); + + m_parent->DoAddChild( this ); + + PostCreation(size); + SetBestSize(size); + + m_anim = NULL; + m_iter = NULL; + m_bPlaying = false; + if (anim != wxNullAnimation) + SetAnimation(anim); + + // init the timer used for animation + m_timer.SetOwner(this); + + return true; +} + +wxAnimationCtrl::~wxAnimationCtrl() +{ + ResetAnim(); + ResetIter(); +} + +bool wxAnimationCtrl::LoadFile(const wxString &filename, wxAnimationType type) +{ + wxAnimation anim; + if (!anim.LoadFile(filename, type)) + return false; + + SetAnimation(anim); + return true; +} + +void wxAnimationCtrl::SetAnimation(const wxAnimation &anim) +{ + if (IsPlaying()) + Stop(); + + ResetAnim(); + ResetIter(); + + // copy underlying GdkPixbuf object + m_anim = anim.GetPixbuf(); + + // m_anim may be null in case wxNullAnimation has been passed + if (m_anim) + { + // add a reference to the GdkPixbufAnimation + g_object_ref(m_anim); + + if (!this->HasFlag(wxAC_NO_AUTORESIZE)) + FitToAnimation(); + + // display first frame + gtk_image_set_from_pixbuf(GTK_IMAGE(m_widget), + gdk_pixbuf_animation_get_static_image(m_anim)); + } + else + { + // we need to clear the control to the background colour + ClearToBackgroundColour(); + } +} + +void wxAnimationCtrl::FitToAnimation() +{ + if (!m_anim) + return; + + int w = gdk_pixbuf_animation_get_width(m_anim), + h = gdk_pixbuf_animation_get_height(m_anim); + + // update our size to fit animation + //if (w > 0 && h > 0) +// gtk_widget_set_size_request(m_widget, w, h); + SetSize(w, h); +} + +bool wxAnimationCtrl::Play() +{ + if (m_anim == NULL) + return false; + + // init the iterator and start a one-shot timer + ResetIter(); + m_iter = gdk_pixbuf_animation_get_iter (m_anim, NULL); + m_bPlaying = true; + + // gdk_pixbuf_animation_iter_get_delay_time() may return -1 which means + // that the timer should not start + int n = gdk_pixbuf_animation_iter_get_delay_time(m_iter); + if (n >= 0) + m_timer.Start(n, true); + + return true; +} + +void wxAnimationCtrl::Stop() +{ + // leave current frame displayed until Play() is called again + if (IsPlaying()) + m_timer.Stop(); + m_bPlaying = false; +} + +bool wxAnimationCtrl::IsPlaying() const +{ + // NB: we cannot just return m_timer.IsRunning() as this would not + // be safe as e.g. if we are displaying a frame forever, + // then we are "officially" still playing the animation, but + // the timer is not running anymore... + return m_bPlaying; +} + +wxSize wxAnimationCtrl::DoGetBestSize() const +{ + if (m_anim && !this->HasFlag(wxAC_NO_AUTORESIZE)) + { + return wxSize(gdk_pixbuf_animation_get_width(m_anim), + gdk_pixbuf_animation_get_height(m_anim)); + } + + return wxSize(100,100); +} + +void wxAnimationCtrl::ClearToBackgroundColour() +{ + wxSize sz = GetClientSize(); + GdkPixbuf *newpix = gdk_pixbuf_new(GDK_COLORSPACE_RGB, false, 8, + sz.GetWidth(), sz.GetHeight()); + if (!newpix) + return; + + wxColour clr = GetBackgroundColour(); + guint32 col = (clr.Red() << 24) | (clr.Green() << 16) | (clr.Blue() << 8); + gdk_pixbuf_fill(newpix, col); + + wxLogDebug(wxT("Clearing to background %s"), clr.GetAsString().c_str()); + + gtk_image_set_from_pixbuf(GTK_IMAGE(m_widget), newpix); + g_object_unref(newpix); +} + +bool wxAnimationCtrl::SetBackgroundColour( const wxColour &colour ) +{ + // wxWindowGTK::SetBackgroundColour works but since our m_widget is a GtkImage + // it won't show the background colour unlike the user would expect. + // Thus we clear the GtkImage contents to the background colour... + if (!wxControl::SetBackgroundColour(colour)) + return false; + ClearToBackgroundColour(); + return true; +} + + +//----------------------------------------------------------------------------- +// wxAnimationCtrl - event handlers +//----------------------------------------------------------------------------- + +void wxAnimationCtrl::OnTimer(wxTimerEvent &ev) +{ + wxASSERT(m_iter != NULL); + + // gdk_pixbuf_animation_iter_advance() will automatically restart + // the animation, if necessary and we have no way to know !! + if (gdk_pixbuf_animation_iter_advance(m_iter, NULL)) + { + // start a new one-shot timer + int n = gdk_pixbuf_animation_iter_get_delay_time(m_iter); + if (n >= 0) + m_timer.Start(n, true); + + gtk_image_set_from_pixbuf(GTK_IMAGE(m_widget), + gdk_pixbuf_animation_iter_get_pixbuf(m_iter)); + } + else + { + // no need to update the m_widget yet + m_timer.Start(10, true); + } +} + +#endif // wxUSE_ANIMATIONCTRL diff --git a/src/html/m_image.cpp b/src/html/m_image.cpp index 41c8a636df..80d6dba87b 100644 --- a/src/html/m_image.cpp +++ b/src/html/m_image.cpp @@ -309,6 +309,7 @@ private: wxGIFDecoder *m_gifDecoder; wxTimer *m_gifTimer; int m_physX, m_physY; + size_t m_nCurrFrame; #endif double m_scale; wxHtmlImageMapCell *m_imageMap; @@ -358,6 +359,7 @@ wxHtmlImageCell::wxHtmlImageCell(wxHtmlWindowInterface *windowIface, m_gifDecoder = NULL; m_gifTimer = NULL; m_physX = m_physY = wxDefaultCoord; + m_nCurrFrame = 0; #endif if ( m_bmpW && m_bmpH ) @@ -374,11 +376,11 @@ wxHtmlImageCell::wxHtmlImageCell(wxHtmlWindowInterface *windowIface, (input->GetLocation().Matches(wxT("*.gif")) || input->GetLocation().Matches(wxT("*.GIF"))) ) { - m_gifDecoder = new wxGIFDecoder(s, true); - if ( m_gifDecoder->ReadGIF() == wxGIF_OK ) + m_gifDecoder = new wxGIFDecoder(); + if ( m_gifDecoder->LoadGIF(*s) == wxGIF_OK ) { wxImage img; - if ( m_gifDecoder->ConvertToImage(&img) ) + if ( m_gifDecoder->ConvertToImage(0, &img) ) SetImage(img); readImg = false; @@ -386,7 +388,7 @@ wxHtmlImageCell::wxHtmlImageCell(wxHtmlWindowInterface *windowIface, if ( m_gifDecoder->IsAnimation() ) { m_gifTimer = new wxGIFTimer(this); - m_gifTimer->Start(m_gifDecoder->GetDelay(), true); + m_gifTimer->Start(m_gifDecoder->GetDelay(0), true); } else { @@ -481,7 +483,10 @@ void wxHtmlImageCell::AdvanceAnimation(wxTimer *timer) { wxImage img; - m_gifDecoder->GoNextFrame(true); + // advance current frame + m_nCurrFrame++; + if (m_nCurrFrame == m_gifDecoder->GetFrameCount()) + m_nCurrFrame = 0; if ( m_physX == wxDefaultCoord ) { @@ -499,17 +504,16 @@ void wxHtmlImageCell::AdvanceAnimation(wxTimer *timer) wxRect rect(pos, wxSize(m_Width, m_Height)); if ( win->GetClientRect().Intersects(rect) && - m_gifDecoder->ConvertToImage(&img) ) + m_gifDecoder->ConvertToImage(m_nCurrFrame, &img) ) { #if !defined(__WXMSW__) || wxUSE_WXDIB - if ( (int)m_gifDecoder->GetWidth() != m_Width || - (int)m_gifDecoder->GetHeight() != m_Height || - m_gifDecoder->GetLeft() != 0 || m_gifDecoder->GetTop() != 0 ) + if ( m_gifDecoder->GetFrameSize(m_nCurrFrame) != wxSize(m_Width, m_Height) || + m_gifDecoder->GetFramePosition(m_nCurrFrame) != wxPoint(0, 0) ) { wxBitmap bmp(img); wxMemoryDC dc; dc.SelectObject(*m_bitmap); - dc.DrawBitmap(bmp, m_gifDecoder->GetLeft(), m_gifDecoder->GetTop(), + dc.DrawBitmap(bmp, m_gifDecoder->GetFramePosition(m_nCurrFrame), true /* use mask */); } else @@ -518,7 +522,7 @@ void wxHtmlImageCell::AdvanceAnimation(wxTimer *timer) win->Refresh(img.HasMask(), &rect); } - timer->Start(m_gifDecoder->GetDelay(), true); + timer->Start(m_gifDecoder->GetDelay(m_nCurrFrame), true); } void wxHtmlImageCell::Layout(int w) diff --git a/src/wxWindows.dsp b/src/wxWindows.dsp index 4dbdc4af16..45379d7902 100644 --- a/src/wxWindows.dsp +++ b/src/wxWindows.dsp @@ -301,6 +301,14 @@ SOURCE=.\common\accesscmn.cpp # End Source File # Begin Source File +SOURCE=.\common\anidecod.cpp +# End Source File +# Begin Source File + +SOURCE=.\common\animatecmn.cpp +# End Source File +# Begin Source File + SOURCE=.\common\appbase.cpp # End Source File # Begin Source File @@ -971,6 +979,10 @@ SOURCE=.\generic\aboutdlgg.cpp # End Source File # Begin Source File +SOURCE=.\generic\animateg.cpp +# End Source File +# Begin Source File + SOURCE=.\generic\bmpcboxg.cpp # End Source File # Begin Source File @@ -2159,6 +2171,14 @@ SOURCE=..\include\wx\afterstd.h # End Source File # Begin Source File +SOURCE=..\include\wx\anidecod.h +# End Source File +# Begin Source File + +SOURCE=..\include\wx\animate.h +# End Source File +# Begin Source File + SOURCE=..\include\wx\app.h # End Source File # Begin Source File @@ -4103,6 +4123,10 @@ SOURCE=..\include\wx\generic\accel.h # End Source File # Begin Source File +SOURCE=..\include\wx\generic\animate.h +# End Source File +# Begin Source File + SOURCE=..\include\wx\generic\bmpcbox.h # End Source File # Begin Source File -- 2.45.2