From: jpbruyere Date: Thu, 11 Jun 2015 12:02:13 +0000 (+0200) Subject: - popper (buggy) X-Git-Tag: 0.2~81 X-Git-Url: https://git.osiis.dedyn.io/?a=commitdiff_plain;h=f986e2521e113bd67a2f06b92c2ca774aa1e0937;p=jp%2Fcrow.git - popper (buggy) - many redraw issue --- diff --git a/GOLib.csproj b/GOLib.csproj index f4109a94..91937816 100644 --- a/GOLib.csproj +++ b/GOLib.csproj @@ -110,6 +110,8 @@ + + @@ -169,5 +171,6 @@ + diff --git a/README.md b/README.md index 66006dca..096b579c 100644 --- a/README.md +++ b/README.md @@ -22,3 +22,5 @@ RoadMap: - Monodevelop addin - improve inline delegates to handle all conversion and graphic tree parsing with directory navigation syntax - Make an easyly compilable example of complete application (3d mesh editor for example) + - inlined SVG with binding and c# scripting for animation + - simplified Image subElement. diff --git a/Templates/Popper.goml b/Templates/Popper.goml new file mode 100755 index 00000000..0a1d07e8 --- /dev/null +++ b/Templates/Popper.goml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/Tests/GOLIBTest_fps.cs b/Tests/GOLIBTest_fps.cs index 9bbcb1ad..5142e7c9 100644 --- a/Tests/GOLIBTest_fps.cs +++ b/Tests/GOLIBTest_fps.cs @@ -102,7 +102,7 @@ namespace test fps = (int)RenderFrequency; //labFps.Text = fps.ToString(); - labUpdate.Text = this.updateTime.ElapsedMilliseconds.ToString() + " ms"; + //labUpdate.Text = this.updateTime.ElapsedMilliseconds.ToString() + " ms"; if (frameCpt > 200) { // labFpsMin.Text = fpsMin.ToString(); diff --git a/Tests/Interfaces/fps.goml b/Tests/Interfaces/fps.goml index 7c18d4ce..50e69604 100755 --- a/Tests/Interfaces/fps.goml +++ b/Tests/Interfaces/fps.goml @@ -1,19 +1,20 @@  - - - + + + + - + + + \ No newline at end of file diff --git a/Tests/Interfaces/test4.goml b/Tests/Interfaces/test4.goml index e2fa4643..9fd33b7d 100755 --- a/Tests/Interfaces/test4.goml +++ b/Tests/Interfaces/test4.goml @@ -84,12 +84,33 @@ - + + + + + + + + + + + @@ -110,26 +131,6 @@ - - - - - - - - - Exe Tests Tests - test.GOLIBTest_4 + test.GOLIBTest_fps v4.5 ..\bin\$(configuration) obj\$(configuration) diff --git a/src/GraphicObjects/Expandable.cs b/src/GraphicObjects/Expandable.cs index 5bf535a4..369930a8 100644 --- a/src/GraphicObjects/Expandable.cs +++ b/src/GraphicObjects/Expandable.cs @@ -19,17 +19,25 @@ using System.IO; namespace go { [DefaultTemplate("#go.Templates.Expandable.goml")] - public class Expandable : TemplatedControl + public class Expandable : TemplatedContainer { bool _isExpanded; Label _caption; Image _image; - - public Container Content; + Container _contentContainer; public event EventHandler Expand; public event EventHandler Collapse; + public override GraphicObject Content { + get { + return _contentContainer == null ? null : _contentContainer.Child; + } + set { + _contentContainer.SetChild(value); + } + } + public Expandable() : base() { } @@ -38,8 +46,8 @@ namespace go { base.loadTemplate (template); + _contentContainer = this.child.FindByName ("Content") as Container; _caption = this.child.FindByName ("Caption") as Label; - Content = this.child.FindByName ("Content") as Container; _image = this.child.FindByName ("Image") as Image; if (_image == null) @@ -84,12 +92,12 @@ namespace go public virtual void onExpand(object sender, EventArgs e) { - Content.Visible = true; + _contentContainer.Visible = true; Expand.Raise (this, e); } public virtual void onCollapse(object sender, EventArgs e) { - Content.Visible = false; + _contentContainer.Visible = false; Collapse.Raise (this, e); } @@ -99,54 +107,5 @@ namespace go base.onMouseClick (sender, e); } - public override void ReadXml(System.Xml.XmlReader reader) - { - using (System.Xml.XmlReader subTree = reader.ReadSubtree ()) { - subTree.Read (); - string tmp = subTree.ReadOuterXml (); - - //seek for template tag - using (XmlReader xr = new XmlTextReader (tmp, XmlNodeType.Element, null)) { - xr.Read (); - base.ReadXml (xr); - } - //process content - using (XmlReader xr = new XmlTextReader (tmp, XmlNodeType.Element, null)) { - xr.Read (); //skip current node - - while (!xr.EOF) { - xr.Read (); //read first child - - if (!xr.IsStartElement ()) - continue; - if (xr.Name == "Template") - continue; - - Type t = Type.GetType ("go." + xr.Name); - GraphicObject go = (GraphicObject)Activator.CreateInstance (t); - - (go as IXmlSerializable).ReadXml (xr); - - Content.SetChild (go); - - xr.Read (); //closing tag - } - - } - } - } - public override void WriteXml(System.Xml.XmlWriter writer) - { - base.WriteXml(writer); - - if (Content == null) - return; - if (Content.Child == null) - return; - //TODO: if template is not the default one, we have to save it - writer.WriteStartElement(Content.Child.GetType().Name); - (Content.Child as IXmlSerializable).WriteXml(writer); - writer.WriteEndElement(); - } } } diff --git a/src/GraphicObjects/GenericStack.cs b/src/GraphicObjects/GenericStack.cs index 0b37f07b..b703f61b 100644 --- a/src/GraphicObjects/GenericStack.cs +++ b/src/GraphicObjects/GenericStack.cs @@ -158,6 +158,9 @@ namespace go } } ComputeChildrenPositions (); + //if no layouting remains in queue for item, registre for redraw + if (Interface.LayoutingQueue.Where (lq => lq.GraphicObject == this).Count () <= 0) + this.RegisterForRedraw (); }else base.UpdateLayout(layoutType); } diff --git a/src/GraphicObjects/Popper.cs b/src/GraphicObjects/Popper.cs new file mode 100644 index 00000000..0bbe3a52 --- /dev/null +++ b/src/GraphicObjects/Popper.cs @@ -0,0 +1,111 @@ +using System; + + +using System.Collections.Generic; +using System.Linq; +using System.Text; +//using OpenTK.Graphics.OpenGL; + +using Cairo; + +using winColors = System.Drawing.Color; +using System.Diagnostics; +using System.Xml.Serialization; +using OpenTK.Input; +using System.ComponentModel; +using System.Xml; +using System.IO; + +namespace go +{ + [DefaultTemplate("#go.Templates.Popper.goml")] + public class Popper : TemplatedContainer + { + bool _isPopped; + Label _caption; + Image _image; + GraphicObject _content; + + public event EventHandler Pop; + public event EventHandler Unpop; + + public override GraphicObject Content { + get { return _content; } + set { _content = value; } + } + public Popper() : base() + { + } + + protected override void loadTemplate(GraphicObject template = null) + { + base.loadTemplate (template); + + _caption = this.child.FindByName ("Caption") as Label; + _image = this.child.FindByName ("Image") as Image; + + if (_image == null) + return; + _image.SvgSub = "collapsed"; + + this.Pop += (object sender, EventArgs e) => {_image.SvgSub = "expanded";}; + this.Unpop += (object sender, EventArgs e) => {_image.SvgSub = "collapsed";}; + + } + + + [XmlAttributeAttribute()][DefaultValue("Popper")] + public string Title { + get { return _caption.Text; } + set { + if (_caption == null) + return; + _caption.Text = value; + } + } + + [XmlAttributeAttribute()][DefaultValue(false)] + public bool IsPopped + { + get { return _isPopped; } + set + { + if (value == _isPopped) + return; + + _isPopped = value; + + if (_isPopped) + onPop (this, null); + else + onUnpop (this, null); + + registerForGraphicUpdate(); + } + } + + public virtual void onPop(object sender, EventArgs e) + { + if (Content != null) { + Rectangle r = this.ScreenCoordinates (this.Slot); + Content.Visible = true; + Content.Left = r.Left; + Content.Top = r.Bottom; + TopContainer.AddWidget (Content); + } + Pop.Raise (this, e); + } + public virtual void onUnpop(object sender, EventArgs e) + { + TopContainer.DeleteWidget (Content); + Unpop.Raise (this, e); + } + + public override void onMouseClick (object sender, MouseButtonEventArgs e) + { + IsPopped = !IsPopped; + base.onMouseClick (sender, e); + } + + } +} diff --git a/src/GraphicObjects/TemplatedContainer.cs b/src/GraphicObjects/TemplatedContainer.cs new file mode 100644 index 00000000..4d8eb832 --- /dev/null +++ b/src/GraphicObjects/TemplatedContainer.cs @@ -0,0 +1,95 @@ +// +// TemplatedContainer.cs +// +// Author: +// Jean-Philippe Bruyère +// +// Copyright (c) 2015 jp +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +using System; +using System.Xml.Serialization; +using System.Xml; + +namespace go +{ + public abstract class TemplatedContainer : TemplatedControl + { + [XmlIgnore] + public abstract GraphicObject Content{ get; set;} + + protected override void loadTemplate (GraphicObject template) + { + base.loadTemplate (template); + } + public TemplatedContainer () : base() + { + } + public override GraphicObject FindByName (string nameToFind) + { + if (Name == nameToFind) + return this; + + return Content == null ? null : Content.FindByName (nameToFind); + } + public override void ReadXml(System.Xml.XmlReader reader) + { + using (System.Xml.XmlReader subTree = reader.ReadSubtree ()) { + subTree.Read (); + string tmp = subTree.ReadOuterXml (); + + //seek for template tag + using (XmlReader xr = new XmlTextReader (tmp, XmlNodeType.Element, null)) { + xr.Read (); + base.ReadXml (xr); + } + //process content + using (XmlReader xr = new XmlTextReader (tmp, XmlNodeType.Element, null)) { + xr.Read (); //skip current node + + while (!xr.EOF) { + xr.Read (); //read first child + + if (!xr.IsStartElement ()) + continue; + if (xr.Name == "Template") + continue; + + Type t = Type.GetType ("go." + xr.Name); + GraphicObject go = (GraphicObject)Activator.CreateInstance (t); + + (go as IXmlSerializable).ReadXml (xr); + + Content = go; + + xr.Read (); //closing tag + } + + } + } + } + public override void WriteXml(System.Xml.XmlWriter writer) + { + base.WriteXml(writer); + + if (Content == null) + return; + //TODO: if template is not the default one, we have to save it + writer.WriteStartElement(Content.GetType().Name); + (Content as IXmlSerializable).WriteXml(writer); + writer.WriteEndElement(); + } + } +} + diff --git a/src/OpenTKGameWindow.cs b/src/OpenTKGameWindow.cs index 3ee7e647..99fba8c5 100755 --- a/src/OpenTKGameWindow.cs +++ b/src/OpenTKGameWindow.cs @@ -77,7 +77,7 @@ namespace go public void AddWidget(GraphicObject g) { g.Parent = this; - GraphicObjects.Add (g); + GraphicObjects.Insert (0, g); g.RegisterForLayouting ((int)LayoutingType.Sizing); } @@ -246,7 +246,7 @@ namespace go lock (redrawClip) { if (redrawClip.count > 0) { // #if DEBUG_CLIP_RECTANGLE -// redrawClip.stroke (ctx, new Color(1.0,0,0,0.3)); + redrawClip.stroke (ctx, new Color(1.0,0,0,0.3)); // #endif redrawClip.clearAndClip (ctx);//rajouté après, tester si utile