|
|
@ -12,6 +12,7 @@ using Avalonia; |
|
|
using Avalonia.Collections; |
|
|
using Avalonia.Collections; |
|
|
using Avalonia.Media; |
|
|
using Avalonia.Media; |
|
|
using Avalonia.Utilities; |
|
|
using Avalonia.Utilities; |
|
|
|
|
|
using Avalonia.VisualTree; |
|
|
|
|
|
|
|
|
namespace Avalonia.Controls |
|
|
namespace Avalonia.Controls |
|
|
{ |
|
|
{ |
|
|
@ -3978,60 +3979,52 @@ namespace Avalonia.Controls |
|
|
/// <summary>
|
|
|
/// <summary>
|
|
|
/// Helper to render grid lines.
|
|
|
/// Helper to render grid lines.
|
|
|
/// </summary>
|
|
|
/// </summary>
|
|
|
internal class GridLinesRenderer : DrawingVisual |
|
|
internal class GridLinesRenderer : Control |
|
|
{ |
|
|
{ |
|
|
/// <summary>
|
|
|
/// <summary>
|
|
|
/// Static initialization
|
|
|
/// Static initialization
|
|
|
/// </summary>
|
|
|
/// </summary>
|
|
|
static GridLinesRenderer() |
|
|
static GridLinesRenderer() |
|
|
{ |
|
|
{ |
|
|
s_oddDashPen = new Pen(Brushes.Blue, c_penWidth); |
|
|
var dashArray = new List<double>() { _dashLength, _dashLength }; |
|
|
DoubleCollection oddDashArray = new DoubleCollection(); |
|
|
|
|
|
oddDashArray.Add(c_dashLength); |
|
|
|
|
|
oddDashArray.Add(c_dashLength); |
|
|
|
|
|
s_oddDashPen.DashStyle = new DashStyle(oddDashArray, 0); |
|
|
|
|
|
s_oddDashPen.DashCap = PenLineCap.Flat; |
|
|
|
|
|
s_oddDashPen.Freeze(); |
|
|
|
|
|
|
|
|
|
|
|
s_evenDashPen = new Pen(Brushes.Yellow, c_penWidth); |
|
|
var ds1 = new DashStyle(dashArray, 0); |
|
|
DoubleCollection evenDashArray = new DoubleCollection(); |
|
|
_oddDashPen = new Pen(Brushes.Blue, |
|
|
evenDashArray.Add(c_dashLength); |
|
|
_penWidth, |
|
|
evenDashArray.Add(c_dashLength); |
|
|
lineCap: PenLineCap.Flat, |
|
|
s_evenDashPen.DashStyle = new DashStyle(evenDashArray, c_dashLength); |
|
|
dashStyle: ds1); |
|
|
s_evenDashPen.DashCap = PenLineCap.Flat; |
|
|
|
|
|
s_evenDashPen.Freeze(); |
|
|
var ds2 = new DashStyle(dashArray, _dashLength); |
|
|
|
|
|
_evenDashPen = new Pen(Brushes.Yellow, |
|
|
|
|
|
_penWidth, |
|
|
|
|
|
lineCap: PenLineCap.Flat, |
|
|
|
|
|
dashStyle: ds2); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
/// <summary>
|
|
|
/// UpdateRenderBounds.
|
|
|
/// UpdateRenderBounds.
|
|
|
/// </summary>
|
|
|
/// </summary>
|
|
|
/// <param name="boundsSize">Size of render bounds</param>
|
|
|
public override void Render(DrawingContext drawingContext) |
|
|
internal void UpdateRenderBounds(Size boundsSize) |
|
|
|
|
|
{ |
|
|
{ |
|
|
using (DrawingContext drawingContext = RenderOpen()) |
|
|
var grid = this.GetVisualParent<Grid>(); |
|
|
{ |
|
|
|
|
|
Grid grid = VisualTreeHelper.GetParent(this) as Grid; |
|
|
|
|
|
if ( grid == null |
|
|
|
|
|
|| grid.ShowGridLines == false ) |
|
|
|
|
|
{ |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
for (int i = 1; i < grid.DefinitionsU.Length; ++i) |
|
|
if (grid == null || !grid.ShowGridLines) |
|
|
{ |
|
|
return; |
|
|
DrawGridLine( |
|
|
|
|
|
drawingContext, |
|
|
|
|
|
grid.DefinitionsU[i].FinalOffset, 0.0, |
|
|
|
|
|
grid.DefinitionsU[i].FinalOffset, boundsSize.Height); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
for (int i = 1; i < grid.DefinitionsV.Length; ++i) |
|
|
for (int i = 1; i < grid.ColumnDefinitions.Count; ++i) |
|
|
{ |
|
|
{ |
|
|
DrawGridLine( |
|
|
DrawGridLine( |
|
|
drawingContext, |
|
|
drawingContext, |
|
|
0.0, grid.DefinitionsV[i].FinalOffset, |
|
|
grid.ColumnDefinitions[i].FinalOffset, 0.0, |
|
|
boundsSize.Width, grid.DefinitionsV[i].FinalOffset); |
|
|
grid.ColumnDefinitions[i].FinalOffset, _lastArrangeSize.Height); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
for (int i = 1; i < grid.RowDefinitions.Count; ++i) |
|
|
|
|
|
{ |
|
|
|
|
|
DrawGridLine( |
|
|
|
|
|
drawingContext, |
|
|
|
|
|
0.0, grid.RowDefinitions[i].FinalOffset, |
|
|
|
|
|
_lastArrangeSize.Width, grid.RowDefinitions[i].FinalOffset); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -4045,17 +4038,23 @@ namespace Avalonia.Controls |
|
|
double endX, |
|
|
double endX, |
|
|
double endY) |
|
|
double endY) |
|
|
{ |
|
|
{ |
|
|
Point start = new Point(startX, startY); |
|
|
var start = new Point(startX, startY); |
|
|
Point end = new Point(endX, endY); |
|
|
var end = new Point(endX, endY); |
|
|
drawingContext.DrawLine(s_oddDashPen, start, end); |
|
|
drawingContext.DrawLine(_oddDashPen, start, end); |
|
|
drawingContext.DrawLine(s_evenDashPen, start, end); |
|
|
drawingContext.DrawLine(_evenDashPen, start, end); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private const double c_dashLength = 4.0; //
|
|
|
internal void UpdateRenderBounds(Size arrangeSize) |
|
|
private const double c_penWidth = 1.0; //
|
|
|
{ |
|
|
private static readonly Pen s_oddDashPen; // first pen to draw dash
|
|
|
_lastArrangeSize = arrangeSize; |
|
|
private static readonly Pen s_evenDashPen; // second pen to draw dash
|
|
|
this.InvalidateVisual(); |
|
|
private static readonly Point c_zeroPoint = new Point(0, 0); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private static Size _lastArrangeSize; |
|
|
|
|
|
private const double _dashLength = 4.0; //
|
|
|
|
|
|
private const double _penWidth = 1.0; //
|
|
|
|
|
|
private static readonly Pen _oddDashPen; // first pen to draw dash
|
|
|
|
|
|
private static readonly Pen _evenDashPen; // second pen to draw dash
|
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |