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
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 21 additions and 13 deletions

View File

@ -50,10 +50,14 @@ int main(int argc, const char* argv[]) {
// -- Checkbox ---------------------------------------------------------------
bool checkbox_1_selected = false;
bool checkbox_2_selected = false;
bool checkbox_3_selected = false;
bool checkbox_4_selected = false;
auto checkboxes = Container::Vertical({
Checkbox("checkbox1", &checkbox_1_selected),
Checkbox("checkbox2", &checkbox_2_selected),
Checkbox("checkbox3", &checkbox_3_selected),
Checkbox("checkbox4", &checkbox_4_selected),
});
checkboxes = Wrap("Checkbox", checkboxes);

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);