Browse Source

Cache array sizes.

pull/58/head
Steven Kirk 12 years ago
parent
commit
7c6811a136
  1. 54
      Perspex.Controls/Grid.cs

54
Perspex.Controls/Grid.cs

@ -527,10 +527,11 @@ namespace Perspex.Controls
private void ExpandStarCols(Size availableSize)
{
int matrixCount = this.colMatrix.GetLength(0);
int columnsCount = this.ColumnDefinitions.Count;
double width = availableSize.Width;
for (int i = 0; i < this.colMatrix.GetLength(0); i++)
for (int i = 0; i < matrixCount; i++)
{
if (this.colMatrix[i, i].Type == GridUnitType.Star)
{
@ -542,12 +543,12 @@ namespace Perspex.Controls
}
}
this.AssignSize(this.colMatrix, 0, this.colMatrix.GetLength(0) - 1, ref width, GridUnitType.Star, false);
this.AssignSize(this.colMatrix, 0, matrixCount - 1, ref width, GridUnitType.Star, false);
width = Math.Max(0, width);
if (columnsCount > 0)
{
for (int i = 0; i < this.colMatrix.GetLength(0); i++)
for (int i = 0; i < matrixCount; i++)
{
if (this.colMatrix[i, i].Type == GridUnitType.Star)
{
@ -559,13 +560,14 @@ namespace Perspex.Controls
private void ExpandStarRows(Size availableSize)
{
int matrixCount = this.rowMatrix.GetLength(0);
int rowCount = this.RowDefinitions.Count;
double height = availableSize.Height;
// When expanding star rows, we need to zero out their height before
// calling AssignSize. AssignSize takes care of distributing the
// available size when there are Mins and Maxs applied.
for (int i = 0; i < this.rowMatrix.GetLength(0); i++)
for (int i = 0; i < matrixCount; i++)
{
if (this.rowMatrix[i, i].Type == GridUnitType.Star)
{
@ -577,11 +579,11 @@ namespace Perspex.Controls
}
}
this.AssignSize(this.rowMatrix, 0, this.rowMatrix.GetLength(0) - 1, ref height, GridUnitType.Star, false);
this.AssignSize(this.rowMatrix, 0, matrixCount - 1, ref height, GridUnitType.Star, false);
if (rowCount > 0)
{
for (int i = 0; i < this.rowMatrix.GetLength(0); i++)
for (int i = 0; i < matrixCount; i++)
{
if (this.rowMatrix[i, i].Type == GridUnitType.Star)
{
@ -703,12 +705,15 @@ namespace Perspex.Controls
}
}
for (int r = 0; r < this.rowMatrix.GetLength(0); r++)
int rowMatrixDim = this.rowMatrix.GetLength(0);
int colMatrixDim = this.colMatrix.GetLength(0);
for (int r = 0; r < rowMatrixDim; r++)
{
this.rowMatrix[r, r].OfferedSize = this.rowMatrix[r, r].DesiredSize;
}
for (int c = 0; c < this.colMatrix.GetLength(0); c++)
for (int c = 0; c < colMatrixDim; c++)
{
this.colMatrix[c, c].OfferedSize = this.colMatrix[c, c].DesiredSize;
}
@ -716,17 +721,20 @@ namespace Perspex.Controls
private void SaveMeasureResults()
{
for (int i = 0; i < this.rowMatrix.GetLength(0); i++)
int rowMatrixDim = this.rowMatrix.GetLength(0);
int colMatrixDim = this.colMatrix.GetLength(0);
for (int i = 0; i < rowMatrixDim; i++)
{
for (int j = 0; j < this.rowMatrix.GetLength(0); j++)
for (int j = 0; j < rowMatrixDim; j++)
{
this.rowMatrix[i, j].OriginalSize = this.rowMatrix[i, j].OfferedSize;
}
}
for (int i = 0; i < this.colMatrix.GetLength(0); i++)
for (int i = 0; i < colMatrixDim; i++)
{
for (int j = 0; j < this.colMatrix.GetLength(0); j++)
for (int j = 0; j < colMatrixDim; j++)
{
this.colMatrix[i, j].OriginalSize = this.colMatrix[i, j].OfferedSize;
}
@ -735,17 +743,20 @@ namespace Perspex.Controls
private void RestoreMeasureResults()
{
for (int i = 0; i < this.rowMatrix.GetLength(0); i++)
int rowMatrixDim = this.rowMatrix.GetLength(0);
int colMatrixDim = this.colMatrix.GetLength(0);
for (int i = 0; i < rowMatrixDim; i++)
{
for (int j = 0; j < this.rowMatrix.GetLength(0); j++)
for (int j = 0; j < rowMatrixDim; j++)
{
this.rowMatrix[i, j].OfferedSize = this.rowMatrix[i, j].OriginalSize;
}
}
for (int i = 0; i < this.colMatrix.GetLength(0); i++)
for (int i = 0; i < colMatrixDim; i++)
{
for (int j = 0; j < this.colMatrix.GetLength(0); j++)
for (int j = 0; j < colMatrixDim; j++)
{
this.colMatrix[i, j].OfferedSize = this.colMatrix[i, j].OriginalSize;
}
@ -802,6 +813,9 @@ namespace Perspex.Controls
{
public GridWalker(Grid grid, Segment[,] rowMatrix, Segment[,] colMatrix)
{
int rowMatrixDim = rowMatrix.GetLength(0);
int colMatrixDim = colMatrix.GetLength(0);
foreach (Control child in grid.Children)
{
bool starCol = false;
@ -809,10 +823,10 @@ namespace Perspex.Controls
bool autoCol = false;
bool autoRow = false;
int col = Math.Min(Grid.GetColumn(child), colMatrix.GetLength(0) - 1);
int row = Math.Min(Grid.GetRow(child), rowMatrix.GetLength(0) - 1);
int colspan = Math.Min(Grid.GetColumnSpan(child), colMatrix.GetLength(0) - 1);
int rowspan = Math.Min(Grid.GetRowSpan(child), rowMatrix.GetLength(0) - 1);
int col = Math.Min(Grid.GetColumn(child), colMatrixDim - 1);
int row = Math.Min(Grid.GetRow(child), rowMatrixDim - 1);
int colspan = Math.Min(Grid.GetColumnSpan(child), colMatrixDim - 1);
int rowspan = Math.Min(Grid.GetRowSpan(child), rowMatrixDim - 1);
for (int r = row; r < row + rowspan; r++)
{

Loading…
Cancel
Save