Skip to content

Commit

Permalink
Fixed a Grid editor issue (#1308)
Browse files Browse the repository at this point in the history
* Fixed a Grid editor issue

* Explained the fix in ExtendRangeToHaveEvenCellEdges

* Simplified code in ExtendRangeToHaveEvenCellEdges

* Removed redundant comment, more camelCase
  • Loading branch information
ivan100sic committed Mar 10, 2020
1 parent 852689b commit 4632224
Showing 1 changed file with 16 additions and 49 deletions.
65 changes: 16 additions & 49 deletions src/modules/fancyzones/editor/FancyZonesEditor/GridEditor.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -134,83 +134,50 @@ private void OnFullSplit(object o, SplitEventArgs e)

private void ExtendRangeToHaveEvenCellEdges()
{
// extend each edge of the [(_startCol, _startRow) - (_endCol, _endRow)] range based on merged cells until you have 4 straight edges with no "straddling cells"
// As long as there is an edge of the 2D range such that some zone crosses its boundary, extend
// that boundary. A single pass is not enough, a while loop is needed. This results in the unique
// smallest rectangle containing the initial range such that no zone is "broken", meaning that
// some part of it is inside the 2D range, and some part is outside.
GridLayoutModel model = Model;
bool possiblyBroken = true;

while (_startRow > 0)
while (possiblyBroken)
{
bool dirty = false;
possiblyBroken = false;

for (int col = _startCol; col <= _endCol; col++)
{
if (model.CellChildMap[_startRow - 1, col] == model.CellChildMap[_startRow, col])
if (_startRow > 0 && model.CellChildMap[_startRow - 1, col] == model.CellChildMap[_startRow, col])
{
_startRow--;
dirty = true;
possiblyBroken = true;
break;
}
}

if (!dirty)
{
break;
}
}

while (_endRow < model.Rows - 1)
{
bool dirty = false;
for (int col = _startCol; col <= _endCol; col++)
{
if (model.CellChildMap[_endRow + 1, col] == model.CellChildMap[_endRow, col])
if (_endRow < model.Rows - 1 && model.CellChildMap[_endRow + 1, col] == model.CellChildMap[_endRow, col])
{
_endRow++;
dirty = true;
possiblyBroken = true;
break;
}
}

if (!dirty)
{
break;
}
}

while (_startCol > 0)
{
bool dirty = false;
for (int row = _startRow; row <= _endRow; row++)
{
if (model.CellChildMap[row, _startCol - 1] == model.CellChildMap[row, _startCol])
if (_startCol > 0 && model.CellChildMap[row, _startCol - 1] == model.CellChildMap[row, _startCol])
{
_startCol--;
dirty = true;
possiblyBroken = true;
break;
}
}

if (!dirty)
{
break;
}
}

while (_endCol < model.Columns - 1)
{
bool dirty = false;
for (int row = _startRow; row <= _endRow; row++)
{
if (model.CellChildMap[row, _endCol + 1] == model.CellChildMap[row, _endCol])
if (_endCol < model.Columns - 1 && model.CellChildMap[row, _endCol + 1] == model.CellChildMap[row, _endCol])
{
_endCol++;
dirty = true;
possiblyBroken = true;
break;
}
}

if (!dirty)
{
break;
}
}
}

Expand Down

0 comments on commit 4632224

Please sign in to comment.