summaryrefslogtreecommitdiffstats
path: root/src/Widget.hpp
diff options
context:
space:
mode:
authorLaG1924 <12997935+LaG1924@users.noreply.github.com>2017-08-27 17:24:28 +0200
committerLaG1924 <12997935+LaG1924@users.noreply.github.com>2018-01-13 03:39:28 +0100
commit04ab1a3420b46af046a898ee5510e0d9b25ed24c (patch)
tree4e9d300bb38d434305d00337535c7c4077bc57c4 /src/Widget.hpp
parent2017-08-23 (diff)
downloadAltCraft-04ab1a3420b46af046a898ee5510e0d9b25ed24c.tar
AltCraft-04ab1a3420b46af046a898ee5510e0d9b25ed24c.tar.gz
AltCraft-04ab1a3420b46af046a898ee5510e0d9b25ed24c.tar.bz2
AltCraft-04ab1a3420b46af046a898ee5510e0d9b25ed24c.tar.lz
AltCraft-04ab1a3420b46af046a898ee5510e0d9b25ed24c.tar.xz
AltCraft-04ab1a3420b46af046a898ee5510e0d9b25ed24c.tar.zst
AltCraft-04ab1a3420b46af046a898ee5510e0d9b25ed24c.zip
Diffstat (limited to 'src/Widget.hpp')
-rw-r--r--src/Widget.hpp74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/Widget.hpp b/src/Widget.hpp
new file mode 100644
index 0000000..6d78ebe
--- /dev/null
+++ b/src/Widget.hpp
@@ -0,0 +1,74 @@
+#pragma once
+
+#include <vector>
+#include <memory>
+#include <functional>
+
+#include "AssetManager.hpp"
+
+class Widget;
+class RootWidget {
+ std::vector<std::unique_ptr<Widget>> allWidgets;
+
+ std::vector<Widget*> childs;
+
+ double prevX, prevY;
+ bool prevBut;
+public:
+ RootWidget() = default;
+
+ ~RootWidget() = default;
+
+ void AttachWidget(std::unique_ptr<Widget> widget, Widget* parent);
+
+ void AttachWidget(std::unique_ptr<Widget> widget);
+
+ std::vector<Widget*> GetRenderList();
+
+ void UpdateEvents(double mouseX, double mouseY, bool mouseButton);
+};
+
+struct Widget {
+ Widget() = default;
+
+ virtual ~Widget() = default;
+
+ Widget *parent;
+
+ std::vector<Widget*> childs;
+
+ double x, y, w, h; //In OGL screen-coordinates
+
+ virtual std::tuple<double, double, double, double> GetTexture() = 0;
+
+
+ using Handler = std::function<void(Widget*)>;
+
+ Handler onPress;
+
+ Handler onRelease;
+
+ Handler onHover;
+
+ Handler onUnhover;
+
+ Handler onUpdate;
+};
+
+struct WidgetButton : Widget {
+ WidgetButton();
+
+ ~WidgetButton() override = default;
+
+ std::string Text;
+
+ Handler onClick;
+
+ std::tuple<double, double, double, double> GetTexture() override;
+
+ enum class WidgetState {
+ Idle,
+ Hovering,
+ Pressed,
+ } state;
+}; \ No newline at end of file