예제 #1
0
        public override void Recalculate()
        {
            base.Recalculate();
            if (_sunken)
            {
                _destRectTop    = new Rectangle(CleanRect.Left, CleanRect.Top, CleanRect.Width, 1);
                _destRectLeft   = new Rectangle(CleanRect.Left, CleanRect.Top, 1, CleanRect.Height);
                _destRectRight  = new Rectangle(CleanRect.Right - 1, CleanRect.Top, 1, CleanRect.Height);
                _destRectBottom = new Rectangle(CleanRect.Left, CleanRect.Bottom, CleanRect.Width, 1);
            }
            else
            {
                _destRectBottom = new Rectangle(CleanRect.Left, CleanRect.Top, CleanRect.Width, 1);
                _destRectRight  = new Rectangle(CleanRect.Left, CleanRect.Top, 1, CleanRect.Height);
                _destRectLeft   = new Rectangle(CleanRect.Right - 1, CleanRect.Top, 1, CleanRect.Height);
                _destRectTop    = new Rectangle(CleanRect.Left, CleanRect.Bottom, CleanRect.Width, 1);
            }

            var scrollWidth = VerticalItemCount > VerticalMaxVisibleItems ? Scroll.Width : 0;

            for (int i = VerticalScrollIndex;
                 i < _items.Count && i - VerticalScrollIndex < VerticalMaxVisibleItems;
                 i++)
            {
                var yOffset = (_font.SymbolBoxSize.Y / 2);
                var rect    = new Rectangle(_margin,
                                            HeightMargin + ((i - VerticalScrollIndex) * ItemHeight) + yOffset / 2, Width - (_margin * 2),
                                            ItemHeight);
                _items[i].Label.SetRect(rect);
                _items[i].Label.Recalculate();
                _items[i].Bounds = new Rectangle(_items[i].Label.Bounds.X - (_margin / 2),
                                                 _items[i].Label.Bounds.Y - yOffset / 2,
                                                 Width - _margin - _margin / 2 - scrollWidth, ItemHeight);
            }

            _scrollBar.Dirty();
            _clickable.SetRect(CleanRect);
            IsDirty = false;
        }