]> git.saurik.com Git - wxWidgets.git/commitdiff
added wxAnimationCtrl (patch 1570325)
authorVadim Zeitlin <vadim@wxwidgets.org>
Mon, 9 Oct 2006 17:51:07 +0000 (17:51 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Mon, 9 Oct 2006 17:51:07 +0000 (17:51 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41819 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

49 files changed:
Makefile.in
build/bakefiles/files.bkl
build/msw/makefile.bcc
build/msw/makefile.gcc
build/msw/makefile.vc
build/msw/makefile.wat
build/msw/wx_adv.dsp
build/msw/wx_core.dsp
configure.in
docs/changes.txt
docs/latex/wx/animatctrl.tex [new file with mode: 0644]
docs/latex/wx/animation.tex [new file with mode: 0644]
docs/latex/wx/category.tex
docs/latex/wx/classes.tex
include/wx/anidecod.h [new file with mode: 0644]
include/wx/animate.h [new file with mode: 0644]
include/wx/animdecod.h [new file with mode: 0644]
include/wx/chkconf.h
include/wx/generic/animate.h [new file with mode: 0644]
include/wx/gifdecod.h
include/wx/gtk/animate.h [new file with mode: 0644]
include/wx/imagbmp.h
include/wx/mac/setup0.h
include/wx/motif/setup0.h
include/wx/msw/setup0.h
include/wx/msw/wince/setup.h
include/wx/os2/setup0.h
include/wx/palmos/setup0.h
include/wx/setup_inc.h
samples/animate/Makefile.in [new file with mode: 0644]
samples/animate/anitest.bkl [new file with mode: 0644]
samples/animate/anitest.cpp [new file with mode: 0644]
samples/animate/anitest.h [new file with mode: 0644]
samples/animate/anitest.rc [new file with mode: 0644]
samples/animate/hourglass.ani [new file with mode: 0644]
samples/animate/mondrian.ico [new file with mode: 0644]
samples/animate/mondrian.xpm [new file with mode: 0644]
samples/animate/throbber.gif [new file with mode: 0644]
samples/samples.bkl
setup.h.in
src/common/anidecod.cpp [new file with mode: 0644]
src/common/animatecmn.cpp [new file with mode: 0644]
src/common/gifdecod.cpp
src/common/imagbmp.cpp
src/common/imaggif.cpp
src/generic/animateg.cpp [new file with mode: 0644]
src/gtk/animate.cpp [new file with mode: 0644]
src/html/m_image.cpp
src/wxWindows.dsp

index ffc07ab3fb422aabfcb56502bc6914ad8ad0a41f..ad0f36a06b2dcee3c70208c62022da7a5b70e6cc 100644 (file)
@@ -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
 
index 8033700998584db9de0f2229ea9aa8600577a23f..efc791abc5a6e6b851d61713a3162d388718de69 100644 (file)
@@ -551,6 +551,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
 
 <set var="GUI_CMN_SRC" hints="files">
     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!
 <!-- ====================================================================== -->
 
 <set var="ADVANCED_CMN_SRC" hints="files">
+    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!
 </set>
 
 <set var="ADVANCED_CMN_HDR" hints="files">
+    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!
 </set>
 
 <set var="ADVANCED_MSW_SRC" hints="files">
+    src/generic/animateg.cpp
     src/common/taskbarcmn.cpp
     src/msw/aboutdlg.cpp
     src/msw/sound.cpp
     src/msw/taskbar.cpp
 </set>
 <set var="ADVANCED_MSW_HDR" hints="files">
+    wx/generic/animate.h
     wx/msw/sound.h
     wx/msw/taskbar.h
 </set>
@@ -2700,6 +2706,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
 </set>
 
 <set var="ADVANCED_MAC_SRC" hints="files">
+    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
 </set>
 <set var="ADVANCED_MAC_HDR" hints="files">
+    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!
 </set>
 
 <set var="ADVANCED_COCOA_SRC" hints="files">
+    src/generic/animateg.cpp
     src/cocoa/taskbar.mm
     src/common/taskbarcmn.cpp
     src/mac/corefoundation/hidjoystick.cpp
 </set>
 <set var="ADVANCED_COCOA_HDR" hints="files">
+    wx/generic/animate.h
     wx/cocoa/taskbar.h
     wx/mac/corefoundation/joystick.h
 </set>
 
 <set var="ADVANCED_OS2_SRC" hints="files">
+    src/generic/animateg.cpp
     src/os2/joystick.cpp
     src/os2/sound.cpp
 </set>
 <set var="ADVANCED_OS2_HDR" hints="files">
+    wx/generic/animate.h
     wx/os2/joystick.h
     wx/os2/sound.h
 </set>
@@ -2747,10 +2759,15 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
 
 <set var="ADVANCED_GTK_SRC" hints="files">
     src/gtk/aboutdlg.cpp
+    src/gtk/animate.cpp
     src/gtk/taskbar.cpp
     src/gtk/dataview.cpp
     src/gtk/eggtrayicon.c
 </set>
+<set var="ADVANCED_GTK_HDR" hints="files">
+    wx/gtk/animate.h
+</set>
+
 <set var="ADVANCED_GTK1_SRC" hints="files">
 </set>
 
index 7cf4b8800e9180f713142d5823d83b5408e1ca75..a657f3d1f577f8cd2497d1699f1fa75c0286e0be 100644 (file)
@@ -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) $**
 
index 5426f56632d6fc987406bb44ae34db08eab5f5c6..e5d1946fa99fa08a456cc82bc921aaecbd473dff 100644 (file)
@@ -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) $<
 
