- create DCs for buffered mode
authorFelix Domke <tmbinc@elitedvb.net>
Mon, 29 Aug 2005 19:53:44 +0000 (19:53 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Mon, 29 Aug 2005 19:53:44 +0000 (19:53 +0000)
lib/gui/ewidgetdesktop.cpp
lib/gui/ewidgetdesktop.h

index c820610e567cc179c1775a9c425dc330d58bdae0..d4a02010e08034e9a2b073698a071620564731d5 100644 (file)
@@ -171,6 +171,12 @@ void eWidgetDesktop::paint()
        
        if (m_comp_mode == cmImmediate)
                paintBackground(&m_screen);
        
        if (m_comp_mode == cmImmediate)
                paintBackground(&m_screen);
+       
+       if (m_comp_mode == cmBuffered)
+       {
+               eDebug("redraw composition");
+               redrawComposition();            
+       }
 }
 
 void eWidgetDesktop::setDC(gDC *dc)
 }
 
 void eWidgetDesktop::setDC(gDC *dc)
@@ -240,7 +246,7 @@ eWidgetDesktop::eWidgetDesktop(eSize size): m_mainloop(0), m_timer(0)
 
 eWidgetDesktop::~eWidgetDesktop()
 {
 
 eWidgetDesktop::~eWidgetDesktop()
 {
-               /* destroy all buffer */
+               /* destroy all buffers */
        setCompositionMode(-1);
 }
 
        setCompositionMode(-1);
 }
 
@@ -254,7 +260,8 @@ void eWidgetDesktop::createBufferForWidget(eWidget *widget)
        comp->m_position = bbox.topLeft();
        comp->m_dirty_region = gRegion(eRect(ePoint(0, 0), bbox.size()));
        comp->m_screen_size = bbox.size();
        comp->m_position = bbox.topLeft();
        comp->m_dirty_region = gRegion(eRect(ePoint(0, 0), bbox.size()));
        comp->m_screen_size = bbox.size();
-//     comp->m_dc = new .. ;
+               /* TODO: configurable bit depth. */
+       comp->m_dc = new gDC(new gPixmap(comp->m_screen_size, 32));
 }
 
 void eWidgetDesktop::removeBufferForWidget(eWidget *widget)
 }
 
 void eWidgetDesktop::removeBufferForWidget(eWidget *widget)
@@ -265,3 +272,16 @@ void eWidgetDesktop::removeBufferForWidget(eWidget *widget)
                widget->m_comp_buffer = 0;
        }
 }
                widget->m_comp_buffer = 0;
        }
 }
+
+void eWidgetDesktop::redrawComposition()
+{
+       gPainter p(m_screen.m_dc);
+
+       for (ePtrList<eWidget>::iterator i(m_root.begin()); i != m_root.end(); ++i)
+       {
+               ePtr<gPixmap> pm;
+               ASSERT(i->m_comp_buffer);
+               i->m_comp_buffer->m_dc->getPixmap(pm);
+               p.blit(pm, i->m_comp_buffer->m_position, eRect(), gPixmap::blitAlphaTest);
+       }
+}
index af772bd273ba76a30f2b4ddcdf374c5708232a28..58bff50a4e74dda18dee56fc29cc5268d594106d 100644 (file)
@@ -71,6 +71,8 @@ private:
        
        void createBufferForWidget(eWidget *widget);
        void removeBufferForWidget(eWidget *widget);
        
        void createBufferForWidget(eWidget *widget);
        void removeBufferForWidget(eWidget *widget);
+       
+       void redrawComposition();
 };
 
 #endif
 };
 
 #endif