aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2005-12-22 02:08:19 +0000
committerFelix Domke <tmbinc@elitedvb.net>2005-12-22 02:08:19 +0000
commitdb6ca522bdfbde29c214b41435a10876ff72a0a4 (patch)
treed43a7d31e1fbd5fc9a3b95839cf8e46c62af5e76 /lib
parenteb47577c32b49a28eb7986b0fd86ed0d76207150 (diff)
downloadenigma2-db6ca522bdfbde29c214b41435a10876ff72a0a4.tar.gz
enigma2-db6ca522bdfbde29c214b41435a10876ff72a0a4.zip
gui: experimental Z order for root widgets
Diffstat (limited to 'lib')
-rw-r--r--lib/gui/ewidgetdesktop.cpp21
-rw-r--r--lib/gui/ewidgetdesktop.h2
-rw-r--r--lib/gui/ewindow.cpp6
-rw-r--r--lib/gui/ewindow.h2
4 files changed, 21 insertions, 10 deletions
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 &region);
-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<eWidget>::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 <lib/gdi/epng.h>
-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;