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; }