Fix mouse wheel on checkbox. (#205)

This commit is contained in:
Arthur Sonzogni
2021-09-16 00:47:31 +02:00
committed by GitHub
parent 7d4452f45c
commit 37b44e7557
4 changed files with 21 additions and 13 deletions

View File

@@ -34,18 +34,22 @@ class CheckboxBase : public ComponentBase {
Element Render() override {
bool is_focused = Focused();
bool is_active = Active();
auto style = is_focused ? (hovered_ ? option_->style_selected_focused
: option_->style_selected)
: (hovered_ ? option_->style_focused
: option_->style_normal);
auto style = (is_focused || hovered_) ? option_->style_selected_focused
: is_active ? option_->style_selected
: option_->style_normal;
auto focus_management = is_focused ? focus : is_active ? select : nothing;
return hbox(text(*state_ ? option_->style_checked
: option_->style_unchecked),
text(*label_) | style | focus_management) |
return hbox({
text(*state_ ? option_->style_checked
: option_->style_unchecked),
text(*label_) | style | focus_management,
}) |
reflect(box_);
}
bool OnEvent(Event event) override {
if (!CaptureMouse(event))
return false;
if (event.is_mouse())
return OnMouseEvent(event);
@@ -53,6 +57,7 @@ class CheckboxBase : public ComponentBase {
if (event == Event::Character(' ') || event == Event::Return) {
*state_ = !*state_;
option_->on_change();
TakeFocus();
return true;
}
return false;

View File

@@ -89,8 +89,8 @@ class VerticalContainer : public ContainerBase {
for (auto& it : children_)
elements.push_back(it->Render());
if (elements.size() == 0)
return text("Empty container");
return vbox(std::move(elements));
return text("Empty container") | reflect(box_);
return vbox(std::move(elements)) | reflect(box_);
}
bool EventHandler(Event event) override {
@@ -117,7 +117,7 @@ class VerticalContainer : public ContainerBase {
return false;
}
if (!Focusable())
if (!box_.Contain(event.mouse().x, event.mouse().y))
return false;
if (event.mouse().button == Mouse::WheelUp)
@@ -128,6 +128,8 @@ class VerticalContainer : public ContainerBase {
return true;
}
Box box_;
};
class HorizontalContainer : public ContainerBase {

View File

@@ -103,9 +103,6 @@ class RadioboxBase : public ComponentBase {
}
bool OnMouseEvent(Event event) {
if (!CaptureMouse(event))
return false;
if (event.mouse().button == Mouse::WheelDown ||
event.mouse().button == Mouse::WheelUp) {
return OnMouseWheel(event);