mirror of
https://github.com/ArthurSonzogni/FTXUI.git
synced 2025-09-17 08:28:09 +08:00
Fix mouse wheel on checkbox. (#205)
This commit is contained in:
@@ -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;
|
||||
|
@@ -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 {
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user