Add a checkbox helper for terms accept check.

This commit is contained in:
John Preston 2023-09-06 13:40:01 +04:00
parent b571c8adfe
commit 9a17d4bd15
2 changed files with 46 additions and 0 deletions

View file

@ -10,6 +10,7 @@
#include "ui/basic_click_handlers.h" #include "ui/basic_click_handlers.h"
#include "ui/ui_utility.h" #include "ui/ui_utility.h"
#include "ui/painter.h" #include "ui/painter.h"
#include "styles/palette.h"
#include <QtGui/QtEvents> #include <QtGui/QtEvents>
#include <QtCore/QtMath> #include <QtCore/QtMath>
@ -290,6 +291,47 @@ void CheckView::setUntoggledOverride(
update(); update();
} }
Fn<void()> CheckView::PrepareNonToggledError(
not_null<CheckView*> view,
rpl::lifetime &lifetime) {
struct State {
bool error = false;
Ui::Animations::Simple errorAnimation;
};
const auto state = lifetime.make_state<State>();
view->checkedChanges(
) | rpl::filter([=](bool checked) {
return checked;
}) | rpl::start_with_next([=] {
state->error = false;
view->setUntoggledOverride(std::nullopt);
}, lifetime);
return [=] {
const auto callback = [=] {
const auto error = state->errorAnimation.value(
state->error ? 1. : 0.);
if (error == 0.) {
view->setUntoggledOverride(std::nullopt);
} else {
const auto color = anim::color(
st::defaultCheck.untoggledFg,
st::boxTextFgError,
error);
view->setUntoggledOverride(color);
}
};
state->error = true;
state->errorAnimation.stop();
state->errorAnimation.start(
callback,
0.,
1.,
st::defaultCheck.duration);
};
}
RadioView::RadioView( RadioView::RadioView(
const style::Radio &st, const style::Radio &st,
bool checked, bool checked,

View file

@ -75,6 +75,10 @@ public:
void setUntoggledOverride( void setUntoggledOverride(
std::optional<QColor> untoggledOverride); std::optional<QColor> untoggledOverride);
[[nodiscard]] static Fn<void()> PrepareNonToggledError(
not_null<CheckView*> view,
rpl::lifetime &lifetime);
private: private:
QSize rippleSize() const; QSize rippleSize() const;