diff options
Diffstat (limited to '')
-rw-r--r-- | src/Widget.cpp | 124 |
1 files changed, 0 insertions, 124 deletions
diff --git a/src/Widget.cpp b/src/Widget.cpp deleted file mode 100644 index 1a522ca..0000000 --- a/src/Widget.cpp +++ /dev/null @@ -1,124 +0,0 @@ -#include "Widget.hpp" - -void RootWidget::AttachWidget(std::unique_ptr<Widget> widget, Widget * parent) -{ - parent->childs.push_back(widget.get()); - this->allWidgets.push_back(std::move(widget)); -} - -void RootWidget::AttachWidget(std::unique_ptr<Widget> widget) { - widget->parent = nullptr; - this->childs.push_back(widget.get()); - this->allWidgets.push_back(std::move(widget)); -} - -std::vector<Widget*> RootWidget::GetRenderList() -{ - std::vector<Widget*> renderList; - - std::function<void(Widget*)> treeWalker = [&](Widget* node) { - for (auto it : node->childs) - treeWalker(it); - renderList.push_back(node); - }; - - for (auto& it : this->childs) - treeWalker(it); - - return renderList; -} - -void RootWidget::UpdateEvents(double mouseX, double mouseY, bool mouseButton) { - - LOG(INFO) << mouseX << "x" << mouseY; - - auto testIsHover = [&](double x, double y, Widget* widget) { - bool isOnX = widget->x > x && widget->x + widget->w < x; - bool isOnY = widget->y > y && widget->y + widget->h < y; - if (mouseButton) - LOG(INFO) << "X: " << isOnX << " Y: " << isOnY; - return isOnX && isOnY; - }; - - std::function<void(Widget*)> treeWalker = [&](Widget* node) { - for (auto it : node->childs) - treeWalker(it); - - if (testIsHover(mouseX,mouseY,node)) { - if (node->onHover) - node->onHover(node); - if (mouseButton && !prevBut) - if (node->onPress) - node->onPress(node); - else if (!mouseButton && prevBut) - if (node->onRelease) - node->onRelease(node); - } - else { - if (testIsHover(prevX, prevY, node)) - if (node->onUnhover) - node->onUnhover(node); - } - - if (node->onUpdate) - node->onUpdate(node); - }; - - for (auto it : childs) - treeWalker(it); - - prevX = mouseX; - prevY = mouseY; - prevBut = mouseButton; -} - -WidgetButton::WidgetButton() -{ - this->state = WidgetState::Idle; - - onHover = [](Widget* widget) { - WidgetButton* w = dynamic_cast<WidgetButton*>(widget); - if (w->state != WidgetState::Pressed) - w->state = WidgetState::Hovering; - LOG(INFO) << "Hover"; - }; - - onPress = [](Widget* widget) { - WidgetButton* w = dynamic_cast<WidgetButton*>(widget); - w->state = WidgetState::Pressed; - LOG(INFO) << "Press"; - }; - - onRelease = [](Widget* widget) { - WidgetButton* w = dynamic_cast<WidgetButton*>(widget); - w->state = WidgetState::Idle; - w->onClick(w); - LOG(INFO) << "Release"; - }; - - onUnhover = [](Widget *widget) { - WidgetButton* w = dynamic_cast<WidgetButton*>(widget); - if (w->state!=WidgetState::Pressed) - w->state = WidgetState::Idle; - LOG(INFO) << "Unhover"; - }; - -} - -std::tuple<double, double, double, double> WidgetButton::GetTexture() -{ - double yOffset; - switch (this->state) { - case WidgetState::Idle: - yOffset = 0.2578; - break; - case WidgetState::Hovering: - yOffset = 0.3359; - break; - case WidgetState::Pressed: - yOffset = 0.1796; - } - - TextureCoordinates texture = AssetManager::Instance().GetTextureByAssetName("minecraft/textures/gui/widgets"); - return { texture.x,texture.y + texture.h * yOffset,texture.w * 0.7812,texture.h * 0.07812 }; -} |