aboutsummaryrefslogtreecommitdiff
path: root/include/cru/ui/controls
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2020-12-01 23:20:01 +0800
committercrupest <crupest@outlook.com>2020-12-01 23:20:01 +0800
commit0fb7a0e0b2b9e04ca414b1e47c69cc854c79831b (patch)
tree46d7f93e96bca49b0ec114c5595567b9bbcec6e3 /include/cru/ui/controls
parent4fcf336d15fe246259ee18ccc99808d80e69c455 (diff)
downloadcru-0fb7a0e0b2b9e04ca414b1e47c69cc854c79831b.tar.gz
cru-0fb7a0e0b2b9e04ca414b1e47c69cc854c79831b.tar.bz2
cru-0fb7a0e0b2b9e04ca414b1e47c69cc854c79831b.zip
...
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