X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/bf21ddd450e9e7b223e89623c6e31c806eb6374c..7f070068aa203cb95252b641b1c0cc5308a604ee:/lib/gui/ewidgetdesktop.cpp diff --git a/lib/gui/ewidgetdesktop.cpp b/lib/gui/ewidgetdesktop.cpp index 9f40a3db..08bd0474 100644 --- a/lib/gui/ewidgetdesktop.cpp +++ b/lib/gui/ewidgetdesktop.cpp @@ -7,7 +7,7 @@ extern void dumpRegion(const gRegion ®ion); void eWidgetDesktop::addRootWidget(eWidget *root) { - assert(!root->m_desktop); + ASSERT(!root->m_desktop); int invert_sense = 0; /* buffered mode paints back-to-front, while immediate mode is front-to-back. */ @@ -145,6 +145,9 @@ void eWidgetDesktop::recalcClipRegions(eWidget *root) createBufferForWidget(root, 0); comp = root->m_comp_buffer[i]; /* it might have changed. */ + + if (!comp) + continue; /* WAIT, don't we need to invalidate,whatever */ /* CHECKME: don't we need to recalculate everything? after all, our buffer has changed and is likely to be cleared */ gRegion visible_before = root->m_visible_with_childs; @@ -329,6 +332,10 @@ void eWidgetDesktop::paint() if (m_comp_mode == cmBuffered) { // redrawComposition(0); + } else + { + gPainter painter(m_screen.m_dc); + painter.flush(); } } @@ -343,12 +350,11 @@ void eWidgetDesktop::setRedrawTask(eMainloop &ml) { if (m_mainloop) { - delete m_timer; m_timer = 0; m_mainloop = 0; } m_mainloop = &ml; - m_timer = new eTimer(m_mainloop); + m_timer = eTimer::create(m_mainloop); CONNECT(m_timer->timeout, eWidgetDesktop::paint); if (m_require_redraw) @@ -375,7 +381,10 @@ void eWidgetDesktop::makeCompatiblePixmap(gPixmap &pm) ePtr target_pixmap; m_screen.m_dc->getPixmap(target_pixmap); - assert(target_pixmap); + if (!target_pixmap) { + eDebug("no target pixmap! assuming bpp > 8 for accelerated graphics."); + return; + } if (target_pixmap->surface && target_pixmap->surface->bpp > 8) return; @@ -399,7 +408,7 @@ void eWidgetDesktop::setCompositionMode(int mode) removeBufferForWidget(*i, l); } -eWidgetDesktop::eWidgetDesktop(eSize size): m_mainloop(0), m_timer(0) +eWidgetDesktop::eWidgetDesktop(eSize size): m_mainloop(0) { m_screen.m_dirty_region = gRegion(eRect(ePoint(0, 0), size)); m_screen.m_screen_size = size; @@ -463,7 +472,7 @@ void eWidgetDesktop::redrawComposition(int notified) if (m_comp_mode != cmBuffered) return; - assert(m_screen.m_dc); + ASSERT(m_screen.m_dc); gPainter p(m_screen.m_dc); p.resetClip(eRect(ePoint(0, 0), m_screen.m_screen_size));