Support gles animation.
authorhschang <chang@dev3>
Thu, 5 Feb 2015 02:34:27 +0000 (11:34 +0900)
committerhschang <chang@dev3>
Fri, 6 Feb 2015 01:12:07 +0000 (10:12 +0900)
27 files changed:
configure.ac
lib/dvb/pmt.cpp
lib/gdi/gfbdc.cpp
lib/gdi/grc.cpp
lib/gdi/grc.h
lib/gui/ewidgetdesktop.cpp
lib/gui/ewidgetdesktop.h
lib/gui/ewindow.cpp
lib/gui/ewindow.h
lib/python/Components/VolumeControl.py
lib/python/Components/config.py
lib/python/Plugins/Extensions/HbbTV/browser.py
lib/python/Plugins/Extensions/HbbTV/plugin.py
lib/python/Plugins/SystemPlugins/AnimationSetup/Makefile.am [new file with mode: 0644]
lib/python/Plugins/SystemPlugins/AnimationSetup/__init__.py [new file with mode: 0644]
lib/python/Plugins/SystemPlugins/AnimationSetup/meta/Makefile.am [new file with mode: 0644]
lib/python/Plugins/SystemPlugins/AnimationSetup/meta/plugin_animationsetup.xml [new file with mode: 0644]
lib/python/Plugins/SystemPlugins/AnimationSetup/plugin.py [new file with mode: 0644]
lib/python/Plugins/SystemPlugins/Makefile.am
lib/python/Screens/ChannelSelection.py
lib/python/Screens/InfoBarGenerics.py
lib/python/Screens/Screen.py
lib/python/Screens/Wizard.py
lib/python/enigma_python.i
main/Makefile.am
main/enigma.cpp
skin.py

index 6063799..89cb2be 100644 (file)
@@ -65,6 +65,15 @@ if test x"$setrighthalfvfdskin" != xno ; then
 fi
 AM_CONDITIONAL(SET_RIGHT_HALF_VFD_SKIN, test x"$setrighthalfvfdskin" != xno)
 
 fi
 AM_CONDITIONAL(SET_RIGHT_HALF_VFD_SKIN, test x"$setrighthalfvfdskin" != xno)
 
+AC_ARG_WITH(libvugles2,
+       AS_HELP_STRING([--with-libvugles2],[use libvugles2, yes or no]),
+       [with_libvugles2=$withval],[with_libvugles2=no])
+if test "$with_libvugles2" = "yes"; then
+       PKG_CHECK_MODULES(LIBVUGLES2, [libvugles2])
+       GLES_CFLAGS="-DUSE_LIBVUGLES2"
+fi
+AM_CONDITIONAL(HAVE_LIBVUGLES2, test "$with_libvugles2" = "yes")
+
 AC_ARG_WITH(libsdl,
        AS_HELP_STRING([--with-libsdl],[use libsdl, yes or no]),
        [with_libsdl=$withval],[with_libsdl=no])
 AC_ARG_WITH(libsdl,
        AS_HELP_STRING([--with-libsdl],[use libsdl, yes or no]),
        [with_libsdl=$withval],[with_libsdl=no])
@@ -116,7 +125,7 @@ AC_SUBST(ENIGMA2_CFLAGS)
 
 CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS"
 CFLAGS="$CFLAGS $DEBUG_CFLAGS -Wall"
 
 CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS"
 CFLAGS="$CFLAGS $DEBUG_CFLAGS -Wall"
