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)); }
public static Rect GetComputedGridRectFromGridBox(GridBox gridBox, GridElement grid) { double positionOfColumn1 = grid.GetComputedPositionOfColumn(Math.Max(0, Math.Min(gridBox.ColBegin, grid.ColumnDefinitions.Count - 1))); double positionOfColumn2 = grid.GetComputedPositionOfColumn(Math.Min(Math.Max(1, grid.ColumnDefinitions.Count), gridBox.ColEnd)); double computedPositionOfRow1 = grid.GetComputedPositionOfRow(Math.Max(0, Math.Min(gridBox.RowBegin, grid.RowDefinitions.Count - 1))); double computedPositionOfRow2 = grid.GetComputedPositionOfRow(Math.Min(Math.Max(1, grid.RowDefinitions.Count), gridBox.RowEnd)); return(new Rect(positionOfColumn1, computedPositionOfRow1, positionOfColumn2 - positionOfColumn1, computedPositionOfRow2 - computedPositionOfRow1)); }
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); }
private void AdjustLastColumnRow(GridElement grid, Size size, bool setWidth, bool setHeight) { Size size1 = this.GetSizeElement((BaseFrameworkElement)grid).GetComputedTightBounds().Size; Size size2 = grid.GetComputedTightBounds().Size; if (setWidth && grid.ColumnDefinitions.Count > 1) { double positionOfColumn = grid.GetComputedPositionOfColumn(grid.ColumnDefinitions.Count - 1); double num = Math.Max(0.0, size.Width - size1.Width + size2.Width); this.AdjustColumn(grid, grid.ColumnDefinitions.Count - 1, Math.Max(num - positionOfColumn, 0.0), true, false); } if (!setHeight || grid.RowDefinitions.Count <= 1) { return; } double computedPositionOfRow = grid.GetComputedPositionOfRow(grid.RowDefinitions.Count - 1); double num1 = Math.Max(0.0, size.Height - size1.Height + size2.Height); this.AdjustRow(grid, grid.RowDefinitions.Count - 1, Math.Max(num1 - computedPositionOfRow, 0.0), true, false); }
protected override bool OnDrag(Point dragStartPosition, Point dragCurrentPosition, bool scrollNow) { SceneView activeView = this.ActiveView; LayoutLineHeaderAdorner lineHeaderAdorner = this.ActiveAdorner as LayoutLineHeaderAdorner; GridElement grid = (GridElement)((Adorner)this.ActiveAdorner).Element; GridLayoutDesigner gridLayoutDesigner = (GridLayoutDesigner)grid.LayoutDesigner; activeView.EnsureVisible(this.ActiveAdorner, scrollNow); Matrix transformFromRoot = activeView.GetComputedTransformFromRoot((SceneElement)grid); dragStartPosition *= transformFromRoot; dragCurrentPosition = this.ToolBehaviorContext.SnappingEngine.SnapPoint(dragCurrentPosition); dragCurrentPosition *= transformFromRoot; if (lineHeaderAdorner == null || lineHeaderAdorner.Index <= 0) { return(false); } this.EnsureEditTransaction(); if (lineHeaderAdorner.IsX) { if (this.firstLineHeaderDrag) { this.effectiveLineHeaderIndex = lineHeaderAdorner.Index; if (dragCurrentPosition.X < dragStartPosition.X) { while (this.effectiveLineHeaderIndex > 1 && grid.GetComputedColumnWidth(this.effectiveLineHeaderIndex - 1) < 1.0 / activeView.Zoom) { --this.effectiveLineHeaderIndex; } this.firstLineHeaderDrag = false; } else if (dragCurrentPosition.X > dragStartPosition.X) { while (this.effectiveLineHeaderIndex < grid.ColumnDefinitions.Count - 2 && grid.GetComputedColumnWidth(this.effectiveLineHeaderIndex) < 1.0 / activeView.Zoom) { ++this.effectiveLineHeaderIndex; } this.firstLineHeaderDrag = false; } } if (!this.firstLineHeaderDrag) { int num = this.effectiveLineHeaderIndex - 1; double width = dragCurrentPosition.X - grid.GetComputedPositionOfColumn(num); gridLayoutDesigner.AdjustColumn(grid, num, width, this.IsShiftDown, !grid.ViewModel.IsInGridDesignMode); } } else { if (this.firstLineHeaderDrag) { this.effectiveLineHeaderIndex = lineHeaderAdorner.Index; if (dragCurrentPosition.Y < dragStartPosition.Y) { while (this.effectiveLineHeaderIndex > 1 && grid.GetComputedRowHeight(this.effectiveLineHeaderIndex - 1) < 1.0 / activeView.Zoom) { --this.effectiveLineHeaderIndex; } this.firstLineHeaderDrag = false; } else if (dragCurrentPosition.Y > dragStartPosition.Y) { while (this.effectiveLineHeaderIndex < grid.RowDefinitions.Count - 2 && grid.GetComputedRowHeight(this.effectiveLineHeaderIndex) < 1.0 / activeView.Zoom) { ++this.effectiveLineHeaderIndex; } this.firstLineHeaderDrag = false; } } if (!this.firstLineHeaderDrag) { int row = this.effectiveLineHeaderIndex - 1; double height = dragCurrentPosition.Y - grid.GetComputedPositionOfRow(row); gridLayoutDesigner.AdjustRow(grid, row, height, this.IsShiftDown, !grid.ViewModel.IsInGridDesignMode); } } ((Adorner)this.ActiveAdorner).AdornerSet.InvalidateRender(); this.UpdateEditTransaction(); return(true); }