From: Felix Domke Date: Thu, 22 Dec 2005 02:08:19 +0000 (+0000) Subject: gui: experimental Z order for root widgets X-Git-Tag: 2.6.0~4627 X-Git-Url: https://git.cweiske.de/enigma2.git/commitdiff_plain/db6ca522bdfbde29c214b41435a10876ff72a0a4 gui: experimental Z order for root widgets --- diff --git a/lib/gui/ewidgetdesktop.cpp b/lib/gui/ewidgetdesktop.cpp index 04bc85d9..223b5c86 100644 --- a/lib/gui/ewidgetdesktop.cpp +++ b/lib/gui/ewidgetdesktop.cpp @@ -5,18 +5,27 @@ extern void dumpRegion(const gRegion ®ion); -void eWidgetDesktop::addRootWidget(eWidget *root, int top) +void eWidgetDesktop::addRootWidget(eWidget *root) { assert(!root->m_desktop); + int invert_sense = 0; /* buffered mode paints back-to-front, while immediate mode is front-to-back. */ if (m_comp_mode == cmBuffered) - top = !top; + invert_sense = 1; + + ePtrList::iterator insert_position = m_root.begin(); + + for (;;) + { + if ((insert_position == m_root.end()) || (invert_sense ^ (insert_position->m_z_position > root->m_z_position))) + { + m_root.insert(insert_position, root); + break; + } + ++insert_position; + } - if (top) - m_root.push_back(root); - else - m_root.push_front(root); root->m_desktop = this; /* the creation will be postponed. */ diff --git a/lib/gui/ewidgetdesktop.h b/lib/gui/ewidgetdesktop.h index 9fbe1bcb..f88efa88 100644 --- a/lib/gui/ewidgetdesktop.h +++ b/lib/gui/ewidgetdesktop.h @@ -33,7 +33,7 @@ class eWidgetDesktop: public Object public: eWidgetDesktop(eSize screen); ~eWidgetDesktop(); - void addRootWidget(eWidget *root, int top); + void addRootWidget(eWidget *root); void removeRootWidget(eWidget *root); /* try to move widget content. */ diff --git a/lib/gui/ewindow.cpp b/lib/gui/ewindow.cpp index 06827a9e..f8984729 100644 --- a/lib/gui/ewindow.cpp +++ b/lib/gui/ewindow.cpp @@ -6,7 +6,7 @@ #include -eWindow::eWindow(eWidgetDesktop *desktop): eWidget(0) +eWindow::eWindow(eWidgetDesktop *desktop, int z): eWidget(0) { m_flags = 0; /* ask style manager for current style */ @@ -22,12 +22,14 @@ eWindow::eWindow(eWidgetDesktop *desktop): eWidget(0) style = new eWindowStyleSimple(); setStyle(style); + + setZPosition(z); /* must be done before addRootWidget */ /* we are the parent for the child window. */ /* as we are in the constructor, this is thread safe. */ m_child = this; m_child = new eWidget(this); - desktop->addRootWidget(this, 0); + desktop->addRootWidget(this); } eWindow::~eWindow() diff --git a/lib/gui/ewindow.h b/lib/gui/ewindow.h index a5b92eda..d36d9124 100644 --- a/lib/gui/ewindow.h +++ b/lib/gui/ewindow.h @@ -10,7 +10,7 @@ class eWindow: public eWidget { friend class eWindowStyle; public: - eWindow(eWidgetDesktop *desktop); + eWindow(eWidgetDesktop *desktop, int z = 0); ~eWindow(); void setTitle(const std::string &string); std::string getTitle() const;