mirror of
https://github.com/ArthurSonzogni/FTXUI.git
synced 2024-12-02 00:12:28 +08:00
11519ef1c6
- Fix focus in flexbox. This required resetting the focus state at the beginning of the ComputeRequirement(), because it can now run several times. This resolves:https://github.com/ArthurSonzogni/FTXUI/issues/399 - Add Box::Union. - Add a preliminary implementation of forwarding selected_box from within the flexbox.
57 lines
1.4 KiB
C++
57 lines
1.4 KiB
C++
#include "ftxui/screen/box.hpp"
|
|
|
|
#include <algorithm>
|
|
|
|
namespace ftxui {
|
|
/// @return the biggest Box contained in both |a| and |b|.
|
|
/// @ingroup screen
|
|
// static
|
|
Box Box::Intersection(Box a, Box b) {
|
|
return Box{
|
|
std::max(a.x_min, b.x_min),
|
|
std::min(a.x_max, b.x_max),
|
|
std::max(a.y_min, b.y_min),
|
|
std::min(a.y_max, b.y_max),
|
|
};
|
|
}
|
|
|
|
/// @return the smallest Box containing both |a| and |b|.
|
|
/// @ingroup screen
|
|
// static
|
|
Box Box::Union(Box a, Box b) {
|
|
return Box{
|
|
std::min(a.x_min, b.x_min),
|
|
std::max(a.x_max, b.x_max),
|
|
std::min(a.y_min, b.y_min),
|
|
std::max(a.y_max, b.y_max),
|
|
};
|
|
}
|
|
|
|
/// @return whether (x,y) is contained inside the box.
|
|
/// @ingroup screen
|
|
bool Box::Contain(int x, int y) const {
|
|
return x_min <= x && //
|
|
x_max >= x && //
|
|
y_min <= y && //
|
|
y_max >= y;
|
|
}
|
|
|
|
/// @return whether |other| is the same as |this|
|
|
/// @ingroup screen
|
|
bool Box::operator==(const Box& other) const {
|
|
return (x_min == other.x_min) && (x_max == other.x_max) &&
|
|
(y_min == other.y_min) && (y_max == other.y_max);
|
|
}
|
|
|
|
/// @return whether |other| and |this| are different.
|
|
/// @ingroup screen
|
|
bool Box::operator!=(const Box& other) const {
|
|
return !operator==(other);
|
|
}
|
|
|
|
} // namespace ftxui
|
|
|
|
// Copyright 2020 Arthur Sonzogni. All rights reserved.
|
|
// Use of this source code is governed by the MIT license that can be found in
|
|
// the LICENSE file.
|