]> git.lizzy.rs Git - irrlicht.git/commitdiff
Revert "Fix: Listbox was sometimes sending EGET_LISTBOX_SELECTED_AGAIN instead of...
authorsfan5 <sfan5@live.de>
Tue, 11 Apr 2023 12:36:44 +0000 (14:36 +0200)
committersfan5 <sfan5@live.de>
Tue, 11 Apr 2023 12:36:44 +0000 (14:36 +0200)
This broke scrolling in listboxes, as they would always reset to top position.
reverts commit 1967d71cfba23fb54ac88cea64673f73af13bfda

source/Irrlicht/CGUIListBox.cpp
source/Irrlicht/CGUIListBox.h

index cbd3ae5ba69380cf9663a6888c8709ee0c3c9c48..b00c7e3892ebdb642aa01c5d3aca00307e380831 100644 (file)
@@ -22,10 +22,10 @@ namespace gui
 CGUIListBox::CGUIListBox(IGUIEnvironment* environment, IGUIElement* parent,\r
                        s32 id, core::rect<s32> rectangle, bool clip,\r
                        bool drawBack, bool moveOverSelect)\r
-: IGUIListBox(environment, parent, id, rectangle), Selected(-1), HoverSelected(-1),\r
+: IGUIListBox(environment, parent, id, rectangle), Selected(-1),\r
        ItemHeight(0),ItemHeightOverride(0),\r
        TotalItemHeight(0), ItemsIconWidth(0), Font(0), IconBank(0),\r
-       ScrollBar(0), SelectTime(0), LastKeyTime(0), Selecting(false), DrawBack(drawBack),\r
+       ScrollBar(0), selectTime(0), LastKeyTime(0), Selecting(false), DrawBack(drawBack),\r
        MoveOverSelect(moveOverSelect), AutoScroll(true), HighlightWhenNotFocused(true)\r
 {\r
        #ifdef _DEBUG\r
@@ -116,7 +116,7 @@ void CGUIListBox::removeItem(u32 id)
        else if ((u32)Selected > id)\r
        {\r
                Selected -= 1;\r
-               SelectTime = os::Timer::getTime();\r
+               selectTime = os::Timer::getTime();\r
        }\r
 \r
        Items.erase(id);\r
@@ -148,7 +148,6 @@ void CGUIListBox::clear()
        Items.clear();\r
        ItemsIconWidth = 0;\r
        Selected = -1;\r
-       HoverSelected = -1;\r
 \r
        ScrollBar->setPos(0);\r
 \r
@@ -193,7 +192,7 @@ void CGUIListBox::recalculateItemHeight()
 //! returns id of selected item. returns -1 if no item is selected.\r
 s32 CGUIListBox::getSelected() const\r
 {\r
-       return HoverSelected >= 0 ? HoverSelected : Selected;\r
+       return Selected;\r
 }\r
 \r
 \r
@@ -205,8 +204,7 @@ void CGUIListBox::setSelected(s32 id)
        else\r
                Selected = id;\r
 \r
-       HoverSelected = -1;\r
-       SelectTime = os::Timer::getTime();\r
+       selectTime = os::Timer::getTime();\r
 \r
        recalculateScrollPos();\r
 }\r
@@ -456,19 +454,14 @@ void CGUIListBox::selectNew(s32 ypos, bool onlyHover)
        u32 now = os::Timer::getTime();\r
        s32 oldSelected = Selected;\r
 \r
-       HoverSelected = getItemAt(AbsoluteRect.UpperLeftCorner.X, ypos);\r
-       if (HoverSelected<0 && !Items.empty())\r
-               HoverSelected = 0;\r
-       if  (!onlyHover)\r
-       {\r
-               Selected = HoverSelected;\r
-               HoverSelected = -1;\r
-       }\r
+       Selected = getItemAt(AbsoluteRect.UpperLeftCorner.X, ypos);\r
+       if (Selected<0 && !Items.empty())\r
+               Selected = 0;\r
 \r
        recalculateScrollPos();\r
 \r
