void SetupScrollBar()
 {
     // Item list scroll bar (e.g. items in character inventory)
     itemListScrollBar = new VerticalScrollBar
     {
         Position     = new Vector2(1, 18),
         Size         = new Vector2(6, itemListPanelRect.height - 35),
         DisplayUnits = listDisplayUnits
     };
     Components.Add(itemListScrollBar);
     itemListScrollBar.OnScroll += ItemsScrollBar_OnScroll;
 }
        void Setup()
        {
            // Cut out red up/down arrows
            Texture2D arrowTexture = ImageReader.GetTexture(redArrowsTextureName);

            arrowUpTexture   = ImageReader.GetSubTexture(arrowTexture, upArrowRect, arrowsFullSize);
            arrowDownTexture = ImageReader.GetSubTexture(arrowTexture, downArrowRect, arrowsFullSize);

            // Drop down button
            dropDownToggleButton = DaggerfallUI.AddButton(new Rect(0, 0, 7, 7), this);
            dropDownToggleButton.BackgroundColor   = new Color(0.2f, 0.2f, 0.2f, 0.5f);//0.5f);
            dropDownToggleButton.OnMouseClick     += DropdownButton_OnMouseClick;
            dropDownToggleButton.Hotkey            = DaggerfallShortcut.GetBinding(DaggerfallShortcut.Buttons.OptionsDropdown);
            dropDownToggleButton.BackgroundTexture = arrowUpTexture;

            // Dropdown options panel
            dropdownPanel                 = new Panel();
            dropdownPanel.Position        = new Vector2(0, dropDownToggleButton.Position.y + dropDownToggleButton.Size.y);
            dropdownPanel.Size            = new Vector2(50, 30);
            dropdownPanel.BackgroundColor = Color.black;
            dropdownPanel.Enabled         = false;
            dropdownPanel.Outline.Enabled = true;
            this.Components.Add(dropdownPanel);

            dropdownList                = new ListBox();
            dropdownList.Position       = new Vector2(2, 2);
            dropdownList.ShadowPosition = Vector2.zero;
            dropdownList.RowsDisplayed  = unitsDisplayed;
            SetBackground(dropdownList, Color.black, "pauseDropdownListBackgroundColor");
            dropdownList.OnSelectItem     += DropdownList_OnUseSelectedItem;
            dropdownList.SelectedTextColor = dropdownList.TextColor;
            dropdownList.OnScroll         += DropdownList_OnScroll;
            dropdownPanel.Components.Add(dropdownList);

            AddOptions();
            var height = dropdownList.HeightContent();

            dropdownList.Size  = new Vector2(maxTextWidth, height > 80 ? 80 : height);
            dropdownPanel.Size = new Vector2(dropdownList.Size.x + 6, dropdownList.Size.y + 3);

            dropdownScroller              = new VerticalScrollBar();
            dropdownScroller.Position     = new Vector2(maxTextWidth, 2);
            dropdownScroller.Size         = new Vector2(5, dropdownPanel.Size.y - 3);
            dropdownScroller.DisplayUnits = unitsDisplayed;
            dropdownScroller.TotalUnits   = dropdownList.Count;
            dropdownScroller.OnScroll    += SavesScroller_OnScroll;
            dropdownPanel.Components.Add(dropdownScroller);
        }
        int GetSafeScrollIndex(VerticalScrollBar scroller, bool delayScrollUp)
        {
            // Get current scroller index
            int scrollIndex = scroller.ScrollIndex;

            if (scrollIndex < 0)
            {
                scrollIndex = 0;
            }

            // Ensure scroll index within current range
            if (!delayScrollUp && scrollIndex + scroller.DisplayUnits > scroller.TotalUnits || scrollIndex >= scroller.TotalUnits)
            {
                scrollIndex = scroller.TotalUnits - scroller.DisplayUnits;
                if (scrollIndex < 0)
                {
                    scrollIndex = 0;
                }
                scroller.Reset(scroller.DisplayUnits, scroller.TotalUnits, scrollIndex);
            }
            return(scrollIndex);
        }
        protected override void Setup()
        {
            base.Setup();

            // Load native texture
            nativeTexture = DaggerfallUI.GetTextureFromImg(nativeImgName);
            if (!nativeTexture)
                throw new Exception("DaggerfallClassSelectWindow: Could not load native texture.");

            // Create panel for picker
            pickerPanel.Size = new Vector2(nativeTexture.width, nativeTexture.height);
            pickerPanel.HorizontalAlignment = HorizontalAlignment.Center;
            pickerPanel.VerticalAlignment = VerticalAlignment.Middle;
            pickerPanel.BackgroundTexture = nativeTexture;
            pickerPanel.BackgroundTextureLayout = TextureLayout.StretchToFill;
            NativePanel.Components.Add(pickerPanel);

            // Create list box
            listBox.Position = new Vector2(26, 27);
            listBox.Size = new Vector2(138, 72);
            listBox.OnUseSelectedItem += ListBox_OnUseSelectedItem;
            pickerPanel.Components.Add(listBox);

            // Add previous button
            Button previousButton = DaggerfallUI.AddButton(new Rect(179, 10, 9, 9), pickerPanel);
            previousButton.OnMouseClick += PreviousButton_OnMouseClick;

            // Add next button
            Button nextButton = DaggerfallUI.AddButton(new Rect(179, 108, 9, 9), pickerPanel);
            nextButton.OnMouseClick += NextButton_OnMouseClick;

            // Add scrollbar
            scrollBar = new VerticalScrollBar();
            scrollBar.Position = new Vector2(181, 23);
            scrollBar.Size = new Vector2(5, 82);
            scrollBar.OnScrollUp += ScrollBar_OnScrollUp;
            scrollBar.OnScrollDown += ScrollBar_OnScrollDown;
            pickerPanel.Components.Add(scrollBar);
        }
        /// <summary>
        /// Gets safe scroll index.
        /// Scroller will be adjust to always be inside display range where possible.
        /// </summary>
        int GetSafeScrollIndex(VerticalScrollBar scroller)
        {
            // Get current scroller index
            int scrollIndex = scroller.ScrollIndex;
            if (scrollIndex < 0)
                scrollIndex = 0;

            // Ensure scroll index within current range
            if (scrollIndex + scroller.DisplayUnits > scroller.TotalUnits)
            {
                scrollIndex = scroller.TotalUnits - scroller.DisplayUnits;
                if (scrollIndex < 0) scrollIndex = 0;
                scroller.Reset(scroller.DisplayUnits, scroller.TotalUnits, scrollIndex);
            }

            return scrollIndex;
        }
        void SetupScrollBars()
        {
            // Local items list scroll bar (e.g. items in character inventory)
            localItemsScrollBar = new VerticalScrollBar();
            localItemsScrollBar.Position = new Vector2(164, 66);
            localItemsScrollBar.Size = new Vector2(6, 117);
            localItemsScrollBar.DisplayUnits = listDisplayUnits;
            localItemsScrollBar.OnScroll += LocalItemsScrollBar_OnScroll;
            NativePanel.Components.Add(localItemsScrollBar);

            // Remote items list scroll bar (e.g. wagon, shop, loot pile, etc.)
            remoteItemsScrollBar = new VerticalScrollBar();
            remoteItemsScrollBar.Position = new Vector2(262, 66);
            remoteItemsScrollBar.Size = new Vector2(6, 117);
            remoteItemsScrollBar.DisplayUnits = listDisplayUnits;
            remoteItemsScrollBar.OnScroll += RemoteItemsScrollBar_OnScroll;
            NativePanel.Components.Add(remoteItemsScrollBar);
        }