index a606c68d1fd5d7080ae94901c65709a9f9e44cf2..1acada9fb5c596c8c0af5a76ef342a804ef00bd3 100644 (file)
@@ -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) $**
 
index ae2182a25078287432915c4c751f08b8afece384..b367c426a24d57dcb541dd982ba5ee0bc330fe93 100644 (file)
@@ -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) $<
 
index e6de6d25299631c48dfbcba1e4dfd0aafd08638c..44064f85c7cad0803d080a005ae6726e474527a7 100644 (file)
@@ -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
index 17b8d2c14f1e8c0f44a0b8450dce267341753abc..b7ea3d8e6f2124df82f557a92c1a73061c8b1ae7 100644 (file)
@@ -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
index 5179c97467751b3a9376f33e900c3d5dcb95217f..ecb36ecaa6b45675be8d115f9ff166d296991521 100644 (file)
@@ -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-<control> 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
index cceaf5143db5e330c0e1ae2aa591270de269a7f3..4c145eeb69a27db8a4ca49334bc7f506489bfc1e 100644 (file)
@@ -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 (file)
index 0000000..d66bac7
--- /dev/null
@@ -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}
+
+<wx/animate.h>
+
+\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 (file)
index 0000000..298c9f1
--- /dev/null
@@ -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}
+
+<wx/animate.h>
+
+\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.
+
index 764cebed5245ec658e1e3705528c7f969c124c86..750d1456b760652a03da9f93d84c5b2f47377f97 100644 (file)
@@ -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}
index 60d8b51378b3c8c17dc2d0293d979f057d231b2f..08aa6d1a826fb082674f9b300bf4e612e308f6f4 100644 (file)
@@ -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 (file)
index 0000000..4fe25b6
--- /dev/null
@@ -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 (file)
index 0000000..5d2772f
--- /dev/null
@@ -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 <wx/defs.h>
+#include <wx/string.h>
+#include <wx/gdicmn.h>
+#include <wx/list.h>
+#include <wx/timer.h>
+#include <wx/bitmap.h>
+#include <wx/colour.h>
+#include <wx/control.h>
+#include <wx/animdecod.h>
+
+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 (file)
index 0000000..2c65126
--- /dev/null
@@ -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
+
index 39a66b6c4e479fba8c7fedbcf5824c5ae6bbbd8e..6ad8476e073bf578219e11028210ee2497911206 100644 (file)
 #   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 (file)
index 0000000..a244d32
--- /dev/null
@@ -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 <wx/defs.h>
+#include <wx/string.h>
+#include <wx/gdicmn.h>
+#include <wx/list.h>
+#include <wx/timer.h>
+#include <wx/bitmap.h>
+#include <wx/colour.h>
+#include <wx/control.h>
+#include <wx/animdecod.h>
+
+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__
index cb9490e8922f6e6b3f1ee87526591b621484a048..346ae800b940602f16680efc8ccebf87c62ad536 100644 (file)
 
 #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 (file)
