Added line & arrow shadow

This commit is contained in:
Jaex 2016-11-29 21:32:52 +03:00
parent 5e14b35eb7
commit 678ef0b1b0
2 changed files with 30 additions and 28 deletions

View file

@ -32,21 +32,12 @@ public class ArrowDrawingShape : LineDrawingShape
{ {
public override ShapeType ShapeType { get; } = ShapeType.DrawingArrow; public override ShapeType ShapeType { get; } = ShapeType.DrawingArrow;
protected override void DrawLine(Graphics g, Pen pen) protected override Pen CreatePen(Color borderColor, int borderSize)
{ {
using (AdjustableArrowCap arrowCap = new AdjustableArrowCap(4, 6)) return new Pen(borderColor, borderSize)
{ {
pen.CustomEndCap = arrowCap; CustomEndCap = new AdjustableArrowCap(4, 6)
};
if (CenterNodeActive)
{
g.DrawCurve(pen, new Point[] { StartPosition, CenterPosition, EndPosition });
}
else
{
g.DrawLine(pen, StartPosition, EndPosition);
}
}
} }
} }
} }

View file

@ -56,18 +56,35 @@ public override void OnUpdate()
public override void OnDraw(Graphics g) public override void OnDraw(Graphics g)
{ {
if (BorderSize > 0 && BorderColor.A > 0) if (Shadow)
{
DrawLine(g, ShadowColor, BorderSize, StartPosition.Add(ShadowDirection), EndPosition.Add(ShadowDirection), CenterPosition.Add(ShadowDirection));
}
DrawLine(g, BorderColor, BorderSize, StartPosition, EndPosition, CenterPosition);
}
protected virtual void DrawLine(Graphics g, Color borderColor, int borderSize, Point startPosition, Point endPosition, Point centerPosition)
{
if (borderSize > 0 && borderColor.A > 0)
{ {
g.SmoothingMode = SmoothingMode.HighQuality; g.SmoothingMode = SmoothingMode.HighQuality;
if (BorderSize.IsEvenNumber()) if (borderSize.IsEvenNumber())
{ {
g.PixelOffsetMode = PixelOffsetMode.Half; g.PixelOffsetMode = PixelOffsetMode.Half;
} }
using (Pen pen = new Pen(BorderColor, BorderSize)) using (Pen pen = CreatePen(borderColor, borderSize))
{ {
DrawLine(g, pen); if (CenterNodeActive)
{
g.DrawCurve(pen, new Point[] { startPosition, centerPosition, endPosition });
}
else
{
g.DrawLine(pen, startPosition, endPosition);
}
} }
g.SmoothingMode = SmoothingMode.None; g.SmoothingMode = SmoothingMode.None;
@ -75,19 +92,13 @@ public override void OnDraw(Graphics g)
} }
} }
protected virtual void DrawLine(Graphics g, Pen pen) protected virtual Pen CreatePen(Color borderColor, int borderSize)
{ {
pen.StartCap = LineCap.Round; return new Pen(borderColor, borderSize)
pen.EndCap = LineCap.Round;
if (CenterNodeActive)
{ {
g.DrawCurve(pen, new Point[] { StartPosition, CenterPosition, EndPosition }); StartCap = LineCap.Round,
} EndCap = LineCap.Round
else };
{
g.DrawLine(pen, StartPosition, EndPosition);
}
} }
public override void Move(int x, int y) public override void Move(int x, int y)