]> O.S.I.I.S - jp/crow.git/commitdiff
arrows
authorjpbruyere <jp.bruyere@hotmail.com>
Tue, 16 Aug 2016 02:27:25 +0000 (04:27 +0200)
committerjpbruyere <jp.bruyere@hotmail.com>
Thu, 1 Sep 2016 11:24:16 +0000 (13:24 +0200)
CrowIDE/src/ImlVisualEditor.cs
src/ExtensionsMethods.cs
src/Point.cs

index 6bcdb7541044403e8afff9560a95e52cd20a7288..8b6808d11bdec4cda4fa40a8abb91051ebba12ae 100644 (file)
@@ -230,10 +230,15 @@ namespace CrowIDE
                                return;
 
                        Rectangle hr = imlVE.HoverWidget.ScreenCoordinates(imlVE.HoverWidget.getSlot ());
+
+                       gr.SetSourceColor (Color.LightGray);
+                       gr.DrawCote (new Cairo.PointD (hr.X, hr.Center.Y), new Cairo.PointD (hr.Right, hr.Center.Y));
+                       gr.DrawCote (new Cairo.PointD (hr.Center.X, hr.Y), new Cairo.PointD (hr.Center.X, hr.Bottom));
                        hr.Inflate (2);
                        gr.SetSourceColor (Color.LightGray);
                        gr.SetDash (new double[]{ 3.0, 3.0 },0.0);
                        gr.Rectangle (hr, 1.0);
+
                }
                #endregion
        }
index d1b951b94ce2d920ded74aef89e6838b326e811c..2bfc36ea5b89f4e5b9527133545a3bff91aa6b1e 100644 (file)
@@ -26,6 +26,7 @@ namespace Crow
        public static class ExtensionsMethods
        {
                #region Cairo extensions
+
                public static void Rectangle(this Cairo.Context ctx, Rectangle r, double stroke = 0.0)
                {
                        if (stroke > 0.0) {
@@ -36,6 +37,59 @@ namespace Crow
                        }else
                                ctx.Rectangle (r.X, r.Y, r.Width, r.Height);
                }
+               public static double GetLength(this Cairo.PointD p){
+                       return Math.Sqrt (Math.Pow (p.X, 2) + Math.Pow (p.Y, 2));
+               }
+               public static Cairo.PointD GetPerp(this Cairo.PointD p){
+                       return new Cairo.PointD(-p.Y, p.X);
+               }
+               public static Cairo.PointD GetNormalized(this Cairo.PointD p){
+                       double length = p.GetLength();
+                       p.X /= length;
+                       p.Y /= length;
+                       return p;
+               }
+               public static Cairo.PointD Substract(this Cairo.PointD p1, Cairo.PointD p2){
+                       return new Cairo.PointD(p1.X - p2.X, p1.Y - p2.Y);
+               }
+               public static Cairo.PointD Add(this Cairo.PointD p1, Cairo.PointD p2){
+                       return new Cairo.PointD(p1.X + p2.X, p1.Y + p2.Y);
+               }
+               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;
+
+                       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);
+                       ctx.LineTo (pA0.Add (vA));
+                       ctx.LineTo (pA0.Substract (vA));
+                       ctx.LineTo (p1);
+
+                       ctx.MoveTo (p2);
+                       ctx.LineTo (pA1.Add (vA));
+                       ctx.LineTo (pA1.Substract (vA));
+                       ctx.LineTo (p2);
+
+                       ctx.Fill ();
+
+                       ctx.MoveTo (p1);
+                       ctx.LineTo (p2);
+                       ctx.LineWidth = stroke;
+                       ctx.Stroke ();
+
+               }
                public static void SetSourceColor(this Cairo.Context ctx, Color c)
                {
                        ctx.SetSourceRGBA(c.R,c.G,c.B,c.A);
@@ -45,6 +99,7 @@ namespace Crow
                        grad.AddColorStop (offset, new Cairo.Color (c.R, c.G, c.B, c.A));
                }
                #endregion
+
                public static void Raise(this EventHandler handler, object sender, EventArgs e)
                {
                        if(handler != null)
index ba0103e3064c275de3097c8f23f525f0a3de9563..2e1961337cf5642a350c9ba0535d0422ce664794 100644 (file)
@@ -29,6 +29,9 @@ namespace Crow
                public int Length {
                        get { return (int)Math.Sqrt (Math.Pow (_x, 2) + Math.Pow (_y, 2)); }
                }
+               public double LengthD {
+                       get { return Math.Sqrt (Math.Pow (_x, 2) + Math.Pow (_y, 2)); }
+               }
         public static implicit operator Cairo.Point(Point p)
         {
             return new Cairo.Point(p.X, p.Y);