index 0000000..6e4704a
--- /dev/null
@@ -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 <gdk-pixbuf/gdk-pixbuf.h>
+
+// ----------------------------------------------------------------------------
+// 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__
index d45267079321ae70d59713a96180ef3dce4e33cf..c85fac0e6a65e91bdae632d153464384a1f0f6b3 100644 (file)
@@ -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
index 01a5ed2e82bc343fc74bf4487a391499d92397ec..9e2c824b8595ce70a330e76830d07556063c5810 100644 (file)
 // 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
index 23bc554f402593a54a54c95dc0f58523035a3ad9..43f560b43898c4475f5daf48e0b5b4d19ed883c4 100644 (file)
 // 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
index 58d755847838e631d70a00ffa51728c114674606..9b47d2cc3d94ee7a6601c3555f647509df9f18cc 100644 (file)
 // 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
index e0027b359846f99a9ee816db0f9dffc01e9b9c73..8b055bab1d1449853ad66a7bf83aac7b6d829cf8 100644 (file)
 // 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
index 03405feab3f8806eb39291828a5c49636bc0a8c4..55b47dde66f684fda2c1dddcd2d5c13bd1ffe4f0 100644 (file)
 // 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
index fb5eacf1d696f4fb17381aab65426da39f609e4c..a06bffa257673d417467dd2117515486d64a50bb 100644 (file)
 // 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
index e0b6cb987e46989b88d53f0de7319cb14b70da9e..387c59a715f60ad61b8b233244ff8422b1d74830 100644 (file)
 // 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 (file)
index 0000000..4775d42
--- /dev/null
@@ -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 (file)
index 0000000..27b4cc5
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version="1.0" ?>
+<makefile>
+
+    <include file="../../../build/bakefiles/common_samples.bkl"/>
+
+    <exe id="anitest" template="wx_sample" template_append="wx_append">
+        <sources>
+            anitest.cpp
+        </sources>
+        <wx-lib>adv</wx-lib>
+        <wx-lib>core</wx-lib>
+        <wx-lib>base</wx-lib>
+        <win32-res>../sample.rc</win32-res>
+    </exe>
+
+    <wx-data id="catalog">
+        <files>throbber.gif hourglass.ani</files>
+    </wx-data>
+
+</makefile>
diff --git a/samples/animate/anitest.cpp b/samples/animate/anitest.cpp
new file mode 100644 (file)
index 0000000..a75e0f0
--- /dev/null
@@ -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 (file)
index 0000000..2a265af
--- /dev/null
@@ -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 (file)
index 0000000..7655c62
--- /dev/null
@@ -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 (file)
index 0000000..68d1a31
Binary files /dev/null and b/samples/animate/hourglass.ani differ
diff --git a/samples/animate/mondrian.ico b/samples/animate/mondrian.ico
new file mode 100644 (file)
index 0000000..2310c5d
Binary files /dev/null and b/samples/animate/mondrian.ico differ
diff --git a/samples/animate/mondrian.xpm b/samples/animate/mondrian.xpm
new file mode 100644 (file)
index 0000000..5d092d5
--- /dev/null
@@ -0,0 +1,44 @@
+/* XPM */
+static char *mondrian_xpm[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 6 1",
+"  c black",
+". c blue",
+"X c #00BF00",
+"o c red",
+"O c yellow",
+"+ c gray100",
+/* pixels */
+"                                ",
+" oooooo +++++++++++++++++++++++ ",
+" oooooo +++++++++++++++++++++++ ",
+" oooooo +++++++++++++++++++++++ ",
+" oooooo +++++++++++++++++++++++ ",
+" oooooo +++++++++++++++++++++++ ",
+" oooooo +++++++++++++++++++++++ ",
+" oooooo +++++++++++++++++++++++ ",
+"                                ",
+" ++++++ ++++++++++++++++++ .... ",
+" ++++++ ++++++++++++++++++ .... ",
+" ++++++ ++++++++++++++++++ .... ",
+" ++++++ ++++++++++++++++++ .... ",
+" ++++++ ++++++++++++++++++ .... ",
+" ++++++ ++++++++++++++++++      ",
+" ++++++ ++++++++++++++++++ ++++ ",
+" ++++++ ++++++++++++++++++ ++++ ",
+" ++++++ ++++++++++++++++++ ++++ ",
+" ++++++ ++++++++++++++++++ ++++ ",
+" ++++++ ++++++++++++++++++ ++++ ",
+" ++++++ ++++++++++++++++++ ++++ ",
+" ++++++ ++++++++++++++++++ ++++ ",
+" ++++++ ++++++++++++++++++ ++++ ",
+" ++++++ ++++++++++++++++++ ++++ ",
+" ++++++                    ++++ ",
+" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
+" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
+" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
+" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
+" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
+" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
+"                                "
+};
diff --git a/samples/animate/throbber.gif b/samples/animate/throbber.gif
new file mode 100644 (file)
index 0000000..82c2170
Binary files /dev/null and b/samples/animate/throbber.gif differ
index 932d95063fff8edc20c34817abb5c9305bcdc63b..5cfa6bad127aa9cb951ebd5a91b4aa641f8984b7 100644 (file)
@@ -10,6 +10,7 @@
 
     <!-- all samples are enumerated here: -->
     <subproject id="access" template="sub"/>
