diff --git a/abstractGuiManager.cpp b/abstractGuiManager.cpp index f30f2c8..d8c61cd 100644 --- a/abstractGuiManager.cpp +++ b/abstractGuiManager.cpp @@ -94,22 +94,32 @@ namespace vb01Gui{ } } - void AbstractGuiManager::findClickedButton(){ - bool textboxClicked = false, listboxClicked = false; - + vector AbstractGuiManager::findClickedButtons(){ + vector clickedButtons; + Vector2 mousePos = getCursorPos(); + for (int i = 0; i < buttons.size(); i++) { - Vector2 mousePos = getCursorPos(); - Button *b = buttons[i]; - bool withinX = mousePos.x > b->getPos().x && mousePos.x < b->getPos().x + b->getSize().x; - bool withinY = mousePos.y > b->getPos().y && mousePos.y < b->getPos().y + b->getSize().y; + bool withinX = mousePos.x > buttons[i]->getPos().x && mousePos.x < buttons[i]->getPos().x + buttons[i]->getSize().x; + bool withinY = mousePos.y > buttons[i]->getPos().y && mousePos.y < buttons[i]->getPos().y + buttons[i]->getSize().y; - if (b->isActive() && withinX && withinY){ + if (withinX && withinY) + clickedButtons.push_back(buttons[i]); + } + + return clickedButtons; + } + + void AbstractGuiManager::updateGui(){ + bool textboxClicked = false, listboxClicked = false; + vector clickedButtons = findClickedButtons(); + + for (Button *b : clickedButtons) + if (b->isActive()){ b->onClick(); updateCurrentListbox(b, listboxClicked); updateCurrentSlider(b); updateCurrentTextbox(b, textboxClicked); } - } if(!textboxClicked && currentTextbox){ currentTextbox->disable(); diff --git a/abstractGuiManager.h b/abstractGuiManager.h index efcf824..63efe19 100644 --- a/abstractGuiManager.h +++ b/abstractGuiManager.h @@ -19,7 +19,8 @@ namespace vb01Gui{ class AbstractGuiManager{ public: void update(); - void findClickedButton(); + std::vector findClickedButtons(); + void updateGui(); void addButton(Button *b){buttons.push_back(b);} void removeButton(Button*); void removeButton(std::string); @@ -54,7 +55,11 @@ namespace vb01Gui{ ); inline std::vector getButtons(){return buttons;} inline std::vector getListboxes(){return listboxes;} + inline std::vector getCheckboxes(){return checkboxes;} + inline std::vector getSliders(){return sliders;} inline std::vector getTextboxes(){return textboxes;} + inline std::vector getGuiRectangles(){return guiRectangles;} + inline std::vector getTexts(){return texts;} private: void updateCurrentListbox(Button*, bool&); void updateCurrentSlider(Button*); diff --git a/button.h b/button.h index 6a99bfd..224307a 100644 --- a/button.h +++ b/button.h @@ -20,7 +20,7 @@ namespace vb01Gui{ public: Button(vb01::Vector2, vb01::Vector2, std::string, std::string, int = -1, bool = true, std::string = ""); virtual ~Button(); - void update(); + virtual void update(); virtual void onMouseOver(); virtual void onMouseOff(); virtual void onClick(){}