From 96279cc04d47bcef41f6eb907df47b741ee7c920 Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 11 May 2022 12:41:08 +0400 Subject: [PATCH] Fix generic box size with pinned top content. --- ui/layers/generic_box.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/ui/layers/generic_box.cpp b/ui/layers/generic_box.cpp index beb32e5..9e85910 100644 --- a/ui/layers/generic_box.cpp +++ b/ui/layers/generic_box.cpp @@ -17,15 +17,22 @@ void GenericBox::prepare() { _init(this); const auto currentWidth = width(); - if (_pinnedToTopContent) { - _pinnedToTopContent->resizeToWidth(currentWidth); + const auto pinned = _pinnedToTopContent.data(); + if (pinned) { + pinned->resizeToWidth(currentWidth); } auto wrap = object_ptr(this, std::move(_owned)); - setDimensionsToContent(currentWidth, wrap.data()); - setInnerWidget( - std::move(wrap), - _pinnedToTopContent ? _pinnedToTopContent->height() : 0); + wrap->resizeToWidth(currentWidth); + rpl::combine( + pinned ? pinned->heightValue() : rpl::single(0), + wrap->heightValue() + ) | rpl::start_with_next([=](int top, int height) { + setInnerTopSkip(top); + setDimensions(currentWidth, top + height); + }, wrap->lifetime()); + + setInnerWidget(std::move(wrap), pinned ? pinned->height() : 0); } void GenericBox::addSkip(int height) {