Пример #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));
        }
Пример #2
0
        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));
        }
Пример #3
0
 public void AddVerticalGridline(GridElement grid, double position)
 {
     using (SceneEditTransaction editTransaction = grid.ViewModel.CreateEditTransaction(StringTable.UndoUnitAddGridline))
     {
         using (grid.ViewModel.ForceBaseValue())
         {
             List <LayoutCacheRecord> currentRects = this.GetCurrentRects((BaseFrameworkElement)grid);
             int    columnBeforePosition           = grid.GetComputedColumnBeforePosition(position);
             double positionOfColumn1 = grid.GetComputedPositionOfColumn(columnBeforePosition);
             double positionOfColumn2 = grid.GetComputedPositionOfColumn(columnBeforePosition + 1);
             bool   flag = grid.ColumnDefinitions.Count == 0 || grid.ColumnDefinitions[columnBeforePosition].Width.IsStar;
             grid.CacheComputedColumnWidths();
             this.EnsureOneColumn(grid);
             grid.ColumnDefinitions.Insert(columnBeforePosition + 1, ColumnDefinitionNode.Factory.Instantiate(grid.ViewModel));
             position = Math.Max(position, positionOfColumn1);
             if (position > positionOfColumn2)
             {
                 grid.ComputedColumnWidthCache[columnBeforePosition] = positionOfColumn2 - positionOfColumn1;
                 grid.ComputedColumnWidthCache.Insert(columnBeforePosition + 1, position - positionOfColumn2);
             }
             else
             {
                 grid.ComputedColumnWidthCache[columnBeforePosition] = position - positionOfColumn1;
                 grid.ComputedColumnWidthCache.Insert(columnBeforePosition + 1, positionOfColumn2 - position);
             }
             editTransaction.Update();
             grid.ViewModel.DefaultView.UpdateLayout();
             if (flag)
             {
                 List <int> widthStarIndices = this.GetWidthStarIndices(grid);
                 this.NormalizeWidthStars(grid, widthStarIndices);
             }
             else
             {
                 grid.ColumnDefinitions[columnBeforePosition].Width = new GridLength(grid.ComputedColumnWidthCache[columnBeforePosition]);
                 grid.ColumnDefinitions[columnBeforePosition].ClearValue(ColumnDefinitionNode.MinWidthProperty);
                 grid.ColumnDefinitions[columnBeforePosition + 1].Width = new GridLength(grid.ComputedColumnWidthCache[columnBeforePosition + 1]);
                 grid.ColumnDefinitions[columnBeforePosition + 1].ClearValue(ColumnDefinitionNode.MinWidthProperty);
             }
             editTransaction.Update();
             grid.ViewModel.RefreshSelection();
             this.SetCurrentRects((BaseFrameworkElement)grid, currentRects);
             grid.UncacheComputedColumnWidths();
             editTransaction.Commit();
         }
     }
     grid.ViewModel.DefaultView.AdornerLayer.InvalidateAdornersStructure((SceneElement)grid);
 }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }