Exemple #1
0
 public void Arrange(float x, float y, float width, float height)
 {
     for (var i = 0; i < _views.Length; i++)
     {
         _scope.Arrange(ref _views[i], x, y, width, height);
     }
 }
Exemple #2
0
        public override void LayoutSubviews()
        {
            var scope = new LayoutScope <UIView>(LayoutAdapter.Instance);
            var root  = LayoutHandler?.Invoke(scope);

            if (root != null)
            {
                var frame = Frame;
                scope.Arrange(root.Value, (float)frame.X, (float)frame.Y, (float)frame.Width, (float)frame.Height);
            }
        }
Exemple #3
0
        protected override void OnLayout(bool changed, int l, int t, int r, int b)
        {
            var scope   = new LayoutScope <View>(LayoutAdapter.Instance);
            var handler = LayoutHandler;

            if (handler != null)
            {
                var root = handler.Invoke(scope);
                scope.Arrange(ref root, l, t, r - l, b - t);
            }
        }
Exemple #4
0
        protected override Windows.Foundation.Size ArrangeOverride(Windows.Foundation.Size finalSize)
        {
            var scope = new LayoutScope <UIElement>(LayoutAdapter.Instance);
            var root  = LayoutHandler?.Invoke(scope);

            if (root != null)
            {
                scope.Arrange(root.Value, 0, 0, (float)finalSize.Width, (float)finalSize.Height);
            }

            return(base.ArrangeOverride(finalSize));
        }
            public void Arrange(float x, float y, float width, float height)
            {
                var offset = y;

                for (var i = 0; i < _views.Length; i++)
                {
                    var size = _scope.Measure(ref _views[i], width, height);

                    _scope.Arrange(ref _views[i], x, offset, width, size.Height, size.Width, size.Height);

                    offset += size.Height;
                    offset += _spacing;
                }
            }
Exemple #6
0
        public static Rectangle[] Layout(float width, float height, Func <LayoutScope <Size>, LayoutView <Size> > layoutHandler)
        {
            var adapter = new TestLayoutAdapter();

            var scope = new LayoutScope <Size>(adapter);

            var root = layoutHandler(scope);

            if ((root.View.Width != 0 && root.View.Height != 0) || root.Panel != null)
            {
                scope.Arrange(ref root, 0, 0, width, height);
            }

            return(adapter.ArrangedRectangles.ToArray());
        }
Exemple #7
0
            public void Arrange(float x, float y, float width, float height)
            {
                MeasureColumns(width, height);
                MeasureRows(width, height);

                if (_grid.ColumnStarWeights != null)
                {
                    var columns = (GridColumnDefinition[])_grid.Columns;

                    var starWidth = 0.0f;

                    for (var i = 0; i < _columnWidths.Length; i++)
                    {
                        if (columns[i].Type != GridUnitType.Star)
                        {
                            starWidth += _columnWidths[i];
                        }
                    }

                    starWidth = width - starWidth;

                    if (starWidth > 0)
                    {
                        for (var i = 0; i < _grid.ColumnStarWeights.Length; i++)
                        {
                            if (columns[i].Type == GridUnitType.Star)
                            {
                                var columnWidth = starWidth * _grid.ColumnStarWeights[i];
                                if (columnWidth > _columnWidths[i])
                                {
                                    _columnWidths[i] = columnWidth;
                                }
                            }
                        }
                    }
                }

                if (_grid.RowStarWeights != null)
                {
                    var rows       = (GridRowDefinition[])_grid.Rows;
                    var starHeight = 0.0f;

                    for (var i = 0; i < _rowHeights.Length; i++)
                    {
                        if (rows[i].Type != GridUnitType.Star)
                        {
                            starHeight += _rowHeights[i];
                        }
                    }

                    starHeight = height - starHeight;
                    if (starHeight > 0)
                    {
                        for (var i = 0; i < _grid.RowStarWeights.Length; i++)
                        {
                            if (_grid.Rows[i].Type == GridUnitType.Star)
                            {
                                var rowHeight = starHeight * _grid.RowStarWeights[i];
                                if (rowHeight > _rowHeights[i])
                                {
                                    _rowHeights[i] = rowHeight;
                                }
                            }
                        }
                    }
                }

                var columnLefts = _columnWidths;
                var currentLeft = _columnWidths[0];

                for (var i = 1; i < _columnWidths.Length; i++)
                {
                    currentLeft     += _columnWidths[i];
                    _columnWidths[i] = currentLeft;
                }

                var rowTops    = _rowHeights;
                var currentTop = _rowHeights[0];

                for (var i = 1; i < _rowHeights.Length; i++)
                {
                    currentTop    += _rowHeights[i];
                    _rowHeights[i] = currentTop;
                }

                for (var i = 0; i < _views.Length; i++)
                {
                    var view = _views[i];

                    var left   = view.Column == 0 ? 0 : columnLefts[view.Column - 1];
                    var right  = columnLefts[view.Column + view.ColumnSpan - 1];
                    var top    = view.Row == 0 ? 0 : rowTops[view.Row - 1];
                    var bottom = rowTops[view.Row + view.RowSpan - 1];

                    _scope.Arrange(ref view.View, left, top, right - left, bottom - top);
                }
            }