Esempio n. 1
0
        public static GridBox GetComputedGridBoxContainingRect(Rect rect, GridElement grid)
        {
            int columnBeforePosition = grid.GetComputedColumnBeforePosition(rect.Left);
            int columnAfterPosition  = grid.GetComputedColumnAfterPosition(rect.Right);
            int rowBeforePosition    = grid.GetComputedRowBeforePosition(rect.Top);
            int rowAfterPosition     = grid.GetComputedRowAfterPosition(rect.Bottom);

            if (columnAfterPosition > columnBeforePosition + 1 && rect.Right < grid.GetComputedPositionOfColumn(columnAfterPosition - 1) + grid.GetComputedColumnWidth(columnAfterPosition - 1) / 2.0)
            {
                --columnAfterPosition;
            }
            if (columnAfterPosition > columnBeforePosition + 1 && rect.Left > grid.GetComputedPositionOfColumn(columnBeforePosition) + grid.GetComputedColumnWidth(columnBeforePosition) / 2.0)
            {
                ++columnBeforePosition;
            }
            if (columnAfterPosition == columnBeforePosition + 1 && columnAfterPosition < grid.ColumnDefinitions.Count && grid.GetComputedPositionOfColumn(columnAfterPosition) < (rect.Left + rect.Right) / 2.0)
            {
                ++columnBeforePosition;
                ++columnAfterPosition;
            }
            if (rowAfterPosition > rowBeforePosition + 1 && rect.Bottom < grid.GetComputedPositionOfRow(rowAfterPosition - 1) + grid.GetComputedRowHeight(rowAfterPosition - 1) / 2.0)
            {
                --rowAfterPosition;
            }
            if (rowAfterPosition > rowBeforePosition + 1 && rect.Top > grid.GetComputedPositionOfRow(rowBeforePosition) + grid.GetComputedRowHeight(rowBeforePosition) / 2.0)
            {
                ++rowBeforePosition;
            }
            if (rowAfterPosition == rowBeforePosition + 1 && rowAfterPosition < grid.RowDefinitions.Count && grid.GetComputedPositionOfRow(rowAfterPosition) < (rect.Top + rect.Bottom) / 2.0)
            {
                ++rowBeforePosition;
                ++rowAfterPosition;
            }
            return(new GridBox(columnBeforePosition, columnAfterPosition, rowBeforePosition, rowAfterPosition));
        }
Esempio n. 2
0
 public void AddHorizontalGridline(GridElement grid, double position)
 {
     using (SceneEditTransaction editTransaction = grid.ViewModel.CreateEditTransaction(StringTable.UndoUnitAddGridline))
     {
         using (grid.ViewModel.ForceBaseValue())
         {
             List <LayoutCacheRecord> currentRects = this.GetCurrentRects((BaseFrameworkElement)grid);
             int    rowBeforePosition      = grid.GetComputedRowBeforePosition(position);
             double computedPositionOfRow1 = grid.GetComputedPositionOfRow(rowBeforePosition);
             double computedPositionOfRow2 = grid.GetComputedPositionOfRow(rowBeforePosition + 1);
             bool   flag = grid.RowDefinitions.Count == 0 || grid.RowDefinitions[rowBeforePosition].Height.IsStar;
             grid.CacheComputedRowHeights();
             this.EnsureOneRow(grid);
             grid.RowDefinitions.Insert(rowBeforePosition + 1, RowDefinitionNode.Factory.Instantiate(grid.ViewModel));
             position = Math.Max(position, computedPositionOfRow1);
             if (position > computedPositionOfRow2)
             {
                 grid.ComputedRowHeightCache[rowBeforePosition] = computedPositionOfRow2 - computedPositionOfRow1;
                 grid.ComputedRowHeightCache.Insert(rowBeforePosition + 1, position - computedPositionOfRow2);
             }
             else
             {
                 grid.ComputedRowHeightCache[rowBeforePosition] = position - computedPositionOfRow1;
                 grid.ComputedRowHeightCache.Insert(rowBeforePosition + 1, computedPositionOfRow2 - position);
             }
             editTransaction.Update();
             grid.ViewModel.DefaultView.UpdateLayout();
             if (flag)
             {
                 List <int> heightStarIndices = this.GetHeightStarIndices(grid);
                 this.NormalizeHeightStars(grid, heightStarIndices);
             }
             else
             {
                 grid.RowDefinitions[rowBeforePosition].Height = new GridLength(grid.ComputedRowHeightCache[rowBeforePosition]);
                 grid.RowDefinitions[rowBeforePosition].ClearValue(RowDefinitionNode.MinHeightProperty);
                 grid.RowDefinitions[rowBeforePosition + 1].Height = new GridLength(grid.ComputedRowHeightCache[rowBeforePosition + 1]);
                 grid.RowDefinitions[rowBeforePosition + 1].ClearValue(RowDefinitionNode.MinHeightProperty);
             }
             editTransaction.Update();
             grid.ViewModel.RefreshSelection();
             this.SetCurrentRects((BaseFrameworkElement)grid, currentRects);
             grid.UncacheComputedRowHeights();
             editTransaction.Commit();
         }
     }
     grid.ViewModel.DefaultView.AdornerLayer.InvalidateAdornersStructure((SceneElement)grid);
 }