Fixed height of top bar with large subtext in premium settings.

This commit is contained in:
23rd 2022-12-21 19:07:29 +03:00 committed by John Preston
parent cf4dfa55da
commit 68b1b595a5
1 changed files with 33 additions and 3 deletions

View File

@ -397,6 +397,8 @@ public:
virtual void setPaused(bool paused) = 0;
virtual void setTextPosition(int x, int y) = 0;
[[nodiscard]] virtual rpl::producer<int> additionalHeight() const = 0;
protected:
void paintEdges(QPainter &p, const QBrush &brush) const;
void paintEdges(QPainter &p) const;
@ -601,6 +603,8 @@ public:
void setPaused(bool paused) override;
void setTextPosition(int x, int y) override;
rpl::producer<int> additionalHeight() const override;
protected:
void paintEvent(QPaintEvent *e) override;
void resizeEvent(QResizeEvent *e) override;
@ -912,6 +916,10 @@ void TopBarUser::setTextPosition(int x, int y) {
_smallTop.position = { x, y };
}
rpl::producer<int> TopBarUser::additionalHeight() const {
return rpl::never<int>();
}
void TopBarUser::paintEvent(QPaintEvent *e) {
auto p = QPainter(this);
@ -939,6 +947,8 @@ public:
void setPaused(bool paused) override;
void setTextPosition(int x, int y) override;
rpl::producer<int> additionalHeight() const override;
protected:
void paintEvent(QPaintEvent *e) override;
void resizeEvent(QResizeEvent *e) override;
@ -1020,6 +1030,13 @@ void TopBar::setTextPosition(int x, int y) {
_titlePosition = { x, y };
}
rpl::producer<int> TopBar::additionalHeight() const {
return _about->heightValue(
) | rpl::map([l = st::settingsPremiumAbout.style.lineHeight](int height) {
return std::max(height - l * 2, 0);
});
}
void TopBar::resizeEvent(QResizeEvent *e) {
const auto progress = (e->size().height() - minimumHeight())
/ float64(maximumHeight() - minimumHeight());
@ -1530,12 +1547,25 @@ QPointer<Ui::RpWidget> Premium::createPinnedToTop(
content->setRoundEdges(wrap == Info::Wrap::Layer);
}, content->lifetime());
content->setMaximumHeight(isEmojiStatus
? st::settingsPremiumUserHeight + TopTransitionSkip()
: st::settingsPremiumTopHeight);
const auto calculateMaximumHeight = [=] {
return isEmojiStatus
? st::settingsPremiumUserHeight + TopTransitionSkip()
: st::settingsPremiumTopHeight;
};
content->setMaximumHeight(calculateMaximumHeight());
content->setMinimumHeight(st::infoLayerTopBarHeight);
content->resize(content->width(), content->maximumHeight());
content->additionalHeight(
) | rpl::start_with_next([=](int additionalHeight) {
const auto wasMax = (content->height() == content->maximumHeight());
content->setMaximumHeight(calculateMaximumHeight()
+ additionalHeight);
if (wasMax) {
content->resize(content->width(), content->maximumHeight());
}
}, content->lifetime());
_wrap.value(
) | rpl::start_with_next([=](Info::Wrap wrap) {