mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-16 14:17:12 +02:00
Added gift sticker to ReceiptCreditsBox for gifts.
This commit is contained in:
parent
3f2cb8f8c9
commit
e760a0983f
2 changed files with 82 additions and 18 deletions
|
@ -12,11 +12,14 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#include "base/timer_rpl.h"
|
||||
#include "base/unixtime.h"
|
||||
#include "boxes/gift_premium_box.h"
|
||||
#include "chat_helpers/stickers_gift_box_pack.h"
|
||||
#include "chat_helpers/stickers_lottie.h"
|
||||
#include "core/click_handler_types.h"
|
||||
#include "core/click_handler_types.h" // UrlClickHandler
|
||||
#include "core/ui_integration.h"
|
||||
#include "data/data_document.h"
|
||||
#include "data/data_document_media.h"
|
||||
#include "data/data_file_origin.h"
|
||||
#include "core/click_handler_types.h" // UrlClickHandler
|
||||
#include "data/data_photo_media.h"
|
||||
#include "data/data_session.h"
|
||||
#include "data/data_user.h"
|
||||
|
@ -27,6 +30,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#include "info/settings/info_settings_widget.h" // SectionCustomTopBarData.
|
||||
#include "info/statistics/info_statistics_list_controllers.h"
|
||||
#include "lang/lang_keys.h"
|
||||
#include "lottie/lottie_single_player.h"
|
||||
#include "main/main_app_config.h"
|
||||
#include "main/main_session.h"
|
||||
#include "payments/payments_checkout_process.h"
|
||||
|
@ -457,24 +461,82 @@ void ReceiptCreditsBox(
|
|||
content,
|
||||
GenericEntryPhoto(content, callback, stUser.photoSize)));
|
||||
AddViewMediaHandler(thumb->entity(), controller, e);
|
||||
} else if (peer) {
|
||||
} else if (peer && !e.gift) {
|
||||
content->add(object_ptr<Ui::CenterWrap<>>(
|
||||
content,
|
||||
object_ptr<Ui::UserpicButton>(content, peer, stUser)));
|
||||
} else {
|
||||
const auto widget = content->add(
|
||||
object_ptr<Ui::CenterWrap<>>(
|
||||
if (e.gift) {
|
||||
using PlayerPtr = std::unique_ptr<Lottie::SinglePlayer>;
|
||||
struct State final {
|
||||
DocumentData *sticker = nullptr;
|
||||
std::shared_ptr<Data::DocumentMedia> media;
|
||||
std::unique_ptr<Lottie::SinglePlayer> lottie;
|
||||
rpl::lifetime downloadLifetime;
|
||||
};
|
||||
Ui::AddSkip(
|
||||
content,
|
||||
object_ptr<Ui::RpWidget>(content)))->entity();
|
||||
using Draw = Fn<void(Painter &, int, int, int, int)>;
|
||||
const auto draw = widget->lifetime().make_state<Draw>(
|
||||
Ui::GenerateCreditsPaintUserpicCallback(e));
|
||||
widget->resize(Size(stUser.photoSize));
|
||||
widget->paintRequest(
|
||||
) | rpl::start_with_next([=] {
|
||||
auto p = Painter(widget);
|
||||
(*draw)(p, 0, 0, stUser.photoSize, stUser.photoSize);
|
||||
}, widget->lifetime());
|
||||
st::creditsHistoryEntryGiftStickerSpace);
|
||||
const auto icon = Ui::CreateChild<Ui::RpWidget>(content);
|
||||
icon->resize(Size(st::creditsHistoryEntryGiftStickerSize));
|
||||
const auto state = icon->lifetime().make_state<State>();
|
||||
auto &packs = session->giftBoxStickersPacks();
|
||||
const auto document = packs.lookup(1);
|
||||
if (document && document->sticker()) {
|
||||
state->sticker = document;
|
||||
state->media = document->createMediaView();
|
||||
state->media->thumbnailWanted(packs.origin());
|
||||
state->media->automaticLoad(packs.origin(), nullptr);
|
||||
session->downloaderTaskFinished(
|
||||
) | rpl::start_with_next([=] {
|
||||
if (state->media->loaded()) {
|
||||
state->lottie = ChatHelpers::LottiePlayerFromDocument(
|
||||
state->media.get(),
|
||||
ChatHelpers::StickerLottieSize::MessageHistory,
|
||||
icon->size(),
|
||||
Lottie::Quality::High);
|
||||
state->lottie->updates() | rpl::start_with_next([=] {
|
||||
icon->update();
|
||||
}, icon->lifetime());
|
||||
state->downloadLifetime.destroy();
|
||||
}
|
||||
}, state->downloadLifetime);
|
||||
}
|
||||
icon->paintRequest(
|
||||
) | rpl::start_with_next([=] {
|
||||
auto p = Painter(icon);
|
||||
const auto &lottie = state->lottie;
|
||||
const auto frame = (lottie && lottie->ready())
|
||||
? lottie->frameInfo({ .box = icon->size() })
|
||||
: Lottie::Animation::FrameInfo();
|
||||
if (!frame.image.isNull()) {
|
||||
p.drawImage(0, 0, frame.image);
|
||||
if (lottie->frameIndex() < lottie->framesCount() - 1) {
|
||||
lottie->markFrameShown();
|
||||
}
|
||||
}
|
||||
}, icon->lifetime());
|
||||
content->sizeValue(
|
||||
) | rpl::start_with_next([=](const QSize &size) {
|
||||
icon->move(
|
||||
(size.width() - icon->width()) / 2,
|
||||
st::creditsHistoryEntryGiftStickerSkip);
|
||||
}, icon->lifetime());
|
||||
} else {
|
||||
const auto widget = content->add(
|
||||
object_ptr<Ui::CenterWrap<>>(
|
||||
content,
|
||||
object_ptr<Ui::RpWidget>(content)))->entity();
|
||||
using Draw = Fn<void(Painter &, int, int, int, int)>;
|
||||
const auto draw = widget->lifetime().make_state<Draw>(
|
||||
Ui::GenerateCreditsPaintUserpicCallback(e));
|
||||
widget->resize(Size(stUser.photoSize));
|
||||
widget->paintRequest(
|
||||
) | rpl::start_with_next([=] {
|
||||
auto p = Painter(widget);
|
||||
(*draw)(p, 0, 0, stUser.photoSize, stUser.photoSize);
|
||||
}, widget->lifetime());
|
||||
}
|
||||
}
|
||||
|
||||
Ui::AddSkip(content);
|
||||
|
@ -635,10 +697,7 @@ void ReceiptCreditsBox(
|
|||
Ui::AddSkip(content);
|
||||
Ui::AddSkip(content);
|
||||
|
||||
AddCreditsHistoryEntryTable(
|
||||
controller,
|
||||
box->verticalLayout(),
|
||||
e);
|
||||
AddCreditsHistoryEntryTable(controller, content, e);
|
||||
|
||||
Ui::AddSkip(content);
|
||||
|
||||
|
|
|
@ -49,3 +49,8 @@ starIconSmall: icon{{ "payments/small_star", windowFg }};
|
|||
starIconSmallPadding: margins(0px, -2px, 0px, 0px);
|
||||
|
||||
creditsHistoryEntryTypeAds: icon {{ "folders/folders_channels", premiumButtonFg }};
|
||||
|
||||
creditsHistoryEntryGiftStickerSkip: -20px;
|
||||
creditsHistoryEntryGiftStickerSize: 150px;
|
||||
creditsHistoryEntryGiftStickerSpace: 105px;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue