use boundFunction from tools
[enigma2.git] / lib / gui / ewindowstyle.h
index d5da5a3..08ea0a4 100644 (file)
@@ -10,17 +10,53 @@ class gFont;
 class eWindowStyle: public iObject
 {
 public:
-       virtual void handleNewSize(eWindow *wnd, const eSize &size) = 0;
+       virtual void handleNewSize(eWindow *wnd, eSize &size, eSize &offset) = 0;
        virtual void paintWindowDecoration(eWindow *wnd, gPainter &painter, const std::string &title) = 0;
        virtual void paintBackground(gPainter &painter, const ePoint &offset, const eSize &size) = 0;
-       virtual void setForegroundStyle(gPainter &painter) = 0;
-       virtual void drawButtonFrame(gPainter &painter, const eRect &frame) = 0;
+       virtual void setStyle(gPainter &painter, int what) = 0;
+       enum {
+               styleLabel,
+               styleListboxSelected,
+               styleListboxNormal,
+               styleListboxMarked
+       };
+       
+       virtual void drawFrame(gPainter &painter, const eRect &frame, int type) = 0;
+       
+       enum {
+               frameButton,
+               frameListboxEntry
+       };
+       
+       enum {
+               fontStatic,
+               fontButton,
+               fontTitlebar
+       };
+       
+       virtual RESULT getFont(int what, ePtr<gFont> &font) = 0;
        virtual ~eWindowStyle() = 0;
 };
 
+class eWindowStyleManager: public iObject
+{
+       DECLARE_REF(eWindowStyleManager);
+public:
+       eWindowStyleManager();
+       ~eWindowStyleManager();
+       void getStyle(ePtr<eWindowStyle> &style);
+       void setStyle(eWindowStyle *style);
+       static int getInstance(ePtr<eWindowStyleManager> &mgr) { mgr = m_instance; if (!mgr) return -1; return 0; }
+private:
+       static eWindowStyleManager *m_instance;
+       ePtr<eWindowStyle> m_current_style;
+};
+
+TEMPLATE_TYPEDEF(ePtr<eWindowStyleManager>, eWindowStyleManagerPtr);
+
 class eWindowStyleSimple: public eWindowStyle
 {
-       DECLARE_REF;
+       DECLARE_REF(eWindowStyleSimple);
 private:
        ePtr<gFont> m_fnt;
        gColor m_border_color_tl, m_border_color_br, m_title_color_back, m_title_color, m_background_color;
@@ -28,11 +64,12 @@ private:
        int m_border_top, m_border_left, m_border_right, m_border_bottom;
 public:
        eWindowStyleSimple();
-       void handleNewSize(eWindow *wnd, const eSize &size);
+       void handleNewSize(eWindow *wnd, eSize &size, eSize &offset);
        void paintWindowDecoration(eWindow *wnd, gPainter &painter, const std::string &title);
        void paintBackground(gPainter &painter, const ePoint &offset, const eSize &size);
-       void setForegroundStyle(gPainter &painter);
-       void drawButtonFrame(gPainter &painter, const eRect &frame);
+       void setStyle(gPainter &painter, int what);
+       void drawFrame(gPainter &painter, const eRect &frame, int what);
+       RESULT getFont(int what, ePtr<gFont> &font);
 };
 
 #endif