<Compile Include="src\GraphicObjects\PrivateContainer.cs" />\r
<Compile Include="src\GraphicObjects\TemplatedContainer.cs" />\r
<Compile Include="src\GraphicObjects\Popper.cs" />\r
+ <Compile Include="src\GraphicObjects\Scrollbar.cs" />\r
</ItemGroup>\r
<ItemGroup>\r
<Reference Include="System" />\r
<EmbeddedResource Include="Templates\Window.goml" />\r
<EmbeddedResource Include="Images\Icons\tetra.png" />\r
<EmbeddedResource Include="Images\Icons\exit.svg" />\r
+ <EmbeddedResource Include="Templates\Scrollbar.goml" />\r
</ItemGroup>\r
</Project>\r
--- /dev/null
+<?xml version="1.0"?>\r
+<Border BorderWidth="1" BorderColor="LightGray">\r
+ <GenericStack Orientation="{Orientation}" Width="0" Height="0">\r
+ <Button Width="12" Height="12" MouseClick="onScrollBack">\r
+ <Image Margin="1" Path="#go.Images.Icons.updown.svg" SvgSub="up"/>\r
+ </Button>\r
+ <Slider Name="Slider" Width="{Width}" Height="{Height}" Orientation="{Orientation}"/>\r
+ <Button Width="12" Height="12" MouseClick="onScrollForth">\r
+ <Image Margin="1" Path="#go.Images.Icons.updown.svg" SvgSub="down"/>\r
+ </Button>\r
+ </GenericStack>\r
+</Border>
\ No newline at end of file
if (_fps == value)\r
return;\r
\r
- int oldVal = _fps;\r
_fps = value;\r
\r
if (_fps > fpsMax) {\r
fpsMax = _fps;\r
- ValueChanged.Raise(this, new ValueChangeEventArgs ("fpsMax", fpsMax, _fps));\r
+ ValueChanged.Raise(this, new ValueChangeEventArgs ("fpsMax", fpsMax));\r
} else if (_fps < fpsMin) {\r
- ValueChanged.Raise(this, new ValueChangeEventArgs ("fpsMin", fpsMin, _fps));\r
fpsMin = _fps;\r
+ ValueChanged.Raise(this, new ValueChangeEventArgs ("fpsMin", fpsMin));\r
}\r
\r
- ValueChanged.Raise(this, new ValueChangeEventArgs ("fps", oldVal, _fps));\r
+ ValueChanged.Raise(this, new ValueChangeEventArgs ("fps", _fps));\r
}\r
}\r
\r
if (i > 50)\r
break;\r
}\r
- ValueChanged.Raise(this, new ValueChangeEventArgs ("TestList", null, TestList));\r
+ ValueChanged.Raise(this, new ValueChangeEventArgs ("TestList", TestList));\r
}\r
void pFps_mousemove(object sender, MouseMoveEventArgs e)\r
{\r
if (_fps == value)\r
return;\r
\r
- int oldVal = _fps;\r
_fps = value;\r
\r
if (_fps > fpsMax) {\r
fpsMax = _fps;\r
- ValueChanged.Raise(this, new ValueChangeEventArgs ("fpsMax", fpsMax, _fps));\r
+ ValueChanged.Raise(this, new ValueChangeEventArgs ("fpsMax", fpsMax));\r
} else if (_fps < fpsMin) {\r
- ValueChanged.Raise(this, new ValueChangeEventArgs ("fpsMin", fpsMin, _fps));\r
fpsMin = _fps;\r
+ ValueChanged.Raise(this, new ValueChangeEventArgs ("fpsMin", fpsMin));\r
}\r
\r
if (ValueChanged != null)\r
- ValueChanged.Raise(this, new ValueChangeEventArgs ("fps", oldVal, _fps));\r
-\r
- //ValueChanged.Raise (this, new ValueChangeEventArgs ("fps", oldVal, _fps));\r
+ ValueChanged.Raise(this, new ValueChangeEventArgs ("fps", _fps));\r
}\r
}\r
string name = "testName";\r
if (_fps == value)\r
return;\r
\r
- int oldVal = _fps;\r
_fps = value;\r
\r
if (_fps > fpsMax) {\r
fpsMax = _fps;\r
- ValueChanged.Raise(this, new ValueChangeEventArgs ("fpsMax", fpsMax, _fps));\r
+ ValueChanged.Raise(this, new ValueChangeEventArgs ("fpsMax", fpsMax));\r
} else if (_fps < fpsMin) {\r
- ValueChanged.Raise(this, new ValueChangeEventArgs ("fpsMin", fpsMin, _fps));\r
fpsMin = _fps;\r
+ ValueChanged.Raise(this, new ValueChangeEventArgs ("fpsMin", fpsMin));\r
}\r
\r
if (ValueChanged != null)\r
- ValueChanged.Raise(this, new ValueChangeEventArgs ("fps", oldVal, _fps));\r
-\r
- //ValueChanged.Raise (this, new ValueChangeEventArgs ("fps", oldVal, _fps));\r
+ ValueChanged.Raise(this, new ValueChangeEventArgs ("fps", _fps));\r
}\r
}\r
string name = "testName";\r
--- /dev/null
+#define MONO_CAIRO_DEBUG_DISPOSE\r
+#define DEBUG_CLIP_RECTANGLE\r
+\r
+\r
+using System;\r
+using System.Runtime.InteropServices;\r
+using OpenTK;\r
+using OpenTK.Graphics.OpenGL;\r
+using OpenTK.Input;\r
+\r
+using System.Diagnostics;\r
+\r
+//using GGL;\r
+using go;\r
+using System.Threading;\r
+\r
+\r
+namespace test2\r
+{\r
+ class GOLIBTest_Scrollbar : OpenTKGameWindow\r
+ {\r
+ public GOLIBTest_Scrollbar ()\r
+ : base(1024, 600,"test")\r
+ {}\r
+\r
+ Group g;\r
+\r
+ protected override void OnLoad (EventArgs e)\r
+ {\r
+ base.OnLoad (e);\r
+ LoadInterface("Interfaces/testScrollbar.goml", out g);\r
+\r
+ }\r
+ protected override void OnRenderFrame (FrameEventArgs e)\r
+ {\r
+ GL.Clear (ClearBufferMask.ColorBufferBit);\r
+ base.OnRenderFrame (e);\r
+ SwapBuffers ();\r
+ }\r
+\r
+ protected override void OnUpdateFrame (FrameEventArgs e)\r
+ {\r
+ base.OnUpdateFrame (e);\r
+ }\r
+\r
+ [STAThread]\r
+ static void Main ()\r
+ {\r
+ Console.WriteLine ("starting example");\r
+\r
+ using (GOLIBTest_Scrollbar win = new GOLIBTest_Scrollbar( )) {\r
+ win.Run (30.0);\r
+ }\r
+ }\r
+ }\r
+}
\ No newline at end of file
if (_fps == value)\r
return;\r
\r
- int oldVal = _fps;\r
_fps = value;\r
\r
if (_fps > fpsMax) {\r
fpsMax = _fps;\r
- ValueChanged.Raise(this, new ValueChangeEventArgs ("fpsMax", fpsMax, _fps));\r
+ ValueChanged.Raise(this, new ValueChangeEventArgs ("fpsMax", fpsMax));\r
} else if (_fps < fpsMin) {\r
- ValueChanged.Raise(this, new ValueChangeEventArgs ("fpsMin", fpsMin, _fps));\r
fpsMin = _fps;\r
+ ValueChanged.Raise(this, new ValueChangeEventArgs ("fpsMin", fpsMin));\r
}\r
\r
if (ValueChanged != null)\r
- ValueChanged.Raise(this, new ValueChangeEventArgs ("fps", oldVal, _fps));\r
-\r
- //ValueChanged.Raise (this, new ValueChangeEventArgs ("fps", oldVal, _fps));\r
+ ValueChanged.Raise(this, new ValueChangeEventArgs ("fps", _fps));\r
}\r
}\r
string name = "testName";\r
if (_fps == value)\r
return;\r
\r
- int oldVal = _fps;\r
_fps = value;\r
\r
if (_fps > fpsMax) {\r
fpsMax = _fps;\r
- ValueChanged.Raise(this, new ValueChangeEventArgs ("fpsMax", fpsMax, _fps));\r
+ ValueChanged.Raise(this, new ValueChangeEventArgs ("fpsMax", fpsMax));\r
} else if (_fps < fpsMin) {\r
- ValueChanged.Raise(this, new ValueChangeEventArgs ("fpsMin", fpsMin, _fps));\r
fpsMin = _fps;\r
+ ValueChanged.Raise(this, new ValueChangeEventArgs ("fpsMin", fpsMin));\r
}\r
\r
if (ValueChanged != null)\r
- ValueChanged.Raise(this, new ValueChangeEventArgs ("fps", oldVal, _fps));\r
-\r
- //ValueChanged.Raise (this, new ValueChangeEventArgs ("fps", oldVal, _fps));\r
+ ValueChanged.Raise(this, new ValueChangeEventArgs ("fps", _fps));\r
}\r
}\r
string name = "testName";\r
<HorizontalStack Name="hs0"\r
WidgetSpacing="1" \r
VerticalAlignment="Top">\r
+ <Slider Orientation="Vertical" Height="300" Width="10" Background="Transparent" />\r
<VerticalStack Name="vs1" Spacing="5">\r
<Slider Height="10" Width="300" BorderWidth="1" Background="Transparent" />\r
<Label Name="labMouse" Text="MousePos"/>\r
--- /dev/null
+<?xml version="1.0"?>\r
+<Group Name="TopContainer" Width="400" Height="400"\r
+ Focusable="True" Background="Gray">\r
+\r
+ <Scrollbar Orientation="Vertical" Width="16"></Scrollbar>\r
+</Group>
\ No newline at end of file
<OutputType>Exe</OutputType>
<RootNamespace>Tests</RootNamespace>
<AssemblyName>Tests</AssemblyName>
- <StartupObject>test.GOLIBTest_4</StartupObject>
+ <StartupObject>test2.GOLIBTest_Scrollbar</StartupObject>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<OutputPath>..\bin\$(configuration)</OutputPath>
<IntermediateOutputPath>obj\$(configuration)</IntermediateOutputPath>
<Compile Include="GOLIBTest_Label.cs" />
<Compile Include="GOLIBTest_Window.cs" />
<Compile Include="GOLIBTest_Container.cs" />
+ <Compile Include="GOLIBTest_Scrollbar.cs" />
</ItemGroup>
<ItemGroup>
<None Include="image\u.svg">
<None Include="Interfaces\testContainer.goml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
+ <None Include="Interfaces\testScrollbar.goml">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </None>
</ItemGroup>
<ItemGroup>
<Folder Include="Interfaces\" />
if (!srcValueType.IsValueType)
il.Emit(OpCodes.Castclass, srcValueType);
+ else if (piTarget.PropertyType != srcValueType)
+ il.Emit(OpCodes.Callvirt, GetConvertMethod( piTarget.PropertyType ));
else
- il.Emit( OpCodes.Callvirt, GetConvertMethod( piTarget.PropertyType ));
+ il.Emit(OpCodes.Unbox_Any, piTarget.PropertyType);
// if (piTarget.PropertyType == typeof(string))
// else if ( srcValueType != piTarget.PropertyType)
//
public Checkbox() : base()\r
{\r
} \r
- protected override void loadDefaultValues ()\r
- {\r
- base.loadDefaultValues ();\r
- }\r
+\r
protected override void loadTemplate(GraphicObject template = null)\r
{ \r
base.loadTemplate (template);\r
IsChecked = !IsChecked;\r
base.onMouseClick (sender, e);\r
}\r
-\r
- public override void ReadXml (System.Xml.XmlReader reader)\r
- {\r
- base.ReadXml (reader);\r
- }\r
}\r
}\r
\r
namespace go\r
{\r
- public class GraphicObject : IXmlSerializable, ILayoutable\r
+ public class GraphicObject : IXmlSerializable, ILayoutable, IValueChange\r
{\r
+ #region IValueChange implementation\r
+ public event EventHandler<ValueChangeEventArgs> ValueChanged;\r
+ void NotifyValueChanged(string MemberName, object _value)\r
+ {\r
+ ValueChanged.Raise(this, new ValueChangeEventArgs(MemberName, _value)); \r
+ }\r
+ #endregion\r
+\r
#region CTOR\r
public GraphicObject ()\r
{\r
[XmlAttributeAttribute()][DefaultValue("unamed")]\r
public virtual string Name {\r
get { return _name; }\r
- set { _name = value; }\r
+ set { \r
+ if (_name == value)\r
+ return;\r
+ _name = value; \r
+ NotifyValueChanged("Name", _verticalAlignment);\r
+ }\r
}\r
[XmlAttributeAttribute()][DefaultValue(VerticalAlignment.Center)]\r
public virtual VerticalAlignment VerticalAlignment {\r
return;\r
\r
_verticalAlignment = value; \r
-\r
-// if (Top > 0)\r
+ NotifyValueChanged("VerticalAlignment", _verticalAlignment);\r
}\r
}\r
[XmlAttributeAttribute()][DefaultValue(HorizontalAlignment.Center)]\r
public virtual HorizontalAlignment HorizontalAlignment {\r
get { return _horizontalAlignment; }\r
- set { _horizontalAlignment = value; }\r
+ set { \r
+ if (_horizontalAlignment == value)\r
+ return;\r
+\r
+ _horizontalAlignment = value; \r
+ NotifyValueChanged("HorizontalAlignment", _horizontalAlignment);\r
+ }\r
}\r
[XmlAttributeAttribute()][DefaultValue(0)]\r
public virtual int Left {\r
return;\r
\r
Bounds.X = value;\r
-\r
+ NotifyValueChanged ("Left", Bounds.X);\r
this.RegisterForLayouting ((int)LayoutingType.X);\r
}\r
}\r
return;\r
\r
Bounds.Y = value;\r
-\r
+ NotifyValueChanged ("Top", Bounds.Y);\r
this.RegisterForLayouting ((int)LayoutingType.Y);\r
}\r
}\r
return;\r
\r
Bounds.Width = value;\r
-\r
+ NotifyValueChanged ("Width", Bounds.Width);\r
this.RegisterForLayouting ((int)LayoutingType.Width);\r
}\r
}\r
return;\r
\r
Bounds.Height = value;\r
-\r
+ NotifyValueChanged ("Height", Bounds.Height);\r
this.RegisterForLayouting ((int)LayoutingType.Height);\r
}\r
}\r
if (value == _actualValue)
return;
- int oldV = Convert.ToInt32(_actualValue);
-
if (value < minValue)
_actualValue = minValue;
else if (value > maxValue)
else
_actualValue = value;
- onValueChanged(this,new ValueChangeEventArgs("Value", oldV, Convert.ToInt32( _actualValue)));
+ onValueChanged(this,new ValueChangeEventArgs("Value", Convert.ToInt32( _actualValue)));
registerForGraphicUpdate();
}
}
--- /dev/null
+using System;\r
+\r
+\r
+using System.Collections.Generic;\r
+using System.Linq;\r
+using System.Text;\r
+//using OpenTK.Graphics.OpenGL;\r
+\r
+using Cairo;\r
+\r
+using winColors = System.Drawing.Color;\r
+using System.Diagnostics;\r
+using System.Xml.Serialization;\r
+using OpenTK.Input;\r
+using System.ComponentModel;\r
+\r
+namespace go\r
+{\r
+ [DefaultTemplate("#go.Templates.Scrollbar.goml")]\r
+ public class Scrollbar : TemplatedControl, IValueChange\r
+ {\r
+ #region IValueChange implementation\r
+ public event EventHandler<ValueChangeEventArgs> ValueChanged;\r
+ #endregion\r
+\r
+ Orientation _orientation;\r
+ Slider _slider;\r
+\r
+ public Scrollbar() : base()\r
+ {\r
+ } \r
+\r
+ protected override void loadTemplate(GraphicObject template = null)\r
+ { \r
+ base.loadTemplate (template);\r
+ _slider = this.child.FindByName ("Slider") as Slider;\r
+ }\r
+\r
+ [XmlAttributeAttribute()][DefaultValue(Orientation.Vertical)]\r
+ public virtual Orientation Orientation\r
+ {\r
+ get { return _orientation; }\r
+ set { \r
+ if (_orientation == value)\r
+ return;\r
+ _orientation = value;\r
+ ValueChanged.Raise(this, new ValueChangeEventArgs ("Orientation", _orientation));\r
+ }\r
+ }\r
+ public void onScrollBack (object sender, MouseButtonEventArgs e)\r
+ {\r
+ _slider.Value -= _slider.LargeIncrement;\r
+ }\r
+ public void onScrollForth (object sender, MouseButtonEventArgs e)\r
+ {\r
+ _slider.Value += _slider.LargeIncrement;\r
+ }\r
+ }\r
+}\r
\r
#region private fields\r
Rectangle cursor;\r
- int _cursorWidth;\r
+ int _cursorSize;\r
Color _cursorColor;\r
+ Orientation _orientation;\r
bool holdCursor = false;\r
#endregion\r
\r
}\r
}\r
[XmlAttributeAttribute()][DefaultValue(20)]\r
- public virtual int CursorWidth {\r
- get { return _cursorWidth; }\r
+ public virtual int CursorSize {\r
+ get { return _cursorSize; }\r
set {\r
- _cursorWidth = value;\r
+ _cursorSize = value;\r
registerForGraphicUpdate ();\r
}\r
}\r
+ [XmlAttributeAttribute()][DefaultValue(Orientation.Horizontal)]\r
+ public virtual Orientation Orientation\r
+ {\r
+ get { return _orientation; }\r
+ set { _orientation = value; }\r
+ }\r
#endregion\r
\r
#region GraphicObject Overrides\r
base.onDraw (gr);\r
\r
Rectangle r = ClientRectangle;\r
- PointD pStart = r.TopLeft + new Point(cursor.Width/2, r.Height / 2);\r
- PointD pEnd = r.TopRight + new Point(-cursor.Width/2, r.Height / 2);\r
+ PointD pStart;\r
+ PointD pEnd;\r
+ if (_orientation == Orientation.Horizontal) {\r
+ pStart = r.TopLeft + new Point (_cursorSize / 2, r.Height / 2);\r
+ pEnd = r.TopRight + new Point (-_cursorSize / 2, r.Height / 2);\r
+ } else {\r
+ pStart = r.TopLeft + new Point (r.Width / 2, _cursorSize / 2);\r
+ pEnd = r.BottomLeft + new Point (r.Width / 2,- _cursorSize / 2);\r
+ }\r
\r
DrawGraduations (gr, pStart,pEnd);\r
\r
void computeCursorPosition()\r
{ \r
Rectangle r = ClientRectangle;\r
-\r
- cursor = new Rectangle(new Size(_cursorWidth,(int) (r.Height)));\r
-\r
- PointD p1 = r.TopLeft + new Point(cursor.Width/2, r.Height / 2);\r
-\r
- unity = (double)(r.Width - cursor.Width) / (Maximum - Minimum);\r
-\r
- cursor.TopLeft = new Point(r.Left + (int)(Value * unity),\r
- (int)(p1.Y - cursor.Height / 2)); \r
+ PointD p1; \r
+\r
+ if (_orientation == Orientation.Horizontal) {\r
+ cursor = new Rectangle (new Size (_cursorSize, (int)(r.Height)));\r
+ p1 = r.TopLeft + new Point (_cursorSize / 2, r.Height / 2);\r
+ unity = (double)(r.Width - _cursorSize) / (Maximum - Minimum);\r
+ cursor.TopLeft = new Point (r.Left + (int)(Value * unity),\r
+ (int)(p1.Y - cursor.Height / 2));\r
+ } else {\r
+ cursor = new Rectangle (new Size ((int)(r.Width), _cursorSize));\r
+ p1 = r.TopLeft + new Point (r.Width / 2, _cursorSize / 2);\r
+ unity = (double)(r.Height - _cursorSize) / (Maximum - Minimum);\r
+ cursor.TopLeft = new Point ((int)(p1.X - r.Width / 2),\r
+ r.Top + (int)(Value * unity)); \r
+ }\r
}\r
\r
#region mouse handling\r
{\r
base.onMouseButtonDown (sender, e);\r
\r
- Rectangle cursInScreenCoord = ScreenCoordinates(cursor+Slot.Position);\r
- if (cursInScreenCoord.ContainsOrIsEqual(e.Position))\r
+ Rectangle cursInScreenCoord = ScreenCoordinates (cursor + Slot.Position);\r
+ if (cursInScreenCoord.ContainsOrIsEqual (e.Position))\r
holdCursor = true;\r
- else if (e.Position.X < cursInScreenCoord.Left)\r
- Value -= LargeIncrement;\r
- else\r
- Value += LargeIncrement;\r
+ else if (_orientation == Orientation.Horizontal) {\r
+ if (e.Position.X < cursInScreenCoord.Left)\r
+ Value -= LargeIncrement;\r
+ else\r
+ Value += LargeIncrement;\r
+ } else {\r
+ if (e.Position.Y < cursInScreenCoord.Top)\r
+ Value -= LargeIncrement;\r
+ else\r
+ Value += LargeIncrement;\r
+ }\r
}\r
public override void onMouseButtonUp (object sender, OpenTK.Input.MouseButtonEventArgs e)\r
{\r
}\r
public override void onMouseMove (object sender, OpenTK.Input.MouseMoveEventArgs e)\r
{\r
- if (holdCursor)\r
- Value += (double)e.XDelta / unity;\r
+ if (holdCursor) {\r
+ if (_orientation == Orientation.Horizontal)\r
+ Value += (double)e.XDelta / unity;\r
+ else\r
+ Value += (double)e.YDelta / unity;\r
+ }\r
\r
base.onMouseMove (sender, e);\r
}\r
\r
public event EventHandler<TextChangeEventArgs> TextChanged;\r
\r
- public virtual void onTextChanged(Object sender, TextChangeEventArgs e)\r
+ public virtual void OnTextChanged(Object sender, TextChangeEventArgs e)\r
{\r
TextChanged.Raise (this, e);\r
}\r
break;\r
case Key.Enter:\r
case Key.KeypadEnter:\r
- onTextChanged(this,new TextChangeEventArgs(Text));\r
+ OnTextChanged(this,new TextChangeEventArgs(Text));\r
break;\r
case Key.Escape:\r
Text = "";\r
public class ValueChangeEventArgs: EventArgs
{
public string MemberName;
- public object OldValue;
public object NewValue;
- public ValueChangeEventArgs (string _memberName, object _oldValue, object _newValue) : base()
+ public ValueChangeEventArgs (string _memberName, object _newValue) : base()
{
MemberName = _memberName;
- OldValue = _oldValue;
NewValue = _newValue;
}
}