public CharSheetSkillsUi() { var detailsDoc = WidgetDoc.Load("ui/char_skills.json"); Container = detailsDoc.GetRootContainer(); Container.SetMouseMsgHandler(msg => { // Forward mouse wheel messages to the scrollbar if ((msg.flags & MouseEventFlag.ScrollWheelChange) != 0) { _scrollbar.HandleMouseMessage(msg); } return(true); }); Container.Name = "char_skills_ui_main_window"; Container.Visible = false; _skillRanks = detailsDoc.GetTextContent("skill-ranks-label"); _attributeBonus = detailsDoc.GetTextContent("skill-attribute-bonus-label"); _attributeType = detailsDoc.GetTextContent("skill-attribute-type-label"); _miscBonus = detailsDoc.GetTextContent("skill-misc-bonus-label"); _total = detailsDoc.GetTextContent("skill-total-label"); HideSkillDetails(); for (var i = 0; i < 20; i++) { var button = new SkillButton(new Rectangle(1, 1 + 13 * i, 156, 13)); button.OnMouseEnter += _ => ShowSkillDetails(button); button.OnMouseExit += _ => HideSkillDetails(); button.SetMouseMsgHandler(msg => { if ((msg.flags & MouseEventFlag.ScrollWheelChange) != 0) { return(_scrollbar.HandleMouseMessage(msg)); } return(false); }); Container.Add(button); _skillButtons[i] = button; } if (VisibleSkills.Length > _skillButtons.Length) { _scrollbar = new WidgetScrollBar(new Rectangle(160, -4, 13, 267)); _scrollbar.SetMin(0); _scrollbar.Max = VisibleSkills.Length - _skillButtons.Length; Container.Add(_scrollbar); _scrollbar.SetValueChangeHandler((value) => UpdateSkillButtons()); } UpdateSkillButtons(); }
public WidgetScrollBarHandle(WidgetScrollBar scrollBar) { mScrollBar = scrollBar; mTop = new WidgetImage("art/scrollbar/top.tga"); mTopClicked = new WidgetImage("art/scrollbar/top_click.tga"); mHandle = new WidgetImage("art/scrollbar/fill.tga"); mHandleClicked = new WidgetImage("art/scrollbar/fill_click.tga"); mBottom = new WidgetImage("art/scrollbar/bottom.tga"); mBottomClicked = new WidgetImage("art/scrollbar/bottom_click.tga"); Width = mHandle.GetPreferredSize().Width; }
public WidgetScrollView(int width, int height) : base(width, height) { var scrollBar = new WidgetScrollBar(); scrollBar.Height = height; scrollBar.X = width - scrollBar.Width; scrollBar.SetValueChangeHandler(newValue => { mContainer.SetScrollOffsetY(newValue); }); mScrollBar = scrollBar; base.Add(scrollBar); var scrollView = new WidgetContainer(GetInnerWidth(), height); mContainer = scrollView; base.Add(scrollView); UpdateInnerContainer(); }
public KnownSpellsList(Rectangle rectangle, GameObject critter, int classCode) : base(rectangle) { var spellsKnown = critter.GetSpellArray(obj_f.critter_spells_known_idx); var domainSpells = GameSystems.Spell.IsDomainSpell(classCode); // Try scrolling one spell per scrollbar-tick var buttonHeight = 10; var currentY = 0; for (var level = 0; level <= 9; level++) { var headerAdded = false; foreach (var spell in spellsKnown) { if (domainSpells != GameSystems.Spell.IsDomainSpell(spell.classCode) || !domainSpells && spell.classCode != classCode || spell.spellLevel != level) { continue; } if (!headerAdded) { var levelHeader = new WidgetText($"#{{char_ui_spells:3}} {level}", "char-spell-level"); levelHeader.Y = currentY; currentY += levelHeader.GetPreferredSize().Height; AddContent(levelHeader); headerAdded = true; } var spellOpposesAlignment = GameSystems.Spell.SpellOpposesAlignment(critter, spell.classCode, spell.spellEnum); var spellButton = new KnownSpellButton( new Rectangle(8, currentY, Width - 8, 12), spellOpposesAlignment, spell ); spellButton.Y = currentY; spellButton.OnMemorizeSpell += (spell, button) => OnMemorizeSpell?.Invoke(spell, button); currentY += spellButton.Height; Add(spellButton); buttonHeight = Math.Max(buttonHeight, spellButton.Height); } } var overscroll = currentY - Height; if (overscroll > 0) { var lines = (int)MathF.Ceiling(overscroll / (float)buttonHeight); _scrollbar = new WidgetScrollBar(); _scrollbar.X = Width - _scrollbar.Width; _scrollbar.Height = Height; // Clip existing items that overlap the scrollbar foreach (var widgetBase in GetChildren()) { if (widgetBase.X + widgetBase.Width >= _scrollbar.X) { var remainingWidth = Math.Max(0, _scrollbar.X - widgetBase.X); widgetBase.Width = remainingWidth; } } _scrollbar.SetMin(0); _scrollbar.Max = lines; _scrollbar.SetValueChangeHandler(value => { SetScrollOffsetY(value * buttonHeight); _scrollbar.Y = value * buttonHeight; // Horrible fakery, moving the scrollbar along }); Add(_scrollbar); } }