diff options
author | crupest <crupest@outlook.com> | 2020-01-01 22:52:01 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2020-01-01 22:52:01 +0800 |
commit | 36708e88596364e81dc9ba2fd3cbddbcaedeedc0 (patch) | |
tree | 0c7990b9e64c6ea1e9df7c01f3521c4fbf7ea2a0 /src/ui/controls | |
parent | ae6f797561cdfa438ebef1fbbf94d784d315e655 (diff) | |
download | cru-36708e88596364e81dc9ba2fd3cbddbcaedeedc0.tar.gz cru-36708e88596364e81dc9ba2fd3cbddbcaedeedc0.tar.bz2 cru-36708e88596364e81dc9ba2fd3cbddbcaedeedc0.zip |
...
Diffstat (limited to 'src/ui/controls')
-rw-r--r-- | src/ui/controls/button.cpp | 74 |
1 files changed, 21 insertions, 53 deletions
diff --git a/src/ui/controls/button.cpp b/src/ui/controls/button.cpp index 75651a1d..7dc5a5d7 100644 --- a/src/ui/controls/button.cpp +++ b/src/ui/controls/button.cpp @@ -35,37 +35,27 @@ Button::Button() : click_detector_(this) { Set(render_object_.get(), style_.normal); render_object_->SetBorderEnabled(true); - MouseEnterEvent()->Direct()->AddHandler([this](event::MouseEventArgs& args) { - CRU_UNUSED(args) - - if (click_detector_.GetPressingButton() & trigger_button_) { - SetState(ButtonState::Press); - } else { - SetState(ButtonState::Hover); - } - }); - - MouseLeaveEvent()->Direct()->AddHandler([this](event::MouseEventArgs& args) { - CRU_UNUSED(args) - - if (click_detector_.GetPressingButton() & trigger_button_) { - SetState(ButtonState::Normal); - } else { - SetState(ButtonState::PressCancel); - } - }); - - click_detector_.ClickBeginEvent()->AddHandler([this](MouseButton button) { - if (button & trigger_button_) { - SetState(ButtonState::Press); - } - }); - - click_detector_.ClickEndEvent()->AddHandler([this](MouseButton button) { - if (button & trigger_button_) { - SetState(ButtonState::Hover); - } - }); + click_detector_.StateChangeEvent()->AddHandler( + [this](const ClickState& state) { + switch (state) { + case ClickState::None: + Set(render_object_.get(), style_.normal); + SetCursor(GetSystemCursor(SystemCursorType::Arrow)); + break; + case ClickState::Hover: + Set(render_object_.get(), style_.hover); + SetCursor(GetSystemCursor(SystemCursorType::Hand)); + break; + case ClickState::Press: + Set(render_object_.get(), style_.press); + SetCursor(GetSystemCursor(SystemCursorType::Hand)); + break; + case ClickState::PressInactive: + Set(render_object_.get(), style_.press_cancel); + SetCursor(GetSystemCursor(SystemCursorType::Arrow)); + break; + } + }); } render::RenderObject* Button::GetRenderObject() const { @@ -78,26 +68,4 @@ void Button::OnChildChanged(Control* old_child, Control* new_child) { render_object_->AddChild(new_child->GetRenderObject(), 0); } -void Button::OnStateChange(ButtonState oldState, ButtonState newState) { - CRU_UNUSED(oldState) - - switch (newState) { - case ButtonState::Normal: - Set(render_object_.get(), style_.normal); - SetCursor(GetSystemCursor(SystemCursorType::Arrow)); - break; - case ButtonState::Hover: - Set(render_object_.get(), style_.hover); - SetCursor(GetSystemCursor(SystemCursorType::Hand)); - break; - case ButtonState::Press: - Set(render_object_.get(), style_.press); - SetCursor(GetSystemCursor(SystemCursorType::Hand)); - break; - case ButtonState::PressCancel: - Set(render_object_.get(), style_.press_cancel); - SetCursor(GetSystemCursor(SystemCursorType::Arrow)); - break; - } -} } // namespace cru::ui::controls |