+    <subproject id="animate" template="sub"/>
     <subproject id="artprov" template="sub"/>
     <subproject id="calendar" template="sub"/>
     <subproject id="caret" template="sub"/>
index 1e968bbc70fd0fd2dacd24fae179fadc3d51949e..60df19067f866a19f6ee563685a63844a3040846 100644 (file)
 
 #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 (file)
index 0000000..61cfb66
--- /dev/null
@@ -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 <stdlib.h>
+#include <string.h>
+#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 <wx/arrimpl.cpp> // this is a magic incantation which must be done!
+WX_DEFINE_OBJARRAY(wxImageArray);
+
+#include <wx/arrimpl.cpp> // 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; i<m_nFrames; i++)
+            {
+                stream.Read(&FCC2, 4);
+                m_info[i].m_delay = wxINT32_SWAP_ON_BE(FCC2) * 1000 / 60;
+            }
+        }
+        else if ( FCC1 == seq32 )
+        {
+            // did we already process the anih32 chunk?
+            if (m_nFrames == 0)
+                return false;       // seq chunks should always be placed after anih chunk
+
+            wxASSERT(m_info.GetCount() == m_nFrames);
+            for (size_t i=0; i<m_nFrames; i++)
+            {
+                stream.Read(&FCC2, 4);
+                m_info[i].m_imageIndex = wxINT32_SWAP_ON_BE(FCC2);
+            }
+        }
+        else if ( FCC1 == ico32 )
+        {
+            // use DoLoadFile() and not LoadFile()!
+            wxImage image;
+            if (!sm_handler.DoLoadFile(&image, stream, false /* verbose */, -1))
+                return false;
+
+            m_images.Add(image);
+        }
+        else
+            stream.SeekI(stream.TellI() + datalen);
+
+        // try to read next data chunk:
+        stream.Read(&FCC1, 4);
+    }
+
+    if (m_nFrames==0)
+        return false;
+
+    if (m_nFrames==m_images.GetCount())
+    {
+        // if no SEQ chunk is available, display the frames in the order
+        // they were loaded
+        for (size_t i=0; i<m_nFrames; i++)
+            if (m_info[i].m_imageIndex == -1)
+                m_info[i].m_imageIndex = i;
+    }
+
+    // if some frame has an invalid delay, use the global delay given in the
+    // ANI header
+    for (size_t i=0; i<m_nFrames; i++)
+        if (m_info[i].m_delay == 0)
+            m_info[i].m_delay = globaldelay;
+
+    // if the header did not contain a valid frame size, try to grab
+    // it from the size of the first frame (all frames are of the same size)
+    if (m_szAnimation.GetWidth() == 0 ||
+        m_szAnimation.GetHeight() == 0)
+        m_szAnimation = wxSize(m_images[0].GetWidth(), m_images[0].GetHeight());
+
+    return m_szAnimation!=wxDefaultSize;
+}
+
+#endif // wxUSE_STREAMS && wxUSE_GIF
diff --git a/src/common/animatecmn.cpp b/src/common/animatecmn.cpp
new file mode 100644 (file)
index 0000000..d3b6986
--- /dev/null
@@ -0,0 +1,35 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        src/common/animatecmn.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"
+
+const wxChar wxAnimationCtrlNameStr[] = wxT("animationctrl");
+
+// global object
+wxAnimation wxNullAnimation;
+
+//wxIMPLEMENT_HANDLER_LIST_MANAGER(wxAnimation,
+IMPLEMENT_ABSTRACT_CLASS(wxAnimationBase, wxObject)
+IMPLEMENT_ABSTRACT_CLASS(wxAnimationCtrlBase, wxControl)
+
+
+
+#endif      // wxUSE_ANIMATIONCTRL
index 93cccbabb86af6cb124d94edcf45251e67220b8a..ab507b8d7f860fc7211306bba7185f8f52b54af1 100644 (file)
 #include "wx/gifdecod.h"
 
 
