diff options
| author | Felix Domke <tmbinc@elitedvb.net> | 2005-11-28 02:32:59 +0000 |
|---|---|---|
| committer | Felix Domke <tmbinc@elitedvb.net> | 2005-11-28 02:32:59 +0000 |
| commit | bf82503dcba2b12fc921040397a0387d6dea9dbb (patch) | |
| tree | cd7e31bc5991745c30f587b56b77b101dda4baae /lib/gui/ewidgetdesktop.cpp | |
| parent | 0329b4216112f4591e758ff2407002500abb0bf6 (diff) | |
| download | enigma2-bf82503dcba2b12fc921040397a0387d6dea9dbb.tar.gz enigma2-bf82503dcba2b12fc921040397a0387d6dea9dbb.zip | |
gui: add transparent widgets
Diffstat (limited to 'lib/gui/ewidgetdesktop.cpp')
| -rw-r--r-- | lib/gui/ewidgetdesktop.cpp | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/lib/gui/ewidgetdesktop.cpp b/lib/gui/ewidgetdesktop.cpp index afe1995c..c89cd270 100644 --- a/lib/gui/ewidgetdesktop.cpp +++ b/lib/gui/ewidgetdesktop.cpp @@ -51,10 +51,10 @@ void eWidgetDesktop::calcWidgetClipRegion(eWidget *widget, gRegion &parent_visib widget->m_visible_region = widget->m_clip_region; widget->m_visible_region.moveBy(widget->position()); widget->m_visible_region &= parent_visible; // in parent space! - /* TODO: check transparency here! */ - /* remove everything this widget will contain from parent's visible list */ - parent_visible -= widget->m_visible_region; // will remove child regions too! + if (!widget->isTransparent()) + /* remove everything this widget will contain from parent's visible list, unless widget is transparent. */ + parent_visible -= widget->m_visible_region; // will remove child regions too! /* now prepare for recursing to childs */ widget->m_visible_region.moveBy(-widget->position()); // now in local space @@ -63,11 +63,22 @@ void eWidgetDesktop::calcWidgetClipRegion(eWidget *widget, gRegion &parent_visib widget->m_visible_with_childs = widget->m_visible_region; - for (ePtrList<eWidget>::iterator i(widget->m_childs.begin()); i != widget->m_childs.end(); ++i) - if (i->m_vis & eWidget::wVisShow) - calcWidgetClipRegion(*i, widget->m_visible_region); - else - clearVisibility(*i); + /* add childs in reverse (Z) order - we're going from front-to-bottom here. */ + ePtrList<eWidget>::iterator i(widget->m_childs.end()); + + for (;;) + { + if (i != widget->m_childs.end()) + { + if (i->m_vis & eWidget::wVisShow) + calcWidgetClipRegion(*i, widget->m_visible_region); + else + clearVisibility(*i); + } + if (i == widget->m_childs.begin()) + break; + --i; + } } void eWidgetDesktop::recalcClipRegions(eWidget *root) |
