Support focus animation for listbox
[vuplus_dvbapp] / lib / gdi / gfbdc.cpp
index 80dd247..eda5bf2 100644 (file)
@@ -6,19 +6,12 @@
 #include <lib/gdi/accel.h>
 
 #include <time.h>
-
-gFBDC *gFBDC::instance;
-
-ePtr<gFBDC> NewgFBDCPtr(void)
-{
-       ePtr<gFBDC> ptr;
-       gFBDC::getInstance(ptr);
-       return ptr;
-}
+#ifdef USE_LIBVUGLES2
+#include <vuplus_gles.h>
+#endif
 
 gFBDC::gFBDC()
 {
-       instance=this;
        fb=new fbClass;
 
        if (!fb->Available())
@@ -34,7 +27,6 @@ gFBDC::~gFBDC()
 {
        delete fb;
        delete[] surface.clut.data;
-       instance=0;
 }
 
 void gFBDC::calcRamp()
@@ -91,7 +83,7 @@ void gFBDC::setPalette()
        fb->PutCMAP();
 }
 
-void gFBDC::exec(gOpcode *o)
+void gFBDC::exec(const gOpcode *o)
 {
        switch (o->opcode)
        {
@@ -136,8 +128,56 @@ void gFBDC::exec(gOpcode *o)
                break;
        }
        case gOpcode::flush:
+#ifdef USE_LIBVUGLES2
+               if (gles_is_animation())
+                       gles_do_animation();
+               else
+                       fb->blit();
+
+               gles_flush();
+#else
                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
+               delete o->parm.setShowHideInfo;
+               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
+               delete o->parm.setShowHideInfo;
                break;
+       }
+#ifdef USE_LIBVUGLES2
+       case gOpcode::sendShowItem:
+       {
+               gles_set_buffer((unsigned int *)surface.data);
+               gles_set_animation_listbox(o->parm.setShowItemInfo->dir, o->parm.setShowItemInfo->point.x(), o->parm.setShowItemInfo->point.y(), o->parm.setShowItemInfo->size.width(), o->parm.setShowItemInfo->size.height());
+               delete o->parm.setShowItemInfo;
+               break;
+       }
+       case gOpcode::setFlush:
+       {
+               gles_set_flush(o->parm.setFlush->enable);
+               delete o->parm.setFlush;
+               break;
+       }
+       case gOpcode::setView:
+       {
+               gles_viewport(o->parm.setViewInfo->size.width(), o->parm.setViewInfo->size.height(), fb->Stride());
+               delete o->parm.setViewInfo;
+               break;
+       }
+#endif
        default:
                gDC::exec(o);
                break;
@@ -242,7 +282,4 @@ void gFBDC::reloadSettings()
        setPalette();
 }
 
-// eAutoInitPtr<gFBDC> init_gFBDC(eAutoInitNumbers::graphic-1, "GFBDC");
-#ifndef WITH_SDL
 eAutoInitPtr<gFBDC> init_gFBDC(eAutoInitNumbers::graphic-1, "GFBDC");
-#endif