diff options
| author | jpbruyere <jp.bruyere@hotmail.com> | 2016-09-13 14:44:26 +0200 |
|---|---|---|
| committer | jpbruyere <jp.bruyere@hotmail.com> | 2016-09-13 14:44:26 +0200 |
| commit | 2616e6ee7a1a34036cc002d28543d0d7a657fdb2 (patch) | |
| tree | e48dacb4209e95cb963de76cb6fe1ffca07e77c1 /src/ExtensionsMethods.cs | |
| parent | b7786bbd327699b0a8dd30d5ca86fc20f28f5617 (diff) | |
Merge improvements from CrowIDE
modifié : Templates/DirectoryView.template
modifié : Templates/Menu.template
modifié : Templates/MenuItem.template
modifié : Templates/Window.template
modifié : Tests/Interfaces/Divers/0.crow
modifié : src/CompilerServices/CompilerServices.cs
modifié : src/ExtensionsMethods.cs
modifié : src/GraphicObjects/DirectoryView.cs
modifié : src/GraphicObjects/GraphicObject.cs
modifié : src/GraphicObjects/Group.cs
modifié : src/GraphicObjects/TreeView.cs
modifié : src/GraphicObjects/Wrapper.cs
modifié : src/IMLReader.cs
modifié : src/Interface.cs
modifié : src/ItemTemplate.cs
modifié : src/LayoutingQueueItem.cs
modifié : src/Measure.cs
modifié : src/Point.cs
Diffstat (limited to 'src/ExtensionsMethods.cs')
| -rw-r--r-- | src/ExtensionsMethods.cs | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/ExtensionsMethods.cs b/src/ExtensionsMethods.cs index d1b951b9..2bfc36ea 100644 --- a/src/ExtensionsMethods.cs +++ b/src/ExtensionsMethods.cs @@ -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) |