Add abstract class gMainDC as an interface for gFBDC and gSDLDC
authorAndreas Oberritter <obi@opendreambox.org>
Fri, 29 Oct 2010 12:54:36 +0000 (14:54 +0200)
committerAndreas Oberritter <obi@opendreambox.org>
Tue, 16 Nov 2010 16:15:38 +0000 (17:15 +0100)
18 files changed:
configure.ac
lib/gdi/Makefile.am
lib/gdi/gfbdc.cpp
lib/gdi/gfbdc.h
lib/gdi/glcddc.cpp
lib/gdi/glcddc.h
lib/gdi/gmaindc.cpp [new file with mode: 0644]
lib/gdi/gmaindc.h [new file with mode: 0644]
lib/gdi/grc.cpp
lib/gdi/grc.h
lib/gdi/sdl.cpp
lib/gdi/sdl.h
lib/python/enigma_python.i
main/bsod.cpp
main/enigma-gdi.cpp
main/enigma-gui.cpp
main/enigma.cpp
skin.py

index d6b695f5f3f7baeea5f39fb06055738c7b284cef..15c1212a5a22e2e938556ae56b79986497b07fea 100644 (file)
@@ -55,7 +55,6 @@ AC_ARG_WITH(libsdl,
        [with_libsdl=$withval],[with_libsdl=no])
 if test "$with_libsdl" = "yes"; then
        PKG_CHECK_MODULES(LIBSDL, sdl)
-       AC_DEFINE([WITH_SDL],[1],[Define to 1 if you have libsdl])
 fi
 AM_CONDITIONAL(HAVE_LIBSDL, test "$with_libsdl" = "yes")
 
index febbab226e1ede648b0c43ccd6bb59f36c9275ae..20321f53c0edcd96788367ec367b44bf079ea971 100644 (file)
@@ -18,9 +18,9 @@ libenigma_gdi_a_SOURCES = \
        fb.cpp \
        font.cpp \
        font_arabic.cpp \
-       gfbdc.cpp \
        gfont.cpp \
        glcddc.cpp \
+       gmaindc.cpp \
        gpixmap.cpp \
        grc.cpp \
        lcd.cpp \
@@ -38,7 +38,6 @@ gdiinclude_HEADERS = \
        esize.h \
        fb.h \
        font.h \
-       gfbdc.h \
        gfont.h \
        glcddc.h \
        gpixmap.h \
@@ -50,7 +49,10 @@ gdiinclude_HEADERS = \
 
 if HAVE_LIBSDL
 libenigma_gdi_a_SOURCES += \
-       sdl.cpp
-gdiinclude_HEADERS += \
+       sdl.cpp \
        sdl.h
+else
+libenigma_gdi_a_SOURCES += \
+       gfbdc.cpp \
+       gfbdc.h
 endif
index 80dd2479b52b92d97a983b5ddf38c4de6dd8b326..a4f65ebc2d24dc5082b18405bc4a66d59912df7b 100644 (file)
@@ -7,18 +7,8 @@
 
 #include <time.h>
 
-gFBDC *gFBDC::instance;
-
-ePtr<gFBDC> NewgFBDCPtr(void)
-{
-       ePtr<gFBDC> ptr;
-       gFBDC::getInstance(ptr);
-       return ptr;
-}
-
 gFBDC::gFBDC()
 {
-       instance=this;
        fb=new fbClass;
 
        if (!fb->Available())
@@ -34,7 +24,6 @@ gFBDC::~gFBDC()
 {
        delete fb;
        delete[] surface.clut.data;
-       instance=0;
 }
 
 void gFBDC::calcRamp()
@@ -91,7 +80,7 @@ void gFBDC::setPalette()
        fb->PutCMAP();
 }
 
