protected override void OnLoad (EventArgs e)
{
base.OnLoad (e);
-
- foreach (Color c in Color.ColorDic.Values) {
- if (string.IsNullOrEmpty(c.htmlCode))
- Console.WriteLine ("no htmlcode for {0}", c.Name);
- else if (c.htmlCode.Substring(1) != c.HtmlCode)
- Console.WriteLine ("{2} orig: {0} comp: {1}",c.htmlCode, c.HtmlCode, c.Name);
- }
+//
+// foreach (Color c in Color.ColorDic.Values) {
+// if (string.IsNullOrEmpty(c.htmlCode))
+// Console.WriteLine ("no htmlcode for {0}", c.Name);
+// else if (c.htmlCode.Substring(1) != c.HtmlCode)
+// Console.WriteLine ("{2} orig: {0} comp: {1}",c.htmlCode, c.HtmlCode, c.Name);
+// }
Commands = new List<Crow.Command> (new Crow.Command[] {
this.KeyDown += KeyboardKeyDown1;
- //testFiles = new string [] { @"Interfaces/Divers/welcome.crow" };
- testFiles = new string [] { @"Interfaces/Divers/colorPicker.crow" };
+ testFiles = new string [] { @"Interfaces/Divers/welcome.crow" };
+ //testFiles = new string [] { @"Interfaces/Divers/colorPicker.crow" };
testFiles = testFiles.Concat (Directory.GetFiles (@"Interfaces/GraphicObject", "*.crow")).ToArray ();
testFiles = testFiles.Concat (Directory.GetFiles (@"Interfaces/Container", "*.crow")).ToArray ();
testFiles = testFiles.Concat (Directory.GetFiles (@"Interfaces/Group", "*.crow")).ToArray ();
cc.B = int.Parse (s.Substring (5, 2), System.Globalization.NumberStyles.HexNumber) / 255.0;
if (s.Length > 7)
cc.A = int.Parse (s.Substring (7, 2), System.Globalization.NumberStyles.HexNumber) / 255.0;
+ else
+ cc.A = 1.0;
return cc;
}
public static Cairo.PointD Multiply(this Cairo.PointD p1, double v){
return new Cairo.PointD(p1.X * v, p1.Y * v);
}
- public static void DrawCote(this Cairo.Context ctx, Cairo.PointD p1, Cairo.PointD p2, double stroke = 1.0)
- {
- const double arrowWidth = 4.0;
- const double arrowLength = 10.0;
-
+ public static void DrawCote(this Cairo.Context ctx, Cairo.PointD p1, Cairo.PointD p2,
+ double stroke = 1.0, bool fill = false, double arrowWidth = 3.0, double arrowLength = 7.0)
+ {
Cairo.PointD vDir = p2.Substract(p1);
vDir = vDir.GetNormalized ();
Cairo.PointD vPerp = vDir.GetPerp ();
ctx.MoveTo (p1);
ctx.LineTo (pA0.Add (vA));
- ctx.LineTo (pA0.Substract (vA));
+ if (fill)
+ ctx.LineTo (pA0.Substract (vA));
+ else
+ ctx.MoveTo (pA0.Substract (vA));
+
ctx.LineTo (p1);
ctx.MoveTo (p2);
ctx.LineTo (pA1.Add (vA));
- ctx.LineTo (pA1.Substract (vA));
+ if (fill)
+ ctx.LineTo (pA1.Substract (vA));
+ else
+ ctx.MoveTo (pA1.Substract (vA));
ctx.LineTo (p2);
- ctx.Fill ();
+ if (fill)
+ ctx.Fill ();
ctx.MoveTo (p1);
ctx.LineTo (p2);
ctx.LineWidth = stroke;
ctx.Stroke ();
+ }
+ public static void DrawCoteInverse(this Cairo.Context ctx, Cairo.PointD p1, Cairo.PointD p2,
+ double stroke = 1.0, bool fill = false, double arrowWidth = 3.0, double arrowLength = 7.0)
+ {
+ Cairo.PointD vDir = p2.Substract(p1);
+ vDir = vDir.GetNormalized ();
+ Cairo.PointD vPerp = vDir.GetPerp ();
+
+ Cairo.PointD pA0 = p1.Add(vDir.Multiply(arrowLength));
+ Cairo.PointD pA1 = p2.Substract(vDir.Multiply(arrowLength));
+
+ Cairo.PointD vA = vPerp.Multiply (arrowWidth);
+
+ ctx.MoveTo (p1.Add (vA));
+ ctx.LineTo (pA0);
+ ctx.LineTo (p1.Substract (vA));
+ if (fill)
+ ctx.LineTo (p1.Add (vA));
+
+ ctx.MoveTo (p2.Add (vA));
+ ctx.LineTo (pA1);
+ ctx.LineTo (p2.Substract (vA));
+
+ if (fill) {
+ ctx.LineTo (p2.Add (vA));
+ ctx.Fill ();
+ }
+
+ ctx.MoveTo (pA0);
+ ctx.LineTo (pA1);
+ ctx.LineWidth = stroke;
+ ctx.Stroke ();
+ }
+ public static void DrawCoteFixed(this Cairo.Context ctx, Cairo.PointD p1, Cairo.PointD p2,
+ double stroke = 1.0, double coteWidth = 3.0)
+ {
+ Cairo.PointD vDir = p2.Substract(p1);
+ vDir = vDir.GetNormalized ();
+ Cairo.PointD vPerp = vDir.GetPerp ();
+ Cairo.PointD vA = vPerp.Multiply (coteWidth);
+ ctx.MoveTo (p1.Add (vA));
+ ctx.LineTo (p1.Substract (vA));
+ ctx.MoveTo (p2.Add (vA));
+ ctx.LineTo (p2.Substract (vA));
+ ctx.MoveTo (p1);
+ ctx.LineTo (p2);
+ ctx.LineWidth = stroke;
+ ctx.Stroke ();
}
public static void SetSourceColor(this Cairo.Context ctx, Color c)
{
public override void RemoveChild (GraphicObject child)
{
+ if (child != stretchedGO) {
+ if (Orientation == Orientation.Horizontal)
+ contentSize.Width -= child.LastSlots.Width;
+ else
+ contentSize.Height -= child.LastSlots.Height;
+ }
base.RemoveChild (child);
if (child == stretchedGO) {
- //stretchedGO.LastSlots = default(Rectangle);
stretchedGO = null;
RegisterForLayouting (LayoutingType.Sizing);
- return;
- }
- if (Orientation == Orientation.Horizontal) {
- contentSize.Width -= child.LastSlots.Width;
+ }else if (Orientation == Orientation.Horizontal)
adjustStretchedGo (LayoutingType.Width);
- } else {
- contentSize.Height -= child.LastSlots.Height;
- adjustStretchedGo (LayoutingType.Height);
- }
+ else
+ adjustStretchedGo (LayoutingType.Height);
}
}
}
parentElem.AppendChild (xe);
}
-
+ public Surface CreateIcon (int dragIconSize = 32) {
+ ImageSurface di = new ImageSurface (Format.Argb32, dragIconSize, dragIconSize);
+ using (Context ctx = new Context (di)) {
+ double div = Math.Max (LastPaintedSlot.Width, LastPaintedSlot.Height);
+ double s = (double)dragIconSize / div;
+ ctx.Scale (s, s);
+ if (bmp == null)
+ this.onDraw (ctx);
+ else {
+ if (LastPaintedSlot.Width>LastPaintedSlot.Height)
+ ctx.SetSourceSurface (bmp, 0, (LastPaintedSlot.Width-LastPaintedSlot.Height)/2);
+ else
+ ctx.SetSourceSurface (bmp, (LastPaintedSlot.Height-LastPaintedSlot.Width)/2, 0);
+ ctx.Paint ();
+ }
+ }
+ return di;
+ }
#endif
#region IDisposable implementation
parentRWLock.EnterWriteLock();
parent = value;
- Slot = default(Rectangle);
+ Slot = LastSlots = default(Rectangle);
parentRWLock.ExitWriteLock();
onParentChanged (this, e);
Parent.ContextCoordinates (r);
}
public virtual Rectangle ScreenCoordinates (Rectangle r){
- return
- Parent.ScreenCoordinates(r) + Parent.getSlot().Position + Parent.ClientRectangle.Position;
+ try {
+ return
+ Parent.ScreenCoordinates(r) + Parent.getSlot().Position + Parent.ClientRectangle.Position;
+ } catch (Exception ex) {
+ Debug.WriteLine (ex);
+ return default(Rectangle);
+ }
}
public virtual Rectangle getSlot () { return Slot;}
#endregion
}
#endif
- protected ReaderWriterLockSlim childrenRWLock = new ReaderWriterLockSlim();
+ protected ReaderWriterLockSlim childrenRWLock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
#region CTOR
public Group () : base() {}
if (child != null) {
child.Parent = this;
child.LayoutChanged += OnChildLayoutChanges;
- child.Slot = child.LastSlots = default(Rectangle);
contentSize = child.Slot.Size;
child.RegisteredLayoutings = LayoutingType.None;
child.RegisterForLayouting (LayoutingType.Sizing);