diff --git a/Telegram/SourceFiles/info/userpic/info_userpic_colors_palette_chooser.cpp b/Telegram/SourceFiles/info/userpic/info_userpic_colors_palette_chooser.cpp index d3cecdb9ed..1259588dad 100644 --- a/Telegram/SourceFiles/info/userpic/info_userpic_colors_palette_chooser.cpp +++ b/Telegram/SourceFiles/info/userpic/info_userpic_colors_palette_chooser.cpp @@ -16,6 +16,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL namespace UserpicBuilder { namespace { +constexpr auto kColorsCount = 7; + [[nodiscard]] QLinearGradient VerticalGradient( float64 size, const QColor &c1, @@ -78,8 +80,9 @@ void ColorsPalette::CircleButton::paintEvent(QPaintEvent *event) { Settings::PaintRoundColorButton(p, h, _brush, _selectedProgress); } -ColorsPalette::ColorsPalette(not_null parent) -: Ui::RpWidget(parent) { +ColorsPalette::ColorsPalette(not_null parent, int index) +: Ui::RpWidget(parent) +, _currentIndex(index % kColorsCount) { rebuildButtons(); } @@ -90,7 +93,6 @@ rpl::producer ColorsPalette::stopsValue() { } void ColorsPalette::rebuildButtons() { - constexpr auto kColorsCount = 7; const auto size = resizeGetHeight(0); for (auto i = 0; i < kColorsCount; i++) { _buttons.emplace_back(base::make_unique_q(this)); diff --git a/Telegram/SourceFiles/info/userpic/info_userpic_colors_palette_chooser.h b/Telegram/SourceFiles/info/userpic/info_userpic_colors_palette_chooser.h index e6ab2ac8fe..7d6c58941d 100644 --- a/Telegram/SourceFiles/info/userpic/info_userpic_colors_palette_chooser.h +++ b/Telegram/SourceFiles/info/userpic/info_userpic_colors_palette_chooser.h @@ -15,7 +15,7 @@ namespace UserpicBuilder { class ColorsPalette final : public Ui::RpWidget { public: - ColorsPalette(not_null parent); + ColorsPalette(not_null parent, int index = 0); [[nodiscard]] rpl::producer stopsValue(); diff --git a/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder.cpp b/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder.cpp index d266f36eb4..d73b456760 100644 --- a/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder.cpp +++ b/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder.cpp @@ -19,6 +19,7 @@ namespace UserpicBuilder { void ShowLayer( not_null controller, + StartData data, Fn &&doneCallback) { auto layer = std::make_unique(); const auto layerRaw = layer.get(); @@ -31,6 +32,7 @@ void ShowLayer( const auto content = CreateUserpicBuilder( layerRaw, controller, + data, BothWayCommunication{ .triggers = state->clicks.events(), .result = [=, done = std::move(doneCallback)](QImage &&i) { diff --git a/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder.h b/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder.h index 2352541fff..d18bd12d37 100644 --- a/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder.h +++ b/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder.h @@ -13,8 +13,11 @@ class SessionController; namespace UserpicBuilder { +struct StartData; + void ShowLayer( not_null controller, + StartData data, Fn &&doneCallback); } // namespace UserpicBuilder diff --git a/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder_widget.cpp b/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder_widget.cpp index 8b4e9186fc..c67da4800c 100644 --- a/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder_widget.cpp +++ b/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder_widget.cpp @@ -173,9 +173,7 @@ private: }; -EmojiUserpic::EmojiUserpic( - not_null parent, - const QSize &size) +EmojiUserpic::EmojiUserpic(not_null parent, const QSize &size) : Ui::RpWidget(parent) , _painter(size.width()) { resize(size); @@ -358,6 +356,7 @@ void EmojiSelector::prepare() { not_null CreateUserpicBuilder( not_null parent, not_null controller, + StartData data, BothWayCommunication communication) { const auto container = Ui::CreateChild(parent.get()); @@ -368,6 +367,11 @@ not_null CreateUserpicBuilder( container, Size(st::settingsInfoPhotoSize))), st::userpicBuilderEmojiPreviewPadding)->entity(); + if (const auto id = data.documentId) { + if (const auto document = controller->session().data().document(id)) { + preview->setDocument(document); + } + } container->add( object_ptr>( @@ -383,7 +387,9 @@ not_null CreateUserpicBuilder( st::userpicBuilderEmojiBubblePaletteSize, [=] { return controller->chatStyle(); }); - const auto palette = Ui::CreateChild(paletteBg.get()); + const auto palette = Ui::CreateChild( + paletteBg.get(), + data.colorIndex); palette->stopsValue( ) | rpl::start_with_next([=](QGradientStops stops) { preview->setGradientStops(std::move(stops)); diff --git a/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder_widget.h b/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder_widget.h index 4c73f824a9..9c13b31704 100644 --- a/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder_widget.h +++ b/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder_widget.h @@ -18,6 +18,11 @@ class SessionController; namespace UserpicBuilder { +struct StartData { + DocumentId documentId = DocumentId(0); + int colorIndex = 0; +}; + struct BothWayCommunication { rpl::producer<> triggers; Fn result; @@ -26,6 +31,7 @@ struct BothWayCommunication { not_null CreateUserpicBuilder( not_null parent, not_null controller, + StartData data, BothWayCommunication communication); } // namespace UserpicBuilder