From 059c9a03c8cc02b0c595e3a5599be04dc157f725 Mon Sep 17 00:00:00 2001 From: Andreas Oberritter Date: Fri, 29 Oct 2010 14:54:36 +0200 Subject: [PATCH] Add abstract class gMainDC as an interface for gFBDC and gSDLDC --- configure.ac | 1 - lib/gdi/Makefile.am | 10 ++++++---- lib/gdi/gfbdc.cpp | 16 +--------------- lib/gdi/gfbdc.h | 26 +++----------------------- lib/gdi/glcddc.cpp | 2 +- lib/gdi/glcddc.h | 2 +- lib/gdi/gmaindc.cpp | 28 ++++++++++++++++++++++++++++ lib/gdi/gmaindc.h | 33 +++++++++++++++++++++++++++++++++ lib/gdi/grc.cpp | 2 +- lib/gdi/grc.h | 10 +++++----- lib/gdi/sdl.cpp | 44 ++++++++++++++++++++++---------------------- lib/gdi/sdl.h | 10 ++++------ lib/python/enigma_python.i | 4 ++-- main/bsod.cpp | 14 +++----------- main/enigma-gdi.cpp | 6 +++--- main/enigma-gui.cpp | 6 +++--- main/enigma.cpp | 16 ++++------------ skin.py | 4 ++-- 18 files changed, 122 insertions(+), 112 deletions(-) create mode 100644 lib/gdi/gmaindc.cpp create mode 100644 lib/gdi/gmaindc.h diff --git a/configure.ac b/configure.ac index d6b695f..15c1212 100644 --- a/configure.ac +++ b/configure.ac @@ -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") diff --git a/lib/gdi/Makefile.am b/lib/gdi/Makefile.am index febbab2..20321f5 100644 --- a/lib/gdi/Makefile.am +++ b/lib/gdi/Makefile.am @@ -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 diff --git a/lib/gdi/gfbdc.cpp b/lib/gdi/gfbdc.cpp index 80dd247..a4f65eb 100644 --- a/lib/gdi/gfbdc.cpp +++ b/lib/gdi/gfbdc.cpp @@ -7,18 +7,8 @@ #include -gFBDC *gFBDC::instance; - -ePtr NewgFBDCPtr(void) -{ - ePtr 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 init_gFBDC(eAutoInitNumbers::graphic-1, "GFBDC"); -#ifndef WITH_SDL eAutoInitPtr init_gFBDC(eAutoInitNumbers::graphic-1, "GFBDC"); -#endif diff --git a/lib/gdi/gfbdc.h b/lib/gdi/gfbdc.h index 23051c4..7f76d0c 100644 --- a/lib/gdi/gfbdc.h +++ b/lib/gdi/gfbdc.h @@ -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 &ptr) { if (!instance) return -1; ptr = instance; return 0; } int islocked() { return fb->islocked(); } -#endif }; -SWIG_TEMPLATE_TYPEDEF(ePtr, gFBDC); -SWIG_EXTEND(ePtr, - static ePtr getInstance() - { - extern ePtr NewgFBDCPtr(void); - return NewgFBDCPtr(); - } -); #endif diff --git a/lib/gdi/glcddc.cpp b/lib/gdi/glcddc.cpp index a593cfa..bade53b 100644 --- a/lib/gdi/glcddc.cpp +++ b/lib/gdi/glcddc.cpp @@ -30,7 +30,7 @@ gLCDDC::~gLCDDC() instance=0; } -void gLCDDC::exec(gOpcode *o) +void gLCDDC::exec(const gOpcode *o) { switch (o->opcode) { diff --git a/lib/gdi/glcddc.h b/lib/gdi/glcddc.h index 6d5f383..a2b3c7f 100644 --- a/lib/gdi/glcddc.h +++ b/lib/gdi/glcddc.h @@ -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 index 0000000..4890027 --- /dev/null +++ b/lib/gdi/gmaindc.cpp @@ -0,0 +1,28 @@ +#include + +gMainDC *gMainDC::m_instance; + +ePtr NewgMainDCPtr(void) +{ + ePtr 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 index 0000000..780be2e --- /dev/null +++ b/lib/gdi/gmaindc.h @@ -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 &ptr) { if (!m_instance) return -1; ptr = m_instance; return 0; } +#endif +}; + +SWIG_TEMPLATE_TYPEDEF(ePtr, gMainDC); +SWIG_EXTEND(ePtr, + static ePtr getInstance() + { + extern ePtr NewgMainDCPtr(void); + return NewgMainDCPtr(); + } +); + +#endif diff --git a/lib/gdi/grc.cpp b/lib/gdi/grc.cpp index dff6b05..a45b3b1 100644 --- a/lib/gdi/grc.cpp +++ b/lib/gdi/grc.cpp @@ -609,7 +609,7 @@ gDC::~gDC() delete[] m_spinner_pic; } -void gDC::exec(gOpcode *o) +void gDC::exec(const gOpcode *o) { switch (o->opcode) { diff --git a/lib/gdi/grc.h b/lib/gdi/grc.h index 3b8201a..38caa10 100644 --- a/lib/gdi/grc.h +++ b/lib/gdi/grc.h @@ -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 *pic, int len); + virtual void enableSpinner(); + virtual void disableSpinner(); + virtual void incrementSpinner(); + virtual void setSpinner(eRect pos, ePtr *pic, int len); }; #endif diff --git a/lib/gdi/sdl.cpp b/lib/gdi/sdl.cpp index 6dbdb67..e816a18 100644 --- a/lib/gdi/sdl.cpp +++ b/lib/gdi/sdl.cpp @@ -1,4 +1,3 @@ -#ifdef WITH_SDL #include #include @@ -6,8 +5,6 @@ #include -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 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 init_gSDLDC(eAutoInitNumbers::graphic-1, "gSDLDC"); diff --git a/lib/gdi/sdl.h b/lib/gdi/sdl.h index 20ff04f..9f86cbb 100644 --- a/lib/gdi/sdl.h +++ b/lib/gdi/sdl.h @@ -3,25 +3,23 @@ #include "fb.h" #include "gpixmap.h" -#include "grc.h" +#include "gmaindc.h" #include -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 &ptr) { if (!m_instance) return -1; ptr = m_instance; return 0; } int islocked() { return 0; } }; - #endif diff --git a/lib/python/enigma_python.i b/lib/python/enigma_python.i index 43d94ac..7c99927 100644 --- a/lib/python/enigma_python.i +++ b/lib/python/enigma_python.i @@ -51,7 +51,7 @@ is usually caused by not marking PSignals as immutable. #include #include #include -#include +#include #include #include #include @@ -166,7 +166,7 @@ typedef long time_t; %include %include %include -%include +%include %include %include %include diff --git a/main/bsod.cpp b/main/bsod.cpp index c036283..40252c0 100755 --- a/main/bsod.cpp +++ b/main/bsod.cpp @@ -7,10 +7,7 @@ #include #include #include -#include -#ifdef WITH_SDL -#include -#endif +#include #include "version.h" @@ -341,13 +338,8 @@ void bsodFatal(const char *component) } -#ifdef WITH_SDL - ePtr my_dc; - gSDLDC::getInstance(my_dc); -#else - ePtr my_dc; - gFBDC::getInstance(my_dc); -#endif + ePtr my_dc; + gMainDC::getInstance(my_dc); { gPainter p(my_dc); diff --git a/main/enigma-gdi.cpp b/main/enigma-gdi.cpp index 328fba4..f21c870 100644 --- a/main/enigma-gdi.cpp +++ b/main/enigma-gdi.cpp @@ -9,7 +9,7 @@ #include #include -#include +#include #include #include @@ -53,8 +53,8 @@ int main() eInit init; init.setRunlevel(eAutoInitNumbers::main); - ePtr my_dc; - gFBDC::getInstance(my_dc); + ePtr my_dc; + gMainDC::getInstance(my_dc); gPainter p(my_dc); diff --git a/main/enigma-gui.cpp b/main/enigma-gui.cpp index 2ba6106..f3d1b17 100644 --- a/main/enigma-gui.cpp +++ b/main/enigma-gui.cpp @@ -8,7 +8,7 @@ #include #include -#include +#include #include #include @@ -52,8 +52,8 @@ int main() eInit init; init.setRunlevel(eAutoInitNumbers::main); - ePtr my_dc; - gFBDC::getInstance(my_dc); + ePtr my_dc; + gMainDC::getInstance(my_dc); gPainter p(my_dc); diff --git a/main/enigma.cpp b/main/enigma.cpp index 882af99..3ea4afb 100644 --- a/main/enigma.cpp +++ b/main/enigma.cpp @@ -13,12 +13,9 @@ #include #include #include -#include +#include #include #include -#ifdef WITH_SDL -#include -#endif #include #include #include @@ -146,15 +143,10 @@ int main(int argc, char **argv) eMain main; #if 1 -#ifdef WITH_SDL - ePtr my_dc; - gSDLDC::getInstance(my_dc); -#else - ePtr my_dc; - gFBDC::getInstance(my_dc); + ePtr my_dc; + gMainDC::getInstance(my_dc); - int double_buffer = my_dc->haveDoubleBuffering(); -#endif + //int double_buffer = my_dc->haveDoubleBuffering(); ePtr my_lcd_dc; gLCDDC::getInstance(my_lcd_dc); diff --git a/skin.py b/skin.py index b490f73..19da203 100755 --- 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) -- 2.7.4