private static int CalculateHeightOfMiddlePartOfScrollBar(ICanHaveHorizontalScrollBar parent, int bgWidth)
        {
            int midWidth;

            if (parent.HorizontalItemCount <= parent.HorizontalMaxVisibleItems)
            {
                midWidth = bgWidth - (BarEndsWidth * 2);
            }
            else
            {
                midWidth = ((parent.HorizontalMaxVisibleItems * bgWidth)
                            / parent.HorizontalItemCount)
                           - BarEndsWidth * 2;
            }

            if (midWidth >= bgWidth)
            {
                midWidth = bgWidth - (BarEndsWidth * 2);
            }
            else if (midWidth <= 0)
            {
                midWidth = 0;
            }
            return(midWidth);
        }
 public HorizontalScrollBar(IWindow window, ICanHaveHorizontalScrollBar parent,
                            Border border)
     : base(window, parent)
 {
     // scrollbars must be attached to a control
     Window       = window;
     Parent       = parent ?? throw new ArgumentNullException(nameof(parent));
     _spriteSheet = Ui.SpriteSheet;
     _border      = border;
     ZIndex       = parent.ZIndex;
     Visible      = true;
     _leftArrow   = new IconButtonUsingOverlay(window, this, Ui.ScrollBar.LeftArrow,
                                               Ui.ScrollBar.ArrowNormalOverlay, Ui.ScrollBar.ArrowPressedOverlay, Rectangle.Empty);
     _leftArrow.SetOnClick(ScrollUp);
     _rightArrow = new IconButtonUsingOverlay(window, this, Ui.ScrollBar.RightArrow,
                                              Ui.ScrollBar.ArrowNormalOverlay, Ui.ScrollBar.ArrowPressedOverlay, Rectangle.Empty);
     _rightArrow.SetOnClick(ScrollDown);
     _draggable                = new Draggable(MouseButton.Left, 5);
     _mouseScrollable          = new MouseScrollable(parent, ModifierKeys.Shift);
     _mouseScrollable.OnScroll = ScrollMouse;
 }