-void gFBDC::exec(gOpcode *o)
+void gFBDC::exec(const gOpcode *o)
 {
        switch (o->opcode)
        {
@@ -242,7 +231,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
index 23051c4f7207fc351142214c937a86147d06f410..7f76d0c96bbce3a256c1513f3383ae71d62ec13d 100644 (file)
@@ -3,17 +3,12 @@
 
 #include "fb.h"
 #include "gpixmap.h"
-#include "grc.h"
+#include "gmaindc.h"
 
-class gFBDC;
-
-SWIG_IGNORE(gFBDC);
-class gFBDC: public gDC
+class gFBDC: public gMainDC
 {
-#ifndef SWIG
        fbClass *fb;
-       static gFBDC *instance;
-       void exec(gOpcode *opcode);
+       void exec(const gOpcode *opcode);
        unsigned char ramp[256], rampalpha[256]; // RGB ramp 0..255
        int brightness, gamma, alpha;
        void calcRamp();
@@ -21,13 +16,8 @@ class gFBDC: public gDC
        gSurface surface, surface_back;
        int m_enable_double_buffering;
        int m_xres, m_yres;
-#else
-       gFBDC();
-       virtual ~gFBDC();
-#endif
 public:
        void setResolution(int xres, int yres);
-#ifndef SWIG
        void reloadSettings();
        void setAlpha(int alpha);
        void setBrightness(int brightness);
@@ -43,17 +33,7 @@ public:
 
        gFBDC();
        virtual ~gFBDC();
-       static int getInstance(ePtr<gFBDC> &ptr) { if (!instance) return -1; ptr = instance; return 0; }
        int islocked() { return fb->islocked(); }
-#endif
 };
-SWIG_TEMPLATE_TYPEDEF(ePtr<gFBDC>, gFBDC);
-SWIG_EXTEND(ePtr<gFBDC>,
-       static ePtr<gFBDC> getInstance()
-       {
-               extern ePtr<gFBDC> NewgFBDCPtr(void);
-               return NewgFBDCPtr();
-       }
-);
 
 #endif
index a593cfa3e7938cb6e4cde89accbbb407e7fb23cb..bade53ba88c7533e74ca86237eec52978d5b9e65 100644 (file)
@@ -30,7 +30,7 @@ gLCDDC::~gLCDDC()
        instance=0;
 }
 
-void gLCDDC::exec(gOpcode *o)
+void gLCDDC::exec(const gOpcode *o)
 {
        switch (o->opcode)
        {
index 6d5f383486021b598e9de05fa52b38bfff297dfb..a2b3c7f0e04111f93169a64def0f5968369ab85b 100644 (file)
@@ -9,7 +9,7 @@ class gLCDDC: public gDC
        eLCD *lcd;
        static gLCDDC *instance;
        int update;
-       void exec(gOpcode *opcode);
+       void exec(const gOpcode *opcode);
        gSurface surface;
 public:
        gLCDDC();
diff --git a/lib/gdi/gmaindc.cpp b/lib/gdi/gmaindc.cpp
new file mode 100644 (file)
index 0000000..4890027
--- /dev/null
@@ -0,0 +1,28 @@
+#include <lib/gdi/gmaindc.h>
+
+gMainDC *gMainDC::m_instance;
+
+ePtr<gMainDC> NewgMainDCPtr(void)
+{
+       ePtr<gMainDC> ptr;
+       gMainDC::getInstance(ptr);
+       return ptr;
+}
+
+gMainDC::gMainDC()
+{
+       ASSERT(m_instance == 0);
+       m_instance = this;
+}
+
+gMainDC::gMainDC(gPixmap *pixmap) : gDC(pixmap)
+{
+       ASSERT(m_instance == 0);
+       m_instance = this;
+}
+
+gMainDC::~gMainDC()
+{
+       m_instance = 0;
+}
+
diff --git a/lib/gdi/gmaindc.h b/lib/gdi/gmaindc.h
new file mode 100644 (file)
index 0000000..780be2e
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef __lib_gdi_gmaindc_h
+#define __lib_gdi_gmaindc_h
+
+#include "grc.h"
+
+class gMainDC;
+
+SWIG_IGNORE(gMainDC);
+class gMainDC: public gDC
+{
+protected:
+       static gMainDC *m_instance;
+
+       gMainDC();
+       gMainDC(gPixmap *pixmap);
+       virtual ~gMainDC();
+public:
+       virtual void setResolution(int xres, int yres) = 0;
+#ifndef SWIG
+       static int getInstance(ePtr<gMainDC> &ptr) { if (!m_instance) return -1; ptr = m_instance; return 0; }
+#endif
+};
+
+SWIG_TEMPLATE_TYPEDEF(ePtr<gMainDC>, gMainDC);
+SWIG_EXTEND(ePtr<gMainDC>,
+       static ePtr<gMainDC> getInstance()
+       {
+               extern ePtr<gMainDC> NewgMainDCPtr(void);
+               return NewgMainDCPtr();
+       }
+);
+
+#endif
index dff6b059a0f9351ac80f9420b6aa8027721f67b4..a45b3b1ec6feb386541c71a425bc8b00b870a9c5 100644 (file)
@@ -609,7 +609,7 @@ gDC::~gDC()
        delete[] m_spinner_pic;
 }
 
-void gDC::exec(gOpcode *o)
+void gDC::exec(const gOpcode *o)
 {
        switch (o->opcode)
        {
index 3b8201add99ab4e7de9d4ecffb262c60e8e8f394..38caa107a460ce61ceb0578a11fd5b290cf38767 100644 (file)
@@ -286,7 +286,7 @@ protected:
        eRect m_spinner_pos;
        int m_spinner_num, m_spinner_i;
 public:
-       virtual void exec(gOpcode *opcode);
+       virtual void exec(const gOpcode *opcode);
        gDC(gPixmap *pixmap);
        gDC();
        virtual ~gDC();
@@ -296,10 +296,10 @@ public:
        virtual eSize size() { return m_pixmap->size(); }
        virtual int islocked() { return 0; }
        
-       void enableSpinner();
-       void disableSpinner();
-       void incrementSpinner();
-       void setSpinner(eRect pos, ePtr<gPixmap> *pic, int len);
+       virtual void enableSpinner();
+       virtual void disableSpinner();
+       virtual void incrementSpinner();
+       virtual void setSpinner(eRect pos, ePtr<gPixmap> *pic, int len);
 };
 
 #endif
index 6dbdb67c23dccdffbd9d9613d00c1fa9393898c9..e816a185c7541a5ff2f15ad14b6f9a1b2f61bbd7 100644 (file)
@@ -1,4 +1,3 @@
-#ifdef WITH_SDL
 #include <lib/gdi/sdl.h>
 
 #include <lib/base/init.h>
@@ -6,8 +5,6 @@
 
 #include <SDL.h>
 
-gSDLDC *gSDLDC::m_instance;
-
 gSDLDC::gSDLDC()
 {
        if (SDL_Init(SDL_INIT_VIDEO) < 0)
@@ -15,23 +12,12 @@ gSDLDC::gSDLDC()
                eWarning("Could not initialize SDL: %s", SDL_GetError());
                return;
        }
-       
-       m_screen = SDL_SetVideoMode(720, 576, 32, SDL_HWSURFACE);
-       if (!m_screen)
-       {
-               eWarning("Could not create SDL surface: %s", SDL_GetError());
-               return;
-       }
 
-       m_instance=this;
-       
+       setResolution(720, 576);
+
+       CONNECT(m_pump.recv_msg, gSDLDC::pumpEvent);
+
        m_surface.type = 0;
-       m_surface.x = m_screen->w;
-       m_surface.y = m_screen->h;
-       m_surface.bpp = m_screen->format->BitsPerPixel;
-       m_surface.bypp = m_screen->format->BytesPerPixel;
-       m_surface.stride = m_screen->pitch;
-       m_surface.data = m_screen->pixels;
        m_surface.clut.colors=256;
        m_surface.clut.data=new gRGB[m_surface.clut.colors];
        
@@ -43,7 +29,6 @@ gSDLDC::gSDLDC()
 gSDLDC::~gSDLDC()
 {
        SDL_Quit();
-       m_instance=0;
 }
 
 void gSDLDC::setPalette()
@@ -63,7 +48,7 @@ void gSDLDC::setPalette()
        fb->PutCMAP(); */
 }
 
-void gSDLDC::exec(gOpcode *o)
+void gSDLDC::exec(const gOpcode *o)
 {
        switch (o->opcode)
        {
@@ -83,6 +68,21 @@ void gSDLDC::exec(gOpcode *o)
        }
 }
 
-eAutoInitPtr<gSDLDC> init_gSDLDC(eAutoInitNumbers::graphic-1, "gSDLDC");
+void gSDLDC::setResolution(int xres, int yres)
+{
+       m_screen = SDL_SetVideoMode(xres, yres, 32, SDL_HWSURFACE);
+       if (!m_screen)
+       {
+               eWarning("Could not create SDL surface: %s", SDL_GetError());
+               return;
+       }
+
+       m_surface.x = m_screen->w;
+       m_surface.y = m_screen->h;
+       m_surface.bpp = m_screen->format->BitsPerPixel;
+       m_surface.bypp = m_screen->format->BytesPerPixel;
+       m_surface.stride = m_screen->pitch;
+       m_surface.data = m_screen->pixels;
+}
 
-#endif
+eAutoInitPtr<gSDLDC> init_gSDLDC(eAutoInitNumbers::graphic-1, "gSDLDC");
index 20ff04fa827ecc6853f3ee3bd32dde3fd56ce832..9f86cbbde5d8a02bd194e152431425fe1e32b748 100644 (file)
@@ -3,25 +3,23 @@
 
 #include "fb.h"
 #include "gpixmap.h"
-#include "grc.h"
+#include "gmaindc.h"
 
 #include <SDL.h>
 
-class gSDLDC: public gDC
+class gSDLDC: public gMainDC
 {
        SDL_Surface *m_screen;
-       static gSDLDC *m_instance;
-       void exec(gOpcode *opcode);
+       void exec(const gOpcode *opcode);
 
        void setPalette();
        gSurface m_surface;
 public:
        
+       void setResolution(int xres, int yres);
        gSDLDC();
        virtual ~gSDLDC();
-       static int getInstance(ePtr<gSDLDC> &ptr) { if (!m_instance) return -1; ptr = m_instance; return 0; }
        int islocked() { return 0; }
 };
 
-
 #endif
index 43d94ac9973ee1247cc0b956e39b27a516e146d4..7c9992772647645bf150fca9b1c7fcc52b56aab6 100644 (file)
@@ -51,7 +51,7 @@ is usually caused by not marking PSignals as immutable.
 #include <lib/gdi/fb.h>
 #include <lib/gdi/font.h>
 #include <lib/gdi/gpixmap.h>
-#include <lib/gdi/gfbdc.h>
+#include <lib/gdi/gmaindc.h>
 #include <lib/gui/ewidget.h>
 #include <lib/gui/elabel.h>
 #include <lib/gui/einput.h>
@@ -166,7 +166,7 @@ typedef long time_t;
 %include <lib/gdi/fb.h>
 %include <lib/gdi/font.h>
 %include <lib/gdi/gpixmap.h>
-%include <lib/gdi/gfbdc.h>
+%include <lib/gdi/gmaindc.h>
 %include <lib/gdi/epoint.h>
 %include <lib/gdi/erect.h>
 %include <lib/gdi/esize.h>
index c03628329581bd97cc02cacb8a5e5a4e938bd59b..40252c0f314753d99b6b4face639c2751d890467 100755 (executable)
@@ -7,10 +7,7 @@
 #include <lib/base/smartptr.h>
 #include <lib/base/nconfig.h>
 #include <lib/gdi/grc.h>
-#include <lib/gdi/gfbdc.h>
-#ifdef WITH_SDL
-#include <lib/gdi/sdl.h>
-#endif
+#include <lib/gdi/gmaindc.h>
 
 #include "version.h"
 
@@ -341,13 +338,8 @@ void bsodFatal(const char *component)
                
        }
        
-#ifdef WITH_SDL
-       ePtr<gSDLDC> my_dc;
-       gSDLDC::getInstance(my_dc);
-#else
-       ePtr<gFBDC> my_dc;
-       gFBDC::getInstance(my_dc);
-#endif
+       ePtr<gMainDC> my_dc;
+       gMainDC::getInstance(my_dc);
        
        {
                gPainter p(my_dc);
index 328fba444e8bf803bfdb9bb15b5cb203a2e2b578..f21c8701e96bfcfc6b8937caedbb54376d223218 100644 (file)
@@ -9,7 +9,7 @@
 #include <unistd.h>
 
 #include <lib/gdi/grc.h>
-#include <lib/gdi/gfbdc.h>
+#include <lib/gdi/gmaindc.h>
 #include <lib/gdi/font.h> 
 
 #include <lib/gui/ewidget.h>
@@ -53,8 +53,8 @@ int main()
        eInit init;
 
        init.setRunlevel(eAutoInitNumbers::main);
-       ePtr<gFBDC> my_dc;
-       gFBDC::getInstance(my_dc);
+       ePtr<gMainDC> my_dc;
+       gMainDC::getInstance(my_dc);
 
        gPainter p(my_dc);
        
index 2ba61067081851c6fda7562210464b52ab0c92fb..f3d1b17dadd80b6d09f88bd28ee57d473895d349 100644 (file)
@@ -8,7 +8,7 @@
 #include <unistd.h>
 
 #include <lib/gdi/grc.h>
-#include <lib/gdi/gfbdc.h>
+#include <lib/gdi/gmaindc.h>
 #include <lib/gdi/font.h> 
 
 #include <lib/gui/ewidget.h>
@@ -52,8 +52,8 @@ int main()
        eInit init;
 
        init.setRunlevel(eAutoInitNumbers::main);
-       ePtr<gFBDC> my_dc;
-       gFBDC::getInstance(my_dc);
+       ePtr<gMainDC> my_dc;
+       gMainDC::getInstance(my_dc);
 
        gPainter p(my_dc);
        
index 882af996eed3b4112cb71f40bd4edbf33a6da4cb..3ea4afb71226129e6b5792c81875163eee249d92 100644 (file)
 #include <lib/base/eerror.h>
 #include <lib/base/init.h>
 #include <lib/base/init_num.h>
-#include <lib/gdi/gfbdc.h>
+#include <lib/gdi/gmaindc.h>
 #include <lib/gdi/glcddc.h>
 #include <lib/gdi/grc.h>
-#ifdef WITH_SDL
-#include <lib/gdi/sdl.h>
-#endif
 #include <lib/gdi/epng.h>
 #include <lib/gdi/font.h>
 #include <lib/gui/ebutton.h>
@@ -146,15 +143,10 @@ int main(int argc, char **argv)
        eMain main;
 
 #if 1
-#ifdef WITH_SDL
-       ePtr<gSDLDC> my_dc;
-       gSDLDC::getInstance(my_dc);
-#else
-       ePtr<gFBDC> my_dc;
-       gFBDC::getInstance(my_dc);
+       ePtr<gMainDC> my_dc;
+       gMainDC::getInstance(my_dc);
        
-       int double_buffer = my_dc->haveDoubleBuffering();
-#endif
+       //int double_buffer = my_dc->haveDoubleBuffering();
 
        ePtr<gLCDDC> my_lcd_dc;
        gLCDDC::getInstance(my_lcd_dc);
diff --git a/skin.py b/skin.py
index b490f7392d507463c127435ec2852ea2ae068459..19da2036cebe63550b59db545901b0bf3bea9cc1 100755 (executable)
--- a/skin.py
+++ b/skin.py
@@ -284,8 +284,8 @@ def loadSingleSkinData(desktop, skin, path_prefix):
                                else:
                                        bpp = 32
                                #print "Resolution:", xres,yres,bpp
-                               from enigma import gFBDC
-                               gFBDC.getInstance().setResolution(xres, yres)
+                               from enigma import gMainDC
+                               gMainDC.getInstance().setResolution(xres, yres)
                                desktop.resize(eSize(xres, yres))
                                if bpp != 32:
                                        # load palette (not yet implemented)