aboutsummaryrefslogtreecommitdiffstatsci
diff options
context:
space:
mode:
authorjpbruyere <jp.bruyere@hotmail.com>2017-03-21 13:48:50 +0100
committerjpbruyere <jp.bruyere@hotmail.com>2017-03-21 13:48:50 +0100
commit280ee7ff8429342575b47eff4ab88872399047d3 (patch)
tree8733c3b9be774be6b8f3a667d626d70832c6134e
parent6b96a03d1ac087cbd8c0d7c69699770adf143245 (diff)
Simplify z ordering of root objects in GraphicTree
modifié : src/GraphicObjects/Group.cs modifié : src/GraphicObjects/Window.cs modifié : src/Interface.cs
-rw-r--r--src/GraphicObjects/Group.cs40
-rw-r--r--src/GraphicObjects/Window.cs7
-rw-r--r--src/Interface.cs45
3 files changed, 52 insertions, 40 deletions
diff --git a/src/GraphicObjects/Group.cs b/src/GraphicObjects/Group.cs
index d00449cb..d4b5b62e 100644
--- a/src/GraphicObjects/Group.cs
+++ b/src/GraphicObjects/Group.cs
@@ -102,26 +102,26 @@ namespace Crow
ChildrenCleared.Raise (this, new EventArgs ());
}
- public void putWidgetOnTop(GraphicObject w)
- {
- if (Children.Contains(w))
- {
- lock (children) {
- Children.Remove (w);
- Children.Add (w);
- }
- }
- }
- public void putWidgetOnBottom(GraphicObject w)
- {
- if (Children.Contains(w))
- {
- lock (children) {
- Children.Remove (w);
- Children.Insert (0, w);
- }
- }
- }
+// public void putWidgetOnTop(GraphicObject w)
+// {
+// if (Children.Contains(w))
+// {
+// lock (children) {
+// Children.Remove (w);
+// Children.Add (w);
+// }
+// }
+// }
+// public void putWidgetOnBottom(GraphicObject w)
+// {
+// if (Children.Contains(w))
+// {
+// lock (children) {
+// Children.Remove (w);
+// Children.Insert (0, w);
+// }
+// }
+// }
#region GraphicObject overrides
public override void OnDataSourceChanged (object sender, DataSourceChangeEventArgs e)
diff --git a/src/GraphicObjects/Window.cs b/src/GraphicObjects/Window.cs
index e2820528..8a6903f6 100644
--- a/src/GraphicObjects/Window.cs
+++ b/src/GraphicObjects/Window.cs
@@ -150,11 +150,10 @@ namespace Crow
if (alwaysOnTop == value)
return;
alwaysOnTop = value;
- if (alwaysOnTop) {
+
+ if (alwaysOnTop && Parent != null)
CurrentInterface.PutOnTop (this);
- CurrentInterface.TopWindows++;
- }else
- CurrentInterface.TopWindows--;
+
NotifyValueChanged ("AlwaysOnTop", alwaysOnTop);
}
}
diff --git a/src/Interface.cs b/src/Interface.cs
index b3ff2527..62ac6ce3 100644
--- a/src/Interface.cs
+++ b/src/Interface.cs
@@ -147,7 +147,6 @@ namespace Crow
/// </summary>
public static Dictionary<String, Instantiator> Instantiators = new Dictionary<string, Instantiator>();
public bool DesignMode = false;
- public int TopWindows = 0;//window always on top count
public List<CrowThread> CrowThreads = new List<CrowThread>();//used to monitor thread finished
#endregion
@@ -550,17 +549,25 @@ namespace Crow
#region GraphicTree handling
/// <summary>Add widget to the Graphic tree of this interface and register it for layouting</summary>
- public void AddWidget(GraphicObject g, bool topMost = false)
+ public void AddWidget(GraphicObject g, bool isOverlay = false)
{
g.Parent = this;
- int ptr = TopWindows;
- if (g is Window) {
- if ((g as Window).AlwaysOnTop)
- ptr = 0;
- } else if (topMost)
- ptr = 0;
+ int ptr = 0;
+ Window newW = g as Window;
+ if (newW != null) {
+ while (ptr < GraphicTree.Count) {
+ Window w = GraphicTree [ptr] as Window;
+ if (w != null) {
+ if (newW.AlwaysOnTop || !w.AlwaysOnTop)
+ break;
+ }
+ ptr++;
+ }
+ }
+
lock (UpdateMutex)
- GraphicTree.Insert (ptr, g);
+ GraphicTree.Insert (ptr, g);
+
g.RegisteredLayoutings = LayoutingType.None;
g.RegisterForLayouting (LayoutingType.Sizing | LayoutingType.ArrangeChildren);
}
@@ -572,14 +579,20 @@ namespace Crow
GraphicTree.Remove (g);
}
/// <summary> Put widget on top of other root widgets</summary>
- public void PutOnTop(GraphicObject g, bool topMost = false)
+ public void PutOnTop(GraphicObject g, bool isOverlay = false)
{
- int ptr = TopWindows;
- if (g is Window) {
- if ((g as Window).AlwaysOnTop)
- ptr = 0;
- } else if (topMost)
- ptr = 0;
+ int ptr = 0;
+ Window newW = g as Window;
+ if (newW != null) {
+ while (ptr < GraphicTree.Count) {
+ Window w = GraphicTree [ptr] as Window;
+ if (w != null) {
+ if (newW.AlwaysOnTop || !w.AlwaysOnTop)
+ break;
+ }
+ ptr++;
+ }
+ }
if (GraphicTree.IndexOf(g) > ptr)
{
lock (UpdateMutex) {