-CXXFLAGS="$CXXFLAGS $DEBUG_CFLAGS -Wall $BASE_CFLAGS $ENIGMA2_CFLAGS $PTHREAD_CFLAGS"
+CXXFLAGS="$CXXFLAGS $DEBUG_CFLAGS -Wall $BASE_CFLAGS $ENIGMA2_CFLAGS $PTHREAD_CFLAGS $GLES_CFLAGS"
 
 AC_CONFIG_FILES([
 Makefile
 
 AC_CONFIG_FILES([
 Makefile
@@ -284,6 +293,8 @@ lib/python/Plugins/SystemPlugins/NetDrive/Makefile
 lib/python/Plugins/SystemPlugins/NetDrive/meta/Makefile
 lib/python/Plugins/SystemPlugins/AudioEffect/Makefile
 lib/python/Plugins/SystemPlugins/AudioEffect/meta/Makefile
 lib/python/Plugins/SystemPlugins/NetDrive/meta/Makefile
 lib/python/Plugins/SystemPlugins/AudioEffect/Makefile
 lib/python/Plugins/SystemPlugins/AudioEffect/meta/Makefile
+lib/python/Plugins/SystemPlugins/AnimationSetup/Makefile
+lib/python/Plugins/SystemPlugins/AnimationSetup/meta/Makefile
 lib/python/Tools/Makefile
 lib/service/Makefile
 lib/components/Makefile
 lib/python/Tools/Makefile
 lib/service/Makefile
 lib/components/Makefile
index 96645a1..febfd78 100644 (file)
@@ -169,6 +169,7 @@ void eDVBServicePMTHandler::PATready(int)
                        ProgramAssociationConstIterator program;
                        for (program = pat.getPrograms()->begin(); pmtpid == -1 && program != pat.getPrograms()->end(); ++program)
                        {
                        ProgramAssociationConstIterator program;
                        for (program = pat.getPrograms()->begin(); pmtpid == -1 && program != pat.getPrograms()->end(); ++program)
                        {
+                               ++cnt;
                                if (eServiceID((*program)->getProgramNumber()) == m_reference.getServiceID())
                                        pmtpid = (*program)->getProgramMapPid();
                                if (++cnt == 1 && pmtpid_single == -1 && pmtpid == -1)
                                if (eServiceID((*program)->getProgramNumber()) == m_reference.getServiceID())
                                        pmtpid = (*program)->getProgramMapPid();
                                if (++cnt == 1 && pmtpid_single == -1 && pmtpid == -1)
index a4f65eb..d3cc55f 100644 (file)
@@ -6,6 +6,9 @@
 #include <lib/gdi/accel.h>
 
 #include <time.h>
 #include <lib/gdi/accel.h>
 
 #include <time.h>
+#ifdef USE_LIBVUGLES2
+#include <vuplus_gles.h>
+#endif
 
 gFBDC::gFBDC()
 {
 
 gFBDC::gFBDC()
 {
@@ -125,8 +128,38 @@ void gFBDC::exec(const gOpcode *o)
                break;
        }
        case gOpcode::flush:
                break;
        }
        case gOpcode::flush:
+#ifdef USE_LIBVUGLES2
+               if (gles_is_animation())
+                       gles_do_animation();
+               else
+                       fb->blit();
+#else
                fb->blit();
                fb->blit();
+#endif
+               break;
+       case gOpcode::sendShow:
+       {
+#ifdef USE_LIBVUGLES2
+               gles_set_buffer((unsigned int *)surface.data);
+               gles_set_animation(1, o->parm.setShowHideInfo->point.x(), o->parm.setShowHideInfo->point.y(), o->parm.setShowHideInfo->size.width(), o->parm.setShowHideInfo->size.height());
+#endif
+               break;
+       }
+       case gOpcode::sendHide:
+       {
+#ifdef USE_LIBVUGLES2
+               gles_set_buffer((unsigned int *)surface.data);
+               gles_set_animation(0, o->parm.setShowHideInfo->point.x(), o->parm.setShowHideInfo->point.y(), o->parm.setShowHideInfo->size.width(), o->parm.setShowHideInfo->size.height());
+#endif
                break;
                break;
+       }
+#ifdef USE_LIBVUGLES2
+       case gOpcode::setView:
+       {
+               gles_viewport(o->parm.setViewInfo->size.width(), o->parm.setViewInfo->size.height(), fb->Stride());
+               break;
+       }
+#endif
        default:
                gDC::exec(o);
                break;
        default:
                gDC::exec(o);
                break;
index a45b3b1..ce33171 100644 (file)
@@ -3,6 +3,9 @@
 #include <lib/gdi/font.h>
 #include <lib/base/init.h>
 #include <lib/base/init_num.h>
 #include <lib/gdi/font.h>
 #include <lib/base/init.h>
 #include <lib/base/init_num.h>
+#ifdef USE_LIBVUGLES2
+#include <vuplus_gles.h>
+#endif
 
 #ifndef SYNC_PAINT
 void *gRC::thread_wrapper(void *ptr)
 
 #ifndef SYNC_PAINT
 void *gRC::thread_wrapper(void *ptr)
@@ -94,6 +97,12 @@ void gRC::submit(const gOpcode &o)
 void *gRC::thread()
 {
        int need_notify = 0;
 void *gRC::thread()
 {
        int need_notify = 0;
+#ifdef USE_LIBVUGLES2
+       if (gles_open()) {
+               gles_state_open();
+               gles_viewport(720, 576, 720 * 4);
+       }
+#endif
 #ifndef SYNC_PAINT
        while (1)
        {
 #ifndef SYNC_PAINT
        while (1)
        {
@@ -185,6 +194,10 @@ void *gRC::thread()
 #endif
                }
        }
 #endif
                }
        }
+#ifdef USE_LIBVUGLES2
+       gles_state_close();
+       gles_close();
+#endif
 #ifndef SYNC_PAINT
        pthread_exit(0);
 #endif
 #ifndef SYNC_PAINT
        pthread_exit(0);
 #endif
@@ -594,6 +607,46 @@ void gPainter::end()
                return;
 }
 
                return;
 }
 
+void gPainter::sendShow(ePoint point, eSize size)
+{
+       if ( m_dc->islocked() )
+               return;
+       gOpcode o;
+       o.opcode=gOpcode::sendShow;
+       o.dc = m_dc.grabRef();
+       o.parm.setShowHideInfo = new gOpcode::para::psetShowHideInfo;
+       o.parm.setShowHideInfo->point = point;
+       o.parm.setShowHideInfo->size = size;
+       m_rc->submit(o);
+}
+
+void gPainter::sendHide(ePoint point, eSize size)
+{
+       if ( m_dc->islocked() )
+               return;
+       gOpcode o;
+       o.opcode=gOpcode::sendHide;
+       o.dc = m_dc.grabRef();
+       o.parm.setShowHideInfo = new gOpcode::para::psetShowHideInfo;
+       o.parm.setShowHideInfo->point = point;
+       o.parm.setShowHideInfo->size = size;
+       m_rc->submit(o);
+}
+
+#ifdef USE_LIBVUGLES2
+void gPainter::setView(eSize size)
+{
+       if ( m_dc->islocked() )
+               return;
+       gOpcode o;
+       o.opcode=gOpcode::setView;
+       o.dc = m_dc.grabRef();
+       o.parm.setViewInfo = new gOpcode::para::psetViewInfo;
+       o.parm.setViewInfo->size = size;
+       m_rc->submit(o);
+}
+#endif
+
 gDC::gDC()
 {
        m_spinner_pic = 0;
 gDC::gDC()
 {
        m_spinner_pic = 0;
@@ -781,6 +834,14 @@ void gDC::exec(const gOpcode *o)
                break;
        case gOpcode::flush:
                break;
                break;
        case gOpcode::flush:
                break;
+       case gOpcode::sendShow:
+               break;
+       case gOpcode::sendHide:
+               break;
+#ifdef USE_LIBVUGLES2
+       case gOpcode::setView:
+               break;
+#endif
        case gOpcode::enableSpinner:
                enableSpinner();
                break;
        case gOpcode::enableSpinner:
                enableSpinner();
                break;
index 38caa10..16f7db7 100644 (file)
@@ -64,6 +64,11 @@ struct gOpcode
                shutdown,
                
                setCompositing,
                shutdown,
                
                setCompositing,
+               sendShow,
+               sendHide,
+#ifdef USE_LIBVUGLES2
+               setView,
+#endif
        } opcode;
 
        gDC *dc;
        } opcode;
 
        gDC *dc;
@@ -142,6 +147,18 @@ struct gOpcode
                } *setOffset;
                
                gCompositingData *setCompositing;
                } *setOffset;
                
                gCompositingData *setCompositing;
+
+               struct psetShowHideInfo
+               {
+                       ePoint point;
+                       eSize size;
+               } *setShowHideInfo;
+#ifdef USE_LIBVUGLES2
+               struct psetViewInfo
+               {
+                       eSize size;
+               } *setViewInfo;
+#endif
        } parm;
 };
 
        } parm;
 };
 