+
+//---------------------------------------------------------------------------
+// GIFImage
+//---------------------------------------------------------------------------
+
+// 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 index (-1 = none) */
+    wxAnimationDisposal disposal;   /* disposal method */
+    long delay;                     /* delay in ms (-1 = unused) */
+    unsigned char *p;               /* bitmap */
+    unsigned char *pal;             /* palette */
+    unsigned int ncolours;          /* number of colours */
+
+    DECLARE_NO_COPY_CLASS(GIFImage)
+};
+
+
+
 //---------------------------------------------------------------------------
 // GIFImage constructor
 //---------------------------------------------------------------------------
@@ -36,33 +64,19 @@ GIFImage::GIFImage()
     left = 0;
     top = 0;
     transparent = 0;
-    disposal = 0;
+    disposal = wxANIM_DONOTREMOVE;
     delay = -1;
     p = (unsigned char *) NULL;
     pal = (unsigned char *) NULL;
     ncolours = 0;
-    next = (GIFImage *) NULL;
-    prev = (GIFImage *) NULL;
 }
 
 //---------------------------------------------------------------------------
 // wxGIFDecoder constructor and destructor
 //---------------------------------------------------------------------------
 
-wxGIFDecoder::wxGIFDecoder(wxInputStream *s, bool anim)
+wxGIFDecoder::wxGIFDecoder()
 {
-    m_f    = s;
-    m_anim = anim;
-
-    m_background = -1;
-    m_screenw = 0;
-    m_screenh = 0;
-
-    m_pimage  = NULL;
-    m_pfirst  = NULL;
-    m_plast   = NULL;
-    m_image   = 0;
-    m_nimages = 0;
 }
 
 wxGIFDecoder::~wxGIFDecoder()
@@ -72,24 +86,17 @@ wxGIFDecoder::~wxGIFDecoder()
 
 void wxGIFDecoder::Destroy()
 {
-    GIFImage *pimg, *paux;
-
-    pimg = m_pfirst;
-
-    while (pimg != NULL)
+    wxASSERT(m_nFrames==m_frames.GetCount());
+    for (size_t i=0; i<m_nFrames; i++)
     {
-        paux = pimg->next;
-        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 */
index c2e8e6599f6b4895dc69a940771a8dfe529d35ec..5f45ba920795ad8182929baeaf165edb566d44ee 100644 (file)
@@ -32,6 +32,7 @@
 #include "wx/filefn.h"
 #include "wx/wfstream.h"
 #include "wx/quantize.h"
+#include "wx/anidecod.h"
 
 // For memcpy
 #include <string.h>
@@ -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
index 69a0fbb09479c0415189da12f06cb3ab1e9f861f..22a8dc04cca7c1ec2b2172f9a26a0c874510faaf 100644 (file)
@@ -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 (file)
index 0000000..2ab4965
--- /dev/null
@@ -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/listimpl.cpp>
+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 (file)
index 0000000..df942e3
--- /dev/null
@@ -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 <gtk/gtk.h>
+#include <gtk/gtkimage.h>
+
+
+// ============================================================================
+// 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
index 41c8a636df29dcf8c9f1c111f81f6df3ea9e3a91..80d6dba87b7092945582ef8fa69d9d4b75dd3855 100644 (file)
@@ -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)
index 4dbdc4af165fc9eb722e1928174ffbcc4dde0a0f..45379d790226818185fa37340755ac787b3e4833 100644 (file)
@@ -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