Browse Source

Fix GridLinesRenderer

pull/2563/head
Jumar Macato 7 years ago
parent
commit
0b19cd6e59
No known key found for this signature in database GPG Key ID: B19884DAC3A5BF3F
  1. 97
      src/Avalonia.Controls/Grid.cs

97
src/Avalonia.Controls/Grid.cs

@ -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
}
} }
} }
Loading…
Cancel
Save