@@ -265,6 +282,11 @@ public:
        void setCompositing(gCompositingData *comp);
        
        void flush();
        void setCompositing(gCompositingData *comp);
        
        void flush();
+       void sendShow(ePoint point, eSize size);
+       void sendHide(ePoint point, eSize size);
+#ifdef USE_LIBVUGLES2
+       void setView(eSize size);
+#endif
 };
 
 class gDC: public iObject
 };
 
 class gDC: public iObject
index 08bd047..1951b61 100644 (file)
@@ -521,4 +521,26 @@ void eWidgetDesktop::resize(eSize size)
 {
        m_screen.m_dirty_region = gRegion(eRect(ePoint(0, 0), size));
        m_screen.m_screen_size = size;
 {
        m_screen.m_dirty_region = gRegion(eRect(ePoint(0, 0), size));
        m_screen.m_screen_size = size;
+#ifdef USE_LIBVUGLES2
+       gPainter painter(m_screen.m_dc);
+       painter.setView(size);
+#endif
+}
+
+void eWidgetDesktop::sendShow(ePoint point, eSize size)
+{
+       if(m_style_id!=0)
+               return;
+
+       gPainter painter(m_screen.m_dc);
+       painter.sendShow(point, size);
+}
+
+void eWidgetDesktop::sendHide(ePoint point, eSize size)
+{
+       if(m_style_id!=0)
+               return;
+
+       gPainter painter(m_screen.m_dc);
+       painter.sendHide(point, size);
 }
 }
index 4ea5b57..29bce1c 100644 (file)
@@ -73,6 +73,8 @@ public:
        
        void resize(eSize size);
        eSize size() const { return m_screen.m_screen_size; }
        
        void resize(eSize size);
        eSize size() const { return m_screen.m_screen_size; }
+       void sendShow(ePoint point, eSize size);
+       void sendHide(ePoint point, eSize size);
 private:
        ePtrList<eWidget> m_root;
        void calcWidgetClipRegion(eWidget *widget, gRegion &parent_visible);
 private:
        ePtrList<eWidget> m_root;
        void calcWidgetClipRegion(eWidget *widget, gRegion &parent_visible);
index 83e65ec..39a3f24 100644 (file)
@@ -9,6 +9,7 @@
 eWindow::eWindow(eWidgetDesktop *desktop, int z): eWidget(0)
 {
        m_flags = 0;
 eWindow::eWindow(eWidgetDesktop *desktop, int z): eWidget(0)
 {
        m_flags = 0;
+       m_animation_mode = 0x11;
        m_desktop = desktop;
                /* ask style manager for current style */
        ePtr<eWindowStyleManager> mgr;
        m_desktop = desktop;
                /* ask style manager for current style */
        ePtr<eWindowStyleManager> mgr;
@@ -114,3 +115,27 @@ int eWindow::event(int event, void *data, void *data2)
        return eWidget::event(event, data, data2);
 }
 
        return eWidget::event(event, data, data2);
 }
 
+void eWindow::show()
+{
+       if (m_animation_mode & 0x01)
+               m_desktop->sendShow(position(), size());
+       eWidget::show();
+}
+
+void eWindow::hide()
+{
+       if (m_animation_mode & 0x10)
+               m_desktop->sendHide(position(), size());
+       eWidget::hide();
+}
+
+void eWindow::setAnimationMode(int mode)
+{
+       /*
+        * 0x00 = animation off
+        * 0x01 = show on
+        * 0x10 = hide on
+        * 0x11 = animation on
+        */
+       m_animation_mode = mode;
+}
index 265f512..ee1e7d8 100644 (file)
@@ -15,6 +15,9 @@ public:
        void setTitle(const std::string &string);
        std::string getTitle() const;
        eWidget *child() { return m_child; }
        void setTitle(const std::string &string);
        std::string getTitle() const;
        eWidget *child() { return m_child; }
+
+       void show();
+       void hide();
        
        enum {
                wfNoBorder = 1
        
        enum {
                wfNoBorder = 1
@@ -24,6 +27,7 @@ public:
        
        void setFlag(int flags);
        void clearFlag(int flags);
        
        void setFlag(int flags);
        void clearFlag(int flags);
+       void setAnimationMode(int mode);
 protected:
        enum eWindowEvents
        {
 protected:
        enum eWindowEvents
        {
@@ -35,6 +39,7 @@ private:
        eWidget *m_child;
        int m_flags;
        eWidgetDesktop *m_desktop;
        eWidget *m_child;
        int m_flags;
        eWidgetDesktop *m_desktop;
+       int m_animation_mode;
 };
 
 #endif
 };
 
 #endif
index 3810292..e42e06c 100644 (file)
@@ -24,7 +24,9 @@ class VolumeControl:
                config.audio.volume = ConfigInteger(default = 100, limits = (0, 100))
 
                self.volumeDialog = session.instantiateDialog(Volume)
                config.audio.volume = ConfigInteger(default = 100, limits = (0, 100))
 
                self.volumeDialog = session.instantiateDialog(Volume)
+               self.volumeDialog.setAnimationMode(0)
                self.muteDialog = session.instantiateDialog(Mute)
                self.muteDialog = session.instantiateDialog(Mute)
+               self.muteDialog.setAnimationMode(0)
 
                self.hideVolTimer = eTimer()
                self.hideVolTimer.callback.append(self.volHide)
 
                self.hideVolTimer = eTimer()
                self.hideVolTimer.callback.append(self.volHide)
index e6abaa4..e27de86 100755 (executable)
@@ -1068,6 +1068,7 @@ class ConfigText(ConfigElement, NumericalTextInput):
                if session is not None:
                        from Screens.NumericalTextInputHelpDialog import NumericalTextInputHelpDialog
                        self.help_window = session.instantiateDialog(NumericalTextInputHelpDialog, self)
                if session is not None:
                        from Screens.NumericalTextInputHelpDialog import NumericalTextInputHelpDialog
                        self.help_window = session.instantiateDialog(NumericalTextInputHelpDialog, self)
+                       self.help_window.setAnimationMode(0)
                        self.help_window.show()
 
        def onDeselect(self, session):
                        self.help_window.show()
 
        def onDeselect(self, session):
index e7e7386..73af39e 100644 (file)
@@ -296,8 +296,9 @@ class BrowserPreferenceWindow(ConfigListScreen, Screen):
                        mode = 1
                self._keymapType = self.menuItemKeyboardLayout.value
                BrowserSetting().setData(url, mode, self._keymapType)
                        mode = 1
                self._keymapType = self.menuItemKeyboardLayout.value
                BrowserSetting().setData(url, mode, self._keymapType)
-
-               VBController.command('CONTROL_RELOAD_KEYMAP')
+               # send contorller
+               #command_util = getCommandUtil()
+               #command_util.sendCommand('OP_BROWSER_NEED_RELOAD_KEYMAP')
                self.close()
 
        def keyRed(self):
                self.close()
 
        def keyRed(self):
index 1dd214c..22d5f69 100644 (file)
@@ -53,7 +53,6 @@ _OPCODE_LIST = [
                'OOIF_BROADCAST_PLAY',
                'OOIF_BROADCAST_STOP',
                'OOIF_BROADCAST_CHECK',
                'OOIF_BROADCAST_PLAY',
                'OOIF_BROADCAST_STOP',
                'OOIF_BROADCAST_CHECK',
-               'CONTROL_RELOAD_KEYMAP',
                'OPCODE_END'
                ]
 
                'OPCODE_END'
                ]
 
diff --git a/lib/python/Plugins/SystemPlugins/AnimationSetup/Makefile.am b/lib/python/Plugins/SystemPlugins/AnimationSetup/Makefile.am
new file mode 100644 (file)
index 0000000..6530a96
--- /dev/null
@@ -0,0 +1,7 @@
+installdir = $(pkglibdir)/python/Plugins/SystemPlugins/AnimationSetup
+
+SUBDIRS = meta
+
+install_PYTHON =       \
+       __init__.py \
+       plugin.py
diff --git a/lib/python/Plugins/SystemPlugins/AnimationSetup/__init__.py b/lib/python/Plugins/SystemPlugins/AnimationSetup/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/lib/python/Plugins/SystemPlugins/AnimationSetup/meta/Makefile.am b/lib/python/Plugins/SystemPlugins/AnimationSetup/meta/Makefile.am
new file mode 100644 (file)
index 0000000..a2721f5
--- /dev/null
@@ -0,0 +1,3 @@
+installdir = $(datadir)/meta
+
+dist_install_DATA = plugin_animationsetup.xml
diff --git a/lib/python/Plugins/SystemPlugins/AnimationSetup/meta/plugin_animationsetup.xml b/lib/python/Plugins/SystemPlugins/AnimationSetup/meta/plugin_animationsetup.xml
new file mode 100644 (file)
index 0000000..7ea505e
--- /dev/null
@@ -0,0 +1,15 @@
+<default>
+       <prerequisites>
+               <tag type="System" />
+       </prerequisites>
+       <info>
+               <author>smlee</author>
+               <name>Animation Setup</name>
+               <packagename>enigma2-plugin-systemplugins-animationsetup</packagename>
+               <shortdescription>Animation Setup</shortdescription>
+               <description>Animation Setup</description>
+       </info>
+       <files type="package">
+               <file type="package" name="enigma2-plugin-systemplugins-animationsetup" />
+       </files>
+</default>
diff --git a/lib/python/Plugins/SystemPlugins/AnimationSetup/plugin.py b/lib/python/Plugins/SystemPlugins/AnimationSetup/plugin.py
new file mode 100644 (file)
index 0000000..f289b34
--- /dev/null
@@ -0,0 +1,247 @@
+from Screens.Screen import Screen
+from Screens.MessageBox import MessageBox
+from Components.ActionMap import ActionMap
+from Components.ConfigList import ConfigListScreen
+from Components.MenuList import MenuList
+from Components.Sources.StaticText import StaticText
+from Components.config import config, ConfigNumber, ConfigSelectionNumber, getConfigListEntry
+from Plugins.Plugin import PluginDescriptor
+
+from enigma import setAnimation_current, setAnimation_speed
+
+# default = slide to left
+g_default = {
+        "current": 6,
+        "speed"  : 20,
+}
+g_max_speed = 30
+
+g_animation_paused = False
+g_orig_show = None
+g_orig_doClose = None
+
+config.misc.window_animation_default = ConfigNumber(default=g_default["current"])
+config.misc.window_animation_speed = ConfigSelectionNumber(1, g_max_speed, 1, default=g_default["speed"])
+
+class AnimationSetupConfig(ConfigListScreen, Screen):
+       skin=   """
+               <screen position="center,center" size="600,140" title="Animation Settings">
+                       <widget name="config" position="0,0" size="600,100" scrollbarMode="showOnDemand" />
+
+                       <ePixmap pixmap="skin_default/buttons/red.png" position="0,100" size="140,40" alphatest="on" />
+                       <ePixmap pixmap="skin_default/buttons/green.png" position="140,100" size="140,40" alphatest="on" />
+                       <ePixmap pixmap="skin_default/buttons/yellow.png" position="280,100" size="140,40" alphatest="on" />
+
+                       <widget source="key_red" render="Label" position="0,100" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" foregroundColor="#ffffff" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="key_green" render="Label" position="140,100" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" foregroundColor="#ffffff" backgroundColor="#1f771f" transparent="1" />
+                       <widget source="key_yellow" render="Label" position="280,100" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" foregroundColor="#ffffff" backgroundColor="#a08500" transparent="1" />
+               </screen>
+               """
+
+       def __init__(self, session):
+               self.session = session
+               self.entrylist = []
+
+               Screen.__init__(self, session)
+               ConfigListScreen.__init__(self, self.entrylist)
+
+               self["actions"] = ActionMap(["OkCancelActions", "ColorActions",], {
+                       "ok"     : self.keyGreen,
+                       "green"  : self.keyGreen,
+                       "yellow" : self.keyYellow,
+                       "red"    : self.keyRed,
+                       "cancel" : self.keyRed,
+               }, -2)
+               self["key_red"]   = StaticText(_("Cancel"))
+               self["key_green"] = StaticText(_("Save"))
+               self["key_yellow"] = StaticText(_("Default"))
+
+               self.makeConfigList()
+               self.onLayoutFinish.append(self.layoutFinished)
+
+       def layoutFinished(self):
+               self.setTitle(_('Animation Setup'))
+
+       def keyGreen(self):
+               config.misc.window_animation_speed.save()
+                setAnimation_speed(int(config.misc.window_animation_speed.value))
+               self.close()
+
+       def keyRed(self):
+               config.misc.window_animation_speed.cancel()
+               self.close()
+
+       def keyYellow(self):
+                global g_default
+                config.misc.window_animation_speed.value = g_default["speed"]
+               self.makeConfigList()
+
+       def keyLeft(self):
+               ConfigListScreen.keyLeft(self)
+
+       def keyRight(self):
+               ConfigListScreen.keyRight(self)
+
+       def makeConfigList(self):
+               self.entrylist = []
+
+               entrySpeed = getConfigListEntry(_("Animation Speed"), config.misc.window_animation_speed)
+               self.entrylist.append(entrySpeed)
+               self["config"].list = self.entrylist
+               self["config"].l.setList(self.entrylist)
+
+
+class AnimationSetupScreen(Screen):
+       animationSetupItems = [
+               {"idx":0, "name":_("Disable Animations")},
+               {"idx":1, "name":_("Simple fade")},
+               {"idx":2, "name":_("Grow drop")},
+               {"idx":3, "name":_("Grow from left")},
+               {"idx":4, "name":_("Popup")},
+               {"idx":5, "name":_("Slide drop")},
+               {"idx":6, "name":_("Slide left to right")},
+               {"idx":7, "name":_("Slide top to bottom")},
+               {"idx":8, "name":_("Stripes")},
+       ]
+
+       skin = """
+               <screen name="AnimationSetup" position="center,center" size="580,400" title="Animation Setup">
+                       <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" zPosition="1" alphatest="on" />
+                       <ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" zPosition="1" alphatest="on" />
+                       <ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" size="140,40" zPosition="1" alphatest="on" />
+                       <ePixmap pixmap="skin_default/buttons/blue.png" position="420,0" size="140,40" zPosition="1" alphatest="on" />
+
+                       <widget source="key_red" render="Label" position="0,0" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" foregroundColor="#ffffff" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="key_green" render="Label" position="140,0" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" foregroundColor="#ffffff" backgroundColor="#1f771f" transparent="1" />
+                       <widget source="key_yellow" render="Label" position="280,0" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" foregroundColor="#ffffff" backgroundColor="#a08500" transparent="1" />
+                       <widget source="key_blue" render="Label" position="420,0" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" foregroundColor="#ffffff" backgroundColor="#18188b" transparent="1" />
+
+                       <widget name="list" position="10,60" size="560,364" scrollbarMode="showOnDemand" />
+                       <widget source="introduction" render="Label" position="0,370" size="560,40" zPosition="10" font="Regular;20" valign="center" backgroundColor="#25062748" transparent="1" />
+               </screen>"""
+
+       def __init__(self, session):
+
+               self.skin = AnimationSetupScreen.skin
+               Screen.__init__(self, session)
+
+               self.animationList = []
+
+               self["introduction"] = StaticText(_("* current animation"))
+               self["key_red"] = StaticText(_("Cancel"))
+               self["key_green"] = StaticText(_("Save"))
+               self["key_yellow"] = StaticText(_("Setting"))
+               self["key_blue"] = StaticText(_("Preview"))
+
+               self["actions"] = ActionMap(["SetupActions", "ColorActions"],
+                       {
+                               "cancel": self.keyclose,
+                               "save": self.ok,
+                               "ok" : self.ok,
+                               "yellow": self.config,
+                               "blue": self.preview
+                       }, -3)
+
+               self["list"] = MenuList(self.animationList)
+
+               self.onLayoutFinish.append(self.layoutFinished)
+
+       def layoutFinished(self):
+               l = []
+               for x in self.animationSetupItems:
+                       key = x.get("idx", 0)
+                       name = x.get("name", "??")
+                       if key == config.misc.window_animation_default.value:
+                               name = "* %s" % (name)
+                       l.append( (name, key) )
+
+               self["list"].setList(l)
+
+       def ok(self):
+               current = self["list"].getCurrent()
+               if current:
+                       key = current[1]
+                       config.misc.window_animation_default.value = key
+                       config.misc.window_animation_default.save()
+                       setAnimation_current(key)
+               self.close()
+
+        def keyclose(self):
+               setAnimation_current(config.misc.window_animation_default.value)
+                setAnimation_speed(int(config.misc.window_animation_speed.value))
+               self.close()
+
+       def config(self):
+                self.session.open(AnimationSetupConfig)
+
+       def preview(self):
+               current = self["list"].getCurrent()
+               if current:
+                       global g_animation_paused
+                       tmp = g_animation_paused
+                       g_animation_paused = False
+
+                       setAnimation_current(current[1])
+                       self.session.open(MessageBox, current[0], MessageBox.TYPE_INFO, timeout=3)
+                       g_animation_paused = tmp
+
+def checkAttrib(self, paused):
+       global g_animation_paused
+       if g_animation_paused is paused and self.skinAttributes is not None:
+               for (attr, value) in self.skinAttributes:
+                       if attr == "animationPaused" and value in ("1", "on"):
+                               return True
+       return False
+
+def screen_show(self):
+       global g_animation_paused
+       if g_animation_paused:
+               setAnimation_current(0)
+
+       g_orig_show(self)
+
+       if checkAttrib(self, False):
+               g_animation_paused = True
+
+def screen_doClose(self):
+       global g_animation_paused
+       if checkAttrib(self, True):
+               g_animation_paused = False
+               setAnimation_current(config.misc.window_animation_default.value)
+       g_orig_doClose(self)
+
+def animationSetupMain(session, **kwargs):
+       session.open(AnimationSetupScreen)
+
+def startAnimationSetup(menuid):
+       if menuid != "system":
+               return []
+
+       return [( _("Animations"), animationSetupMain, "animation_setup", None)]
+
+def sessionAnimationSetup(session, reason, **kwargs):
+       setAnimation_current(config.misc.window_animation_default.value)
+       setAnimation_speed(int(config.misc.window_animation_speed.value))
+
+       global g_orig_show, g_orig_doClose
+       if g_orig_show is None:
+               g_orig_show = Screen.show
+       if g_orig_doClose is None:
+               g_orig_doClose = Screen.doClose
+       Screen.show = screen_show
+       Screen.doClose = screen_doClose
+
+def Plugins(**kwargs):
+       plugin_list = [
+               PluginDescriptor(
+                       name = "Animations",
+                       description = "Setup UI animations",
+                       where = PluginDescriptor.WHERE_MENU,
+                       needsRestart = False,
+                       fnc = startAnimationSetup),
+               PluginDescriptor(
+                       where = PluginDescriptor.WHERE_SESSIONSTART,
+                       needsRestart = False,
+                       fnc = sessionAnimationSetup),
+       ]
+       return plugin_list;
index c7109e4..cf3498b 100755 (executable)
@@ -7,7 +7,7 @@ SUBDIRS = SoftwareManager FrontprocessorUpgrade PositionerSetup Satfinder \
        TempFanControl Fancontrol FPGAUpgrade WirelessLanSetup ManualFancontrol \
        Blindscan RemoteControlCode UI3DSetup UIPositionSetup HDMICEC LEDBrightnessSetup \
        FirmwareUpgrade CrashReport 3GModemManager WirelessAccessPoint ZappingModeSelection \
        TempFanControl Fancontrol FPGAUpgrade WirelessLanSetup ManualFancontrol \
        Blindscan RemoteControlCode UI3DSetup UIPositionSetup HDMICEC LEDBrightnessSetup \
        FirmwareUpgrade CrashReport 3GModemManager WirelessAccessPoint ZappingModeSelection \
-       DeviceManager TransCodingSetup WOLSetup NetDrive AudioEffect
+       DeviceManager TransCodingSetup WOLSetup NetDrive AudioEffect AnimationSetup
 
 install_PYTHON =       \
        __init__.py
 
 install_PYTHON =       \
        __init__.py
index 688fe50..6813381 100755 (executable)
@@ -231,6 +231,7 @@ class ChannelContextMenu(Screen):
                if self.session.pipshown:
                        del self.session.pip
                self.session.pip = self.session.instantiateDialog(PictureInPicture)
                if self.session.pipshown:
                        del self.session.pip
                self.session.pip = self.session.instantiateDialog(PictureInPicture)
+               self.session.pip.setAnimationMode(0)
                self.session.pip.show()
                newservice = self.csel.servicelist.getCurrent()
                if self.session.pip.playService(newservice):
                self.session.pip.show()
                newservice = self.csel.servicelist.getCurrent()
                if self.session.pip.playService(newservice):
@@ -1431,6 +1432,7 @@ class ChannelSelectionRadio(ChannelSelectionBase, ChannelSelectionEdit, ChannelS
                self.onLayoutFinish.append(self.onCreate)
 
                self.info = session.instantiateDialog(RadioInfoBar) # our simple infobar
                self.onLayoutFinish.append(self.onCreate)
 
                self.info = session.instantiateDialog(RadioInfoBar) # our simple infobar
+               self.info.setAnimationMode(0)
 
                self["actions"] = ActionMap(["OkCancelActions", "TvRadioActions"],
                        {
 
                self["actions"] = ActionMap(["OkCancelActions", "TvRadioActions"],
                        {
index 80cc196..78d9984 100755 (executable)
@@ -47,10 +47,12 @@ from Menu import MainMenu, mdom
 class InfoBarDish:
        def __init__(self):
                self.dishDialog = self.session.instantiateDialog(Dish)
 class InfoBarDish:
        def __init__(self):
                self.dishDialog = self.session.instantiateDialog(Dish)
+               self.dishDialog.setAnimationMode(0)
 
 class InfoBarUnhandledKey:
        def __init__(self):
                self.unhandledKeyDialog = self.session.instantiateDialog(UnhandledKey)
 
 class InfoBarUnhandledKey:
        def __init__(self):
                self.unhandledKeyDialog = self.session.instantiateDialog(UnhandledKey)
+               self.unhandledKeyDialog.setAnimationMode(0)
                self.hideUnhandledKeySymbolTimer = eTimer()
                self.hideUnhandledKeySymbolTimer.callback.append(self.unhandledKeyDialog.hide)
                self.checkUnusedTimer = eTimer()
                self.hideUnhandledKeySymbolTimer = eTimer()
                self.hideUnhandledKeySymbolTimer.callback.append(self.unhandledKeyDialog.hide)
                self.checkUnusedTimer = eTimer()
@@ -687,6 +689,7 @@ class InfoBarRdsDecoder:
        """provides RDS and Rass support/display"""
        def __init__(self):
                self.rds_display = self.session.instantiateDialog(RdsInfoDisplay)
        """provides RDS and Rass support/display"""
        def __init__(self):
                self.rds_display = self.session.instantiateDialog(RdsInfoDisplay)
+               self.rds_display.setAnimationMode(0)
                self.rass_interactive = None
 
                self.__event_tracker = ServiceEventTracker(screen=self, eventmap=
                self.rass_interactive = None
 
                self.__event_tracker = ServiceEventTracker(screen=self, eventmap=
@@ -1105,6 +1108,7 @@ class InfoBarPVRState:
        def __init__(self, screen=PVRState, force_show = False):
                self.onPlayStateChanged.append(self.__playStateChanged)
                self.pvrStateDialog = self.session.instantiateDialog(screen)
        def __init__(self, screen=PVRState, force_show = False):
                self.onPlayStateChanged.append(self.__playStateChanged)
                self.pvrStateDialog = self.session.instantiateDialog(screen)
+               self.pvrStateDialog.setAnimationMode(0)
                self.onShow.append(self._mayShow)
                self.onHide.append(self.pvrStateDialog.hide)
                self.force_show = force_show
                self.onShow.append(self._mayShow)
                self.onHide.append(self.pvrStateDialog.hide)
                self.force_show = force_show
@@ -1459,6 +1463,7 @@ class InfoBarPiP:
                        self.session.pipshown = False
                else:
                        self.session.pip = self.session.instantiateDialog(PictureInPicture)
                        self.session.pipshown = False
                else:
                        self.session.pip = self.session.instantiateDialog(PictureInPicture)
+                       self.session.pip.setAnimationMode(0)
                        self.session.pip.show()
                        newservice = self.session.nav.getCurrentlyPlayingServiceReference()
                        if self.session.pip.playService(newservice):
                        self.session.pip.show()
                        newservice = self.session.nav.getCurrentlyPlayingServiceReference()
                        if self.session.pip.playService(newservice):
@@ -2227,6 +2232,7 @@ class InfoBarSubtitleSupport(object):
        def __init__(self):
                object.__init__(self)
                self.subtitle_window = self.session.instantiateDialog(SubtitleDisplay)
        def __init__(self):
                object.__init__(self)
                self.subtitle_window = self.session.instantiateDialog(SubtitleDisplay)
+               self.subtitle_window.setAnimationMode(0)
                self.__subtitles_enabled = False
 
                self.__event_tracker = ServiceEventTracker(screen=self, eventmap=
                self.__subtitles_enabled = False
 
                self.__event_tracker = ServiceEventTracker(screen=self, eventmap=
index 4a0accd..1d39b7c 100644 (file)
@@ -165,6 +165,10 @@ class Screen(dict, GUISkin):
                        if isinstance(val, GUIComponent) or isinstance(val, Source):
                                val.onHide()
 
                        if isinstance(val, GUIComponent) or isinstance(val, Source):
                                val.onHide()
 
+       def setAnimationMode(self, mode):
+               if self.instance:
+                       self.instance.setAnimationMode(mode)
+
        def __repr__(self):
                return str(type(self))
 
        def __repr__(self):
                return str(type(self))
 
index 40cceb9..eaa1d09 100755 (executable)
@@ -602,6 +602,7 @@ class Wizard(Screen):
                                                        self.configInstance = self.session.instantiateDialog(self.wizard[self.currStep]["config"]["screen"])
                                                else:
                                                        self.configInstance = self.session.instantiateDialog(self.wizard[self.currStep]["config"]["screen"], eval(self.wizard[self.currStep]["config"]["args"]))
                                                        self.configInstance = self.session.instantiateDialog(self.wizard[self.currStep]["config"]["screen"])
                                                else:
                                                        self.configInstance = self.session.instantiateDialog(self.wizard[self.currStep]["config"]["screen"], eval(self.wizard[self.currStep]["config"]["args"]))
+                                               self.configInstance.setAnimationMode(0)
                                                self["config"].l.setList(self.configInstance["config"].list)
                                                callbacks = self.configInstance["config"].onSelectionChanged
                                                self.configInstance["config"].destroy()
                                                self["config"].l.setList(self.configInstance["config"].list)
                                                callbacks = self.configInstance["config"].onSelectionChanged
                                                self.configInstance["config"].destroy()
index 6386702..9891fb3 100755 (executable)
@@ -345,6 +345,8 @@ extern int getPrevAsciiCode();
 extern void addFont(const char *filename, const char *alias, int scale_factor, int is_replacement);
 extern const char *getEnigmaVersionString();
 extern void dump_malloc_stats(void);
 extern void addFont(const char *filename, const char *alias, int scale_factor, int is_replacement);
 extern const char *getEnigmaVersionString();
 extern void dump_malloc_stats(void);
+extern void setAnimation_current(int a);
+extern void setAnimation_speed(int speed);
 %}
 
 extern void addFont(const char *filename, const char *alias, int scale_factor, int is_replacement);
 %}
 
 extern void addFont(const char *filename, const char *alias, int scale_factor, int is_replacement);
@@ -354,3 +356,5 @@ extern void quitMainloop(int exit_code);
 extern eApplication *getApplication();
 extern const char *getEnigmaVersionString();
 extern void dump_malloc_stats(void);
 extern eApplication *getApplication();
 extern const char *getEnigmaVersionString();
 extern void dump_malloc_stats(void);
+extern void setAnimation_current(int a);
+extern void setAnimation_speed(int speed);
index a65b4ac..74e72dc 100644 (file)
@@ -44,6 +44,7 @@ enigma2_LDADD = \
        @BASE_LIBS@ \
        @LIBGIF_LIBS@ \
        @LIBJPEG_LIBS@ \
        @BASE_LIBS@ \
        @LIBGIF_LIBS@ \
        @LIBJPEG_LIBS@ \
+       @LIBVUGLES2_LIBS@ \
        @LIBSDL_LIBS@ \
        @LIBXINE_LIBS@ \
        @LIBXMLCCWRAP_LIBS@ \
        @LIBSDL_LIBS@ \
        @LIBXINE_LIBS@ \
        @LIBXMLCCWRAP_LIBS@ \
index 91645d8..49c5017 100644 (file)
@@ -327,3 +327,20 @@ void dump_malloc_stats(void)
        struct mallinfo mi = mallinfo();
        eDebug("MALLOC: %d total", mi.uordblks);
 }
        struct mallinfo mi = mallinfo();
        eDebug("MALLOC: %d total", mi.uordblks);
 }
+
+#ifdef USE_LIBVUGLES2
+#include <vuplus_gles.h>
+
+void setAnimation_current(int a)
+{
+       gles_set_animation_func(a);
+}
+
+void setAnimation_speed(int speed)
+{
+       gles_set_animation_speed(speed);
+}
+#else
+void setAnimation_current(int a) {}
+void setAnimation_speed(int speed) {}
+#endif
diff --git a/skin.py b/skin.py
index 19da203..a0190f1 100755 (executable)
--- a/skin.py
+++ b/skin.py
@@ -140,6 +140,17 @@ def applySingleAttribute(guiObject, desktop, attrib, value, scale = ((1,1),(1,1)
                        guiObject.move(parsePosition(value, scale, desktop, guiObject.csize()))
                elif attrib == 'size':
                        guiObject.resize(parseSize(value, scale))
                        guiObject.move(parsePosition(value, scale, desktop, guiObject.csize()))
                elif attrib == 'size':
                        guiObject.resize(parseSize(value, scale))
+               elif attrib == 'animationPaused':
+                       pass
+               elif attrib == 'animationMode':
+                       guiObject.setAnimationMode(
+                               { "disable": 0x00,
+                                       "off": 0x00,
+                                       "offshow": 0x10,
+                                       "offhide": 0x01,
+                                       "onshow": 0x01,
+                                       "onhide": 0x10,
+                               }[value])
                elif attrib == 'title':
                        guiObject.setTitle(_(value))
                elif attrib == 'text':
                elif attrib == 'title':
                        guiObject.setTitle(_(value))
                elif attrib == 'text':