aboutsummaryrefslogtreecommitdiff
path: root/lib/gui/ewidgetdesktop.cpp
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2004-10-01 13:21:35 +0000
committerFelix Domke <tmbinc@elitedvb.net>2004-10-01 13:21:35 +0000
commitddc3964ed95d01e72229dc9af968a327cd84e56c (patch)
tree93e6694c639db3d188f5b2868f6b2b2951d21d60 /lib/gui/ewidgetdesktop.cpp
parent1aeefd997cc362c3b37c1587c5f08891b35c3a75 (diff)
downloadenigma2-ddc3964ed95d01e72229dc9af968a327cd84e56c.tar.gz
enigma2-ddc3964ed95d01e72229dc9af968a327cd84e56c.zip
- add python, missing gui
- remove console (needs to be rewritten anyway) - eString -> std::string
Diffstat (limited to 'lib/gui/ewidgetdesktop.cpp')
-rw-r--r--lib/gui/ewidgetdesktop.cpp72
1 files changed, 72 insertions, 0 deletions
diff --git a/lib/gui/ewidgetdesktop.cpp b/lib/gui/ewidgetdesktop.cpp
new file mode 100644
index 00000000..10c92b71
--- /dev/null
+++ b/lib/gui/ewidgetdesktop.cpp
@@ -0,0 +1,72 @@
+#include <lib/gui/ewidgetdesktop.h>
+#include <lib/gui/ewidget.h>
+
+void eWidgetDesktop::addRootWidget(eWidget *root, int top)
+{
+ assert(!root->m_desktop);
+ if (!top)
+ m_root.push_back(root);
+ else
+ m_root.push_front(root);
+ root->m_desktop = this;
+}
+
+void eWidgetDesktop::calcWidgetClipRegion(eWidget *widget, gRegion &parent_visible)
+{
+ /* start with our clip region, clipped with the parent's */
+ if (widget->m_vis & eWidget::wVisShow)
+ {
+ 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!
+
+ /* now prepare for recursing to childs */
+ widget->m_visible_region.moveBy(-widget->position()); // now in local space
+ } else
+ widget->m_visible_region = gRegion();
+
+ widget->m_visible_with_childs = widget->m_visible_region;
+
+ for (ePtrList<eWidget>::iterator i(widget->m_childs.begin()); i != widget->m_childs.end(); ++i)
+ calcWidgetClipRegion(*i, widget->m_visible_region);
+}
+
+void eWidgetDesktop::recalcClipRegions()
+{
+ gRegion screen = 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);
+}
+
+void eWidgetDesktop::invalidate(const gRegion &region)
+{
+ m_dirty_region |= region;
+}
+
+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 = gRegion();
+}
+
+void eWidgetDesktop::setDC(gDC *dc)
+{
+ m_dc = dc;
+}
+
+eWidgetDesktop::eWidgetDesktop(eSize size): m_screen_size(size)
+{
+}
+
+eWidgetDesktop::~eWidgetDesktop()
+{
+}
+