aboutsummaryrefslogtreecommitdiff
path: root/include/cru/ui/controls
diff options
context:
space:
mode:
Diffstat (limited to 'include/cru/ui/controls')
-rw-r--r--include/cru/ui/controls/Button.hpp12
-rw-r--r--include/cru/ui/controls/IClickableControl.hpp12
2 files changed, 23 insertions, 1 deletions
diff --git a/include/cru/ui/controls/Button.hpp b/include/cru/ui/controls/Button.hpp
index 5619ec89..0d2f4898 100644
--- a/include/cru/ui/controls/Button.hpp
+++ b/include/cru/ui/controls/Button.hpp
@@ -2,9 +2,11 @@
#include "ContentControl.hpp"
#include "../helper/ClickDetector.hpp"
+#include "IClickableControl.hpp"
+#include "cru/common/Event.hpp"
namespace cru::ui::controls {
-class Button : public ContentControl {
+class Button : public ContentControl, public virtual IClickableControl {
public:
static constexpr std::u16string_view control_type = u"Button";
@@ -25,6 +27,14 @@ class Button : public ContentControl {
render::RenderObject* GetRenderObject() const override;
public:
+ helper::ClickState GetClickState() override {
+ return click_detector_.GetState();
+ }
+
+ IEvent<helper::ClickState>* ClickStateChangeEvent() override {
+ return click_detector_.StateChangeEvent();
+ }
+
const ButtonStyle& GetStyle() const { return style_; }
void SetStyle(ButtonStyle style);
diff --git a/include/cru/ui/controls/IClickableControl.hpp b/include/cru/ui/controls/IClickableControl.hpp
new file mode 100644
index 00000000..aa7f13ab
--- /dev/null
+++ b/include/cru/ui/controls/IClickableControl.hpp
@@ -0,0 +1,12 @@
+#pragma once
+#include "Base.hpp"
+
+#include "cru/common/Event.hpp"
+#include "cru/ui/helper/ClickDetector.hpp"
+
+namespace cru::ui::controls {
+struct IClickableControl : virtual Interface {
+ virtual helper::ClickState GetClickState() = 0;
+ virtual IEvent<helper::ClickState>* ClickStateChangeEvent() = 0;
+};
+} // namespace cru::ui::controls