- start working on compositing support
[enigma2.git] / lib / gui / ewidgetdesktop.h
index 22914ec5cd7d1b32b24d2ec41f1eebeb8d11b1de..af772bd273ba76a30f2b4ddcdf374c5708232a28 100644 (file)
@@ -8,14 +8,28 @@ class eWidget;
 class eMainloop;
 class eTimer;
 
-class eWidgetDesktop: public Object
+               /* an eWidgetDesktopCompBuffer is a composition buffer. in 
+                  immediate composition  mode, we only have one composition 
+                  buffer - the screen.
+                  in buffered mode, we have one buffer for each widget, plus
+                  the screen.
+                  
+                  even in buffered mode, we have a background region, because
+                  a window can be arbitrary shaped. the screen size acts as a bounding
+                  box in these cases. */
+
+struct eWidgetDesktopCompBuffer
 {
-public: // weil debug
+       ePoint m_position;
        eSize m_screen_size;
        gRegion m_dirty_region;
        gRegion m_background_region;
        ePtr<gDC> m_dc;
-       gColor m_background_color;
+       gRGB m_background_color;
+};
+
+class eWidgetDesktop: public Object
+{
 public:
        eWidgetDesktop(eSize screen);
        ~eWidgetDesktop();
@@ -27,17 +41,36 @@ public:
        void paint();
        void setDC(gDC *dc);
        
-       void setBackgroundColor(gColor col);
+       void setBackgroundColor(gRGB col);
+       void setBackgroundColor(eWidgetDesktopCompBuffer *comp, gRGB col);
+       
+       void setPalette(gPixmap &pm);
        
        void setRedrawTask(eMainloop &ml);
        
        void makeCompatiblePixmap(gPixmap &pm);
+       
+       enum {
+               cmImmediate,
+               cmBuffered
+       };
+       
+       void setCompositionMode(int mode);
 private:
        ePtrList<eWidget> m_root;
-       void calcWidgetClipRegion(eWidget *widget, gRegion &parent_visible);
+       void calcWidgetClipRegion(eWidgetDesktopCompBuffer *comp, eWidget *widget, gRegion &parent_visible);
+       void paintBackground(eWidgetDesktopCompBuffer *comp);
        
        eMainloop *m_mainloop;
        eTimer *m_timer;
+       
+       int m_comp_mode;
+       int m_require_redraw;
+       
+       eWidgetDesktopCompBuffer m_screen;
+       
+       void createBufferForWidget(eWidget *widget);
+       void removeBufferForWidget(eWidget *widget);
 };
 
 #endif