mirror of
https://github.com/ArthurSonzogni/FTXUI.git
synced 2025-09-28 16:29:34 +08:00
Merge dom and component focus (#978)
Instead of two levels of focus with `focus` and `selected`, use a recursive level. The components set the one "active" and hbox/vbox/dbox Co-authored-by: ArthurSonzogni <sonzogniarthur@gmail.com>
This commit is contained in:
@@ -49,13 +49,7 @@ class GridBox : public Node {
|
||||
}
|
||||
|
||||
void ComputeRequirement() override {
|
||||
requirement_.min_x = 0;
|
||||
requirement_.min_y = 0;
|
||||
requirement_.flex_grow_x = 0;
|
||||
requirement_.flex_grow_y = 0;
|
||||
requirement_.flex_shrink_x = 0;
|
||||
requirement_.flex_shrink_y = 0;
|
||||
|
||||
requirement_ = Requirement{};
|
||||
for (auto& line : lines_) {
|
||||
for (auto& cell : line) {
|
||||
cell->ComputeRequirement();
|
||||
@@ -75,19 +69,15 @@ class GridBox : public Node {
|
||||
requirement_.min_x = Integrate(size_x);
|
||||
requirement_.min_y = Integrate(size_y);
|
||||
|
||||
// Forward the selected/focused child state:
|
||||
requirement_.selection = Requirement::NORMAL;
|
||||
// Forward the focused/focused child state:
|
||||
for (int x = 0; x < x_size; ++x) {
|
||||
for (int y = 0; y < y_size; ++y) {
|
||||
if (requirement_.selection >= lines_[y][x]->requirement().selection) {
|
||||
if (requirement_.focused.enabled ||
|
||||
!lines_[y][x]->requirement().focused.enabled) {
|
||||
continue;
|
||||
}
|
||||
requirement_.selection = lines_[y][x]->requirement().selection;
|
||||
requirement_.selected_box = lines_[y][x]->requirement().selected_box;
|
||||
requirement_.selected_box.x_min += size_x[x];
|
||||
requirement_.selected_box.x_max += size_x[x];
|
||||
requirement_.selected_box.y_min += size_y[y];
|
||||
requirement_.selected_box.y_max += size_y[y];
|
||||
requirement_.focused = lines_[y][x]->requirement().focused;
|
||||
requirement_.focused.box.Shift(size_x[x], size_y[y]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user