diff options
| author | Felix Domke <tmbinc@elitedvb.net> | 2004-10-01 13:21:35 +0000 |
|---|---|---|
| committer | Felix Domke <tmbinc@elitedvb.net> | 2004-10-01 13:21:35 +0000 |
| commit | ddc3964ed95d01e72229dc9af968a327cd84e56c (patch) | |
| tree | 93e6694c639db3d188f5b2868f6b2b2951d21d60 /lib/gui/ewidgetdesktop.cpp | |
| parent | 1aeefd997cc362c3b37c1587c5f08891b35c3a75 (diff) | |
| download | enigma2-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.cpp | 72 |
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 ®ion) +{ + 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() +{ +} + |
