Replaced BubbleWrap class with single function.

This commit is contained in:
23rd 2023-01-31 22:58:57 +03:00 committed by John Preston
parent 7c8ada0e78
commit 1026f41da8
3 changed files with 19 additions and 36 deletions

View File

@ -41,23 +41,16 @@ void PaintExcludeTopShadow(QPainter &p, int radius, const QRect &r) {
} // namespace
QRect BubbleWrap::innerRect() const {
return rect() - st::userpicBuilderEmojiBubblePadding;
QRect BubbleWrapInnerRect(const QRect &r) {
return r - st::userpicBuilderEmojiBubblePadding;
}
rpl::producer<QRect> BubbleWrap::innerRectValue() const {
return sizeValue() | rpl::map([](const QSize &s) {
return Rect(s) - st::userpicBuilderEmojiBubblePadding;
});
}
not_null<BubbleWrap*> AddBubbleWrap(
not_null<Ui::RpWidget*> AddBubbleWrap(
not_null<Ui::VerticalLayout*> container,
const QSize &size,
Fn<not_null<const Ui::ChatStyle*>()> chatStyle) {
const auto bubble = container->add(object_ptr<Ui::CenterWrap<BubbleWrap>>(
const QSize &size) {
const auto bubble = container->add(object_ptr<Ui::CenterWrap<RpWidget>>(
container,
object_ptr<BubbleWrap>(container)))->entity();
object_ptr<Ui::RpWidget>(container)))->entity();
bubble->resize(size);
auto cached = QImage(
@ -67,7 +60,7 @@ not_null<BubbleWrap*> AddBubbleWrap(
cached.fill(Qt::transparent);
{
auto p = QPainter(&cached);
const auto innerRect = bubble->innerRect();
const auto innerRect = BubbleWrapInnerRect(bubble->rect());
auto hq = PainterHighQualityEnabler(p);
const auto radius = st::bubbleRadiusSmall;
p.setPen(Qt::NoPen);

View File

@ -11,21 +11,12 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
namespace Ui {
class ChatStyle;
class VerticalLayout;
class BubbleWrap final : public Ui::RpWidget {
public:
using Ui::RpWidget::RpWidget;
[[nodiscard]] QRect BubbleWrapInnerRect(const QRect &r);
[[nodiscard]] QRect innerRect() const;
[[nodiscard]] rpl::producer<QRect> innerRectValue() const;
};
not_null<BubbleWrap*> AddBubbleWrap(
not_null<Ui::RpWidget*> AddBubbleWrap(
not_null<Ui::VerticalLayout*> container,
const QSize &size,
Fn<not_null<const Ui::ChatStyle*>()> chatStyle);
const QSize &size);
} // namespace Ui

View File

@ -386,8 +386,7 @@ not_null<Ui::VerticalLayout*> CreateUserpicBuilder(
const auto paletteBg = Ui::AddBubbleWrap(
container,
st::userpicBuilderEmojiBubblePaletteSize,
[=] { return controller->chatStyle(); });
st::userpicBuilderEmojiBubblePaletteSize);
const auto palette = Ui::CreateChild<Ui::RpWidget>(paletteBg.get());
{
constexpr auto kColorsCount = int(7);
@ -455,9 +454,10 @@ not_null<Ui::VerticalLayout*> CreateUserpicBuilder(
state->circleButtons[current]->setSelectedProgress(1.);
state->circleButtons[current]->clicked({}, Qt::LeftButton);
}
paletteBg->innerRectValue(
) | rpl::start_with_next([=](const QRect &r) {
palette->setGeometry(r - st::userpicBuilderEmojiBubblePalettePadding);
paletteBg->sizeValue(
) | rpl::start_with_next([=](const QSize &s) {
palette->setGeometry(Ui::BubbleWrapInnerRect(Rect(s))
- st::userpicBuilderEmojiBubblePalettePadding);
AlignChildren(palette, palette->width());
}, palette->lifetime());
@ -474,8 +474,7 @@ not_null<Ui::VerticalLayout*> CreateUserpicBuilder(
container,
QSize(
st::userpicBuilderEmojiBubblePaletteSize.width(),
st::userpicBuilderEmojiSelectorMinHeight),
[=] { return controller->chatStyle(); });
st::userpicBuilderEmojiSelectorMinHeight));
const auto selector = Ui::CreateChild<EmojiSelector>(
selectorBg.get(),
controller,
@ -485,9 +484,9 @@ not_null<Ui::VerticalLayout*> CreateUserpicBuilder(
state->gradientEditorStartData.documentId = document->id;
preview->setDocument(document);
}, preview->lifetime());
selectorBg->innerRectValue(
) | rpl::start_with_next([=](const QRect &r) {
selector->setGeometry(r);
selectorBg->sizeValue(
) | rpl::start_with_next([=](const QSize &s) {
selector->setGeometry(Ui::BubbleWrapInnerRect(Rect(s)));
}, selector->lifetime());
base::take(