24Element DefaultTransform(EntryState params) {
35class ButtonBase :
public ComponentBase,
public ButtonOption {
37 explicit ButtonBase(ButtonOption option) : ButtonOption(std::move(option)) {}
41 const bool active = Active();
42 const bool focused = Focused();
43 const bool focused_or_hover = focused || mouse_hover_;
45 float target = focused_or_hover ? 1.f : 0.f;
46 if (target != animator_background_.to()) {
47 SetAnimationTarget(target);
50 const EntryState state{
51 *label,
false, active, focused_or_hover, Index(),
54 auto element = (transform ? transform : DefaultTransform)
56 element |= AnimatedColorStyle();
64 if (animated_colors.background.enabled) {
67 animated_colors.background.inactive,
68 animated_colors.background.active));
70 if (animated_colors.foreground.enabled) {
73 animated_colors.foreground.inactive,
74 animated_colors.foreground.active));
79 void SetAnimationTarget(
float target) {
80 if (animated_colors.foreground.enabled) {
81 animator_foreground_ = animation::Animator(
82 &animation_foreground_, target, animated_colors.foreground.duration,
83 animated_colors.foreground.function);
85 if (animated_colors.background.enabled) {
86 animator_background_ = animation::Animator(
87 &animation_background_, target, animated_colors.background.duration,
88 animated_colors.background.function);
92 void OnAnimation(animation::Params& p)
override {
93 animator_background_.OnAnimation(p);
94 animator_foreground_.OnAnimation(p);
98 animation_background_ = 0.5F;
99 animation_foreground_ = 0.5F;
100 SetAnimationTarget(1.F);
107 bool OnEvent(Event event)
override {
108 if (event.is_mouse()) {
109 return OnMouseEvent(event);
119 bool OnMouseEvent(Event event) {
121 box_.Contain(event.mouse().x, event.mouse().y) && CaptureMouse(event);
137 bool Focusable() const final {
return true; }
140 bool mouse_hover_ =
false;
142 ButtonOption option_;
143 float animation_background_ = 0;
144 float animation_foreground_ = 0;
145 animation::Animator animator_background_ =
146 animation::Animator(&animation_background_);
147 animation::Animator animator_foreground_ =
148 animation::Animator(&animation_foreground_);
205 std::function<
void()> on_click,
207 option.
label = std::move(label);
208 option.
on_click = std::move(on_click);
An adapter. Own or reference a constant string. For convenience, this class convert multiple immutabl...
std::function< void()> on_click
static const Event Return
Component Button(ButtonOption options)
Draw a button. Execute a function when clicked.
Decorator bgcolor(Color)
Decorate using a background color.
Element nothing(Element element)
A decoration doing absolutely nothing.
Element bold(Element)
Use a bold font, for elements with more emphasis.
Element inverted(Element)
Add a filter that will invert the foreground and the background colors.
Element text(std::wstring text)
Display a piece of unicode text.
Element focus(Element)
Set the child to be the one focused among its siblings.
Element border(Element)
Draw a border around the element.
Decorator color(Color)
Decorate using a foreground color.
static Color Interpolate(float t, const Color &a, const Color &b)
The FTXUI ftxui:: namespace.
std::function< Element(Element)> Decorator
std::shared_ptr< T > Make(Args &&... args)
std::shared_ptr< Node > Element
Decorator reflect(Box &box)
std::shared_ptr< ComponentBase > Component