diff options
| author | Felix Domke <tmbinc@elitedvb.net> | 2005-01-23 23:14:14 +0000 |
|---|---|---|
| committer | Felix Domke <tmbinc@elitedvb.net> | 2005-01-23 23:14:14 +0000 |
| commit | 4c9d04cb33fb06dfa075b431e36e7ea938a5f963 (patch) | |
| tree | c2c74af99bbece5f62c4577beca11f27c2539ec3 /lib/gui/ewidgetdesktop.cpp | |
| parent | 9202d4248dd7df2f6e5eb53b4154c8297ec9b1d1 (diff) | |
| download | enigma2-4c9d04cb33fb06dfa075b431e36e7ea938a5f963.tar.gz enigma2-4c9d04cb33fb06dfa075b431e36e7ea938a5f963.zip | |
- allow close of dialog
- some eWidget fixes
- background for eWidgetDesktop
- introduce "session" object
Diffstat (limited to 'lib/gui/ewidgetdesktop.cpp')
| -rw-r--r-- | lib/gui/ewidgetdesktop.cpp | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/lib/gui/ewidgetdesktop.cpp b/lib/gui/ewidgetdesktop.cpp index bb6c7c39..1b5cf9b2 100644 --- a/lib/gui/ewidgetdesktop.cpp +++ b/lib/gui/ewidgetdesktop.cpp @@ -42,11 +42,10 @@ void eWidgetDesktop::calcWidgetClipRegion(eWidget *widget, gRegion &parent_visib void eWidgetDesktop::recalcClipRegions() { - gRegion screen = gRegion(eRect(ePoint(0, 0), m_screen_size)); + m_background_region = gRegion(eRect(ePoint(0, 0), m_screen_size)); for (ePtrList<eWidget>::iterator i(m_root.begin()); i != m_root.end(); ++i) - calcWidgetClipRegion(*i, screen); -// dumpRegion(screen); + calcWidgetClipRegion(*i, m_background_region); } void eWidgetDesktop::invalidate(const gRegion ®ion) @@ -56,12 +55,33 @@ void eWidgetDesktop::invalidate(const gRegion ®ion) m_dirty_region |= region; } +void eWidgetDesktop::setBackgroundColor(gColor col) +{ + m_background_color = col; + + /* if there's something visible from the background, redraw it with the new color. */ + if (m_dc && m_background_region.valid() && !m_background_region.empty()) + { + /* todo: split out "setBackgroundColor / clear"... maybe? */ + gPainter painter(m_dc); + painter.resetClip(m_background_region); + painter.setBackgroundColor(m_background_color); + painter.clear(); + } +} + void eWidgetDesktop::paint() { gPainter painter(m_dc); /* walk all root windows. */ for (ePtrList<eWidget>::iterator i(m_root.begin()); i != m_root.end(); ++i) i->doPaint(painter, m_dirty_region); + m_dirty_region &= m_background_region; + + painter.resetClip(m_dirty_region); + painter.setBackgroundColor(m_background_color); + painter.clear(); + m_dirty_region = gRegion(); } |
