X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/5c471ed8362098ad535177010c7b15957a586234..f5c84f0897d9aeb7a82778610bca39f77da4fa6b:/lib/gui/ewidgetdesktop.cpp diff --git a/lib/gui/ewidgetdesktop.cpp b/lib/gui/ewidgetdesktop.cpp index c820610e..d4a02010 100644 --- a/lib/gui/ewidgetdesktop.cpp +++ b/lib/gui/ewidgetdesktop.cpp @@ -171,6 +171,12 @@ void eWidgetDesktop::paint() if (m_comp_mode == cmImmediate) paintBackground(&m_screen); + + if (m_comp_mode == cmBuffered) + { + eDebug("redraw composition"); + redrawComposition(); + } } void eWidgetDesktop::setDC(gDC *dc) @@ -240,7 +246,7 @@ eWidgetDesktop::eWidgetDesktop(eSize size): m_mainloop(0), m_timer(0) eWidgetDesktop::~eWidgetDesktop() { - /* destroy all buffer */ + /* destroy all buffers */ 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_dc = new .. ; + /* TODO: configurable bit depth. */ + comp->m_dc = new gDC(new gPixmap(comp->m_screen_size, 32)); } void eWidgetDesktop::removeBufferForWidget(eWidget *widget) @@ -265,3 +272,16 @@ void eWidgetDesktop::removeBufferForWidget(eWidget *widget) widget->m_comp_buffer = 0; } } + +void eWidgetDesktop::redrawComposition() +{ + gPainter p(m_screen.m_dc); + + for (ePtrList::iterator i(m_root.begin()); i != m_root.end(); ++i) + { + ePtr 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); + } +}