aboutsummaryrefslogtreecommitdiff
path: root/lib/gui/ewidgetdesktop.cpp
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2005-11-28 02:32:59 +0000
committerFelix Domke <tmbinc@elitedvb.net>2005-11-28 02:32:59 +0000
commitbf82503dcba2b12fc921040397a0387d6dea9dbb (patch)
treecd7e31bc5991745c30f587b56b77b101dda4baae /lib/gui/ewidgetdesktop.cpp
parent0329b4216112f4591e758ff2407002500abb0bf6 (diff)
downloadenigma2-bf82503dcba2b12fc921040397a0387d6dea9dbb.tar.gz
enigma2-bf82503dcba2b12fc921040397a0387d6dea9dbb.zip
gui: add transparent widgets
Diffstat (limited to 'lib/gui/ewidgetdesktop.cpp')
-rw-r--r--lib/gui/ewidgetdesktop.cpp27
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)