-       gui::EGUI_EVENT_TYPE eventType = (Selected == oldSelected && now < SelectTime + 500) ? EGET_LISTBOX_SELECTED_AGAIN : EGET_LISTBOX_CHANGED;\r
-       SelectTime = now;\r
+       gui::EGUI_EVENT_TYPE eventType = (Selected == oldSelected && now < selectTime + 500) ? EGET_LISTBOX_SELECTED_AGAIN : EGET_LISTBOX_CHANGED;\r
+       selectTime = now;\r
        // post the news\r
        if (Parent && !onlyHover)\r
        {\r
@@ -534,14 +527,13 @@ void CGUIListBox::draw()
        frameRect.LowerRightCorner.Y -= ScrollBar->getPos();\r
 \r
        bool hl = (HighlightWhenNotFocused || Environment->hasFocus(this) || Environment->hasFocus(ScrollBar));\r
-       const irr::s32 selected = getSelected();\r
 \r
        for (s32 i=0; i<(s32)Items.size(); ++i)\r
        {\r
                if (frameRect.LowerRightCorner.Y >= AbsoluteRect.UpperLeftCorner.Y &&\r
                        frameRect.UpperLeftCorner.Y <= AbsoluteRect.LowerRightCorner.Y)\r
                {\r
-                       if (i == selected && hl)\r
+                       if (i == Selected && hl)\r
                                skin->draw2DRectangle(this, skin->getColor(EGDC_HIGH_LIGHT), frameRect, &clientClip);\r
 \r
                        core::rect<s32> textRect = frameRect;\r
@@ -555,24 +547,24 @@ void CGUIListBox::draw()
                                        iconPos.Y += textRect.getHeight() / 2;\r
                                        iconPos.X += ItemsIconWidth/2;\r
 \r
-                                       if ( i==selected && hl )\r
+                                       if ( i==Selected && hl )\r
                                        {\r
                                                IconBank->draw2DSprite( (u32)Items[i].Icon, iconPos, &clientClip,\r
                                                        hasItemOverrideColor(i, EGUI_LBC_ICON_HIGHLIGHT) ?\r
                                                        getItemOverrideColor(i, EGUI_LBC_ICON_HIGHLIGHT) : getItemDefaultColor(EGUI_LBC_ICON_HIGHLIGHT),\r
-                                                       SelectTime, os::Timer::getTime(), false, true);\r
+                                                       selectTime, os::Timer::getTime(), false, true);\r
                                        }\r
                                        else\r
                                        {\r
                                                IconBank->draw2DSprite( (u32)Items[i].Icon, iconPos, &clientClip,\r
                                                        hasItemOverrideColor(i, EGUI_LBC_ICON) ? getItemOverrideColor(i, EGUI_LBC_ICON) : getItemDefaultColor(EGUI_LBC_ICON),\r
-                                                       0 , (i==selected) ? os::Timer::getTime() : 0, false, true);\r
+                                                       0 , (i==Selected) ? os::Timer::getTime() : 0, false, true);\r
                                        }\r
                                }\r
 \r
                                textRect.UpperLeftCorner.X += ItemsIconWidth+3;\r
 \r
-                               if ( i==selected && hl )\r
+                               if ( i==Selected && hl )\r
                                {\r
                                        Font->draw(Items[i].Text.c_str(), textRect,\r
                                                hasItemOverrideColor(i, EGUI_LBC_TEXT_HIGHLIGHT) ?\r
index 37fffa847c65da9b0d9c20a341eff6a05a940711..a3e7255a6975d241af0d4c15d18745d5cf94af81 100644 (file)
@@ -154,7 +154,6 @@ namespace gui
 \r
                core::array< ListItem > Items;\r
                s32 Selected;\r
-               s32 HoverSelected;      // When >= 0 we're in the middle of changing selection while mouse is pressed. We need to know so selected again isn't called too often.\r
                s32 ItemHeight;\r
                s32 ItemHeightOverride;\r
                s32 TotalItemHeight;\r
@@ -162,7 +161,7 @@ namespace gui
                gui::IGUIFont* Font;\r
                gui::IGUISpriteBank* IconBank;\r
                gui::IGUIScrollBar* ScrollBar;\r
-               u32 SelectTime;\r
+               u32 selectTime;\r
                u32 LastKeyTime;\r
                core::stringw KeyBuffer;\r
                bool Selecting;\r