From d85ab0bcd4dd553144faa3454c319ae3c54f2f9d Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Mon, 29 Aug 2005 19:53:44 +0000 Subject: [PATCH] - create DCs for buffered mode --- lib/gui/ewidgetdesktop.cpp | 24 ++++++++++++++++++++++-- lib/gui/ewidgetdesktop.h | 2 ++ 2 files changed, 24 insertions(+), 2 deletions(-) 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); + } +} diff --git a/lib/gui/ewidgetdesktop.h b/lib/gui/ewidgetdesktop.h index af772bd2..58bff50a 100644 --- a/lib/gui/ewidgetdesktop.h +++ b/lib/gui/ewidgetdesktop.h @@ -71,6 +71,8 @@ private: void createBufferForWidget(eWidget *widget); void removeBufferForWidget(eWidget *widget); + + void redrawComposition(); }; #endif -- 2.30.2