aboutsummaryrefslogtreecommitdiffstatsci
diff options
context:
space:
mode:
authorjpbruyere <jp.bruyere@hotmail.com>2015-06-11 14:02:13 +0200
committerjpbruyere <jp.bruyere@hotmail.com>2015-06-11 14:02:13 +0200
commitf986e2521e113bd67a2f06b92c2ca774aa1e0937 (patch)
treef039053c4dbd77cb5b1e199e5f9f17bd27a62ce7
parent24cf921e07c87c5491c68f3f59f6664410333dbd (diff)
- popper (buggy)
- many redraw issue
-rw-r--r--GOLib.csproj3
-rw-r--r--README.md2
-rwxr-xr-xTemplates/Popper.goml7
-rw-r--r--Tests/GOLIBTest_fps.cs2
-rwxr-xr-xTests/Interfaces/fps.goml18
-rwxr-xr-xTests/Interfaces/test4.goml45
-rw-r--r--Tests/Tests.csproj2
-rw-r--r--src/GraphicObjects/Expandable.cs69
-rw-r--r--src/GraphicObjects/GenericStack.cs3
-rw-r--r--src/GraphicObjects/Popper.cs111
-rw-r--r--src/GraphicObjects/TemplatedContainer.cs95
-rwxr-xr-xsrc/OpenTKGameWindow.cs4
12 files changed, 272 insertions, 89 deletions
diff --git a/GOLib.csproj b/GOLib.csproj
index f4109a94..91937816 100644
--- a/GOLib.csproj
+++ b/GOLib.csproj
@@ -110,6 +110,8 @@
<Compile Include="src\GraphicObjects\RadioButton.cs" />
<Compile Include="src\GraphicObjects\Expandable.cs" />
<Compile Include="src\GraphicObjects\PrivateContainer.cs" />
+ <Compile Include="src\GraphicObjects\TemplatedContainer.cs" />
+ <Compile Include="src\GraphicObjects\Popper.cs" />
</ItemGroup>
<ItemGroup>
<Reference Include="System" />
@@ -169,5 +171,6 @@
<EmbeddedResource Include="Templates\Expandable.goml" />
<EmbeddedResource Include="Images\Icons\expandable.svg" />
<EmbeddedResource Include="Templates\Checkbox2.goml" />
+ <EmbeddedResource Include="Templates\Popper.goml" />
</ItemGroup>
</Project>
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 @@
+<?xml version="1.0"?>
+<Border BorderWidth="1" BorderColor="LightGray" Height="50" Width="100" MouseClick="onMouseClick">
+ <HorizontalStack Name="hsTemplateExpander" Spacing="1" Focusable="false" Height="-1" Width="0">
+ <Image Name="Image" Margin="3" Width="16" Height="16" Path="#go.Images.Icons.expandable.svg"/>
+ <Label Name="Caption"/>
+ </HorizontalStack>
+</Border> \ 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 @@
<?xml version="1.0"?>
<Container Name="MainGrp"
- HorizontalAlignment="Right" VerticalAlignment="Bottom"
+
Margin="10" Focusable="True" Fit="True">
-
- <VerticalStack Fit="True" BorderWidth="1" Margin="5" WidgetSpacing="4">
- <HorizontalStack>
+ <Expandable Width="150" Background="Green" Margin="2">
+<!-- HorizontalAlignment="Right" VerticalAlignment="Bottom"-->
+<!-- <VerticalStack Fit="True" BorderWidth="1" Margin="5" WidgetSpacing="4">-->
+<!-- <HorizontalStack>
<Label Text="Update:" FontColor="White" VerticalAlignment="Center" />
<Label Name="labUpdate" Text="xxxx" FontSize="12" Width="60" TextAlignment="Center" Background="DarkGreen"/>
- </HorizontalStack>
+ </HorizontalStack>-->
<HorizontalStack>
<Label Text="Fps:" Width = "30" VerticalAlignment="Center" TextAlignment="LeftCenter"/>
<Label Name="labFps" Text="{fps}" Font="droid bold, 12"
TextAlignment="Center" Background="AoEnglish"/>
</HorizontalStack>
- <HorizontalStack>
+<!-- <HorizontalStack>
<Label Text="Min:" Width = "30" />
<Label Name="labFpsMin" Text="{fpsMin}" Font="droid bold, 12"
TextAlignment="Center" Background="AoEnglish"/>
@@ -22,6 +23,7 @@
<Label Text="Max:" Width = "30"/>
<Label Name="labFpsMax" Text="{fpsMax}" Font="droid bold, 12"
TextAlignment="Center" Background="AoEnglish"/>
- </HorizontalStack>
- </VerticalStack>
+ </HorizontalStack>-->
+<!-- </VerticalStack>-->
+ </Expandable>
</Container> \ 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 @@
</GroupBox>
<Slider Height="10" Width="300" BorderWidth="1" Background="Transparent" />
<GraduatedSlider Name="slider" Height="30" Width="300" Foreground="BlueBell"/>
-
</VerticalStack>
<VerticalStack Width="-1" Height="-1" BorderWidth="1" Margin="5" WidgetSpacing="4">
<Button Margin="1" Width="150" Height="100">
- <Image Path="#Tests.image.tetra.png"/>
+ <Image Path="#Tests.image.tetra.png"/>
</Button>
+ <Popper>
+ <Image Fit="true" Path="#Tests.image.tetra.png"/>
+ </Popper>
+ <HorizontalStack>
+ <Label Text="Update" FontColor="White"/>
+ <Label Name="labUpdate" Text="xxxx" FontSize="16" Width="60" TextAlignment="Center" Background="DarkGreen"/>
+ </HorizontalStack>
+ <HorizontalStack>
+ <Label Text="Fps:" Width = "30"/>
+ <Label Name="labFps" Text="{fps}" Font="droid bold, 14"
+ TextAlignment="Center" Background="AoEnglish"/>
+ </HorizontalStack>
+ <HorizontalStack>
+ <Label Text="Min:" Width = "30"/>
+ <Label Name="labFpsMin" Text="{fpsMin}" Font="droid bold, 14"
+ TextAlignment="Center" Background="AoEnglish"/>
+ </HorizontalStack>
+ <HorizontalStack>
+ <Label Text="Max:" Width = "30"/>
+ <Label Name="labFpsMax" Text="{fpsMax}" Font="droid bold, 14"
+ TextAlignment="Center" Background="AoEnglish"/>
+ </HorizontalStack>
<Expandable Name="expander" Width="150" Height="-1">
<VerticalStack Name="vsExpanded" Width="100">
<Checkbox Name="chk1"/>
@@ -110,26 +131,6 @@
<Checkbox Name="chk2"/>
</VerticalStack>
</Expandable>
-
- <HorizontalStack>
- <Label Text="Update" FontColor="White"/>
- <Label Name="labUpdate" Text="xxxx" FontSize="16" Width="60" TextAlignment="Center" Background="DarkGreen"/>
- </HorizontalStack>
- <HorizontalStack>
- <Label Text="Fps:" Width = "30"/>
- <Label Name="labFps" Text="{fps}" Font="droid bold, 14"
- TextAlignment="Center" Background="AoEnglish"/>
- </HorizontalStack>
- <HorizontalStack>
- <Label Text="Min:" Width = "30"/>
- <Label Name="labFpsMin" Text="{fpsMin}" Font="droid bold, 14"
- TextAlignment="Center" Background="AoEnglish"/>
- </HorizontalStack>
- <HorizontalStack>
- <Label Text="Max:" Width = "30"/>
- <Label Name="labFpsMax" Text="{fpsMax}" Font="droid bold, 14"
- TextAlignment="Center" Background="AoEnglish"/>
- </HorizontalStack>
</VerticalStack>
<Scroller Background="DimGray" Height="350" Width="150"
diff --git a/Tests/Tests.csproj b/Tests/Tests.csproj
index 674e9325..1dab8024 100644
--- a/Tests/Tests.csproj
+++ b/Tests/Tests.csproj
@@ -8,7 +8,7 @@
<OutputType>Exe</OutputType>
<RootNamespace>Tests</RootNamespace>
<AssemblyName>Tests</AssemblyName>
- <StartupObject>test.GOLIBTest_4</StartupObject>
+ <StartupObject>test.GOLIBTest_fps</StartupObject>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<OutputPath>..\bin\$(configuration)</OutputPath>
<IntermediateOutputPath>obj\$(configuration)</IntermediateOutputPath>
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 <jp.bruyere@hotmail.com>
+//
+// 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 <http://www.gnu.org/licenses/>.
+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