Added ability to set minimal height for slide wrap.

This commit is contained in:
23rd 2022-11-12 14:10:35 +03:00
parent 3f28dfa821
commit 1ee4b34bf6
2 changed files with 12 additions and 3 deletions

View file

@ -96,6 +96,10 @@ SlideWrap<RpWidget> *SlideWrap<RpWidget>::toggleOn(
return this;
}
void SlideWrap<RpWidget>::setMinimalHeight(int height) {
_minimalHeight = height;
}
void SlideWrap<RpWidget>::animationStep() {
const auto weak = wrapped();
if (weak && !_up) {
@ -106,8 +110,11 @@ void SlideWrap<RpWidget>::animationStep() {
const auto current = _animation.value(_toggled ? 1. : 0.);
const auto newHeight = weak
? (_animation.animating()
? anim::interpolate(0, weak->heightNoMargins(), current)
: (_toggled ? weak->height() : 0))
? anim::interpolate(
_minimalHeight,
weak->heightNoMargins(),
current)
: (_toggled ? weak->height() : _minimalHeight))
: 0;
if (weak && _up) {
const auto margins = getMargins();
@ -121,7 +128,7 @@ void SlideWrap<RpWidget>::animationStep() {
const auto shouldBeHidden = !_toggled && !_animation.animating();
if (shouldBeHidden != isHidden()) {
const auto guard = MakeWeak(this);
setVisible(!shouldBeHidden);
setVisible(!shouldBeHidden || _minimalHeight);
if (shouldBeHidden && guard) {
SendPendingMoveResizeEvents(this);
}

View file

@ -53,6 +53,7 @@ public:
auto toggledValue() const {
return _toggledChanged.events_starting_with_copy(_toggled);
}
void setMinimalHeight(int height);
QMargins getMargins() const override;
@ -68,6 +69,7 @@ private:
int _duration = 0;
bool _toggled = true;
bool _up = false;
int _minimalHeight = 0;
};