From bb8defeb42e85ea0e5d9ecba4c95fa9de3bfd9a9 Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 2 Jan 2019 16:11:13 +0400 Subject: [PATCH] Improve change emoji set box design. --- Telegram/Resources/emoji/set0_preview.webp | Bin 0 -> 13022 bytes Telegram/Resources/emoji/set1_preview.webp | Bin 0 -> 13900 bytes Telegram/Resources/emoji/set2_preview.webp | Bin 0 -> 10324 bytes Telegram/Resources/emoji/set3_preview.webp | Bin 0 -> 12860 bytes Telegram/Resources/icons/settings_emoji.png | Bin 0 -> 1146 bytes .../Resources/icons/settings_emoji@2x.png | Bin 0 -> 2573 bytes .../Resources/icons/settings_emoji@3x.png | Bin 0 -> 4707 bytes Telegram/Resources/langs/lang.strings | 7 +- .../Resources/qrc/telegram_emoji_preview.qrc | 8 + Telegram/SourceFiles/boxes/connection_box.cpp | 3 +- .../chat_helpers/chat_helpers.style | 14 +- .../chat_helpers/emoji_sets_manager.cpp | 232 +++++++++++++----- Telegram/SourceFiles/settings/settings.style | 1 + .../SourceFiles/settings/settings_chat.cpp | 2 +- Telegram/SourceFiles/ui/animation.h | 3 +- .../ui/effects/radial_animation.cpp | 35 ++- .../SourceFiles/ui/effects/radial_animation.h | 21 +- Telegram/SourceFiles/ui/emoji_config.cpp | 8 +- Telegram/SourceFiles/ui/emoji_config.h | 1 + Telegram/SourceFiles/ui/special_buttons.cpp | 2 +- Telegram/gyp/telegram_qrc.gypi | 1 + 21 files changed, 233 insertions(+), 105 deletions(-) create mode 100644 Telegram/Resources/emoji/set0_preview.webp create mode 100644 Telegram/Resources/emoji/set1_preview.webp create mode 100644 Telegram/Resources/emoji/set2_preview.webp create mode 100644 Telegram/Resources/emoji/set3_preview.webp create mode 100644 Telegram/Resources/icons/settings_emoji.png create mode 100644 Telegram/Resources/icons/settings_emoji@2x.png create mode 100644 Telegram/Resources/icons/settings_emoji@3x.png create mode 100644 Telegram/Resources/qrc/telegram_emoji_preview.qrc diff --git a/Telegram/Resources/emoji/set0_preview.webp b/Telegram/Resources/emoji/set0_preview.webp new file mode 100644 index 0000000000000000000000000000000000000000..122654fa61de2f3e51a139cf73ad26ab9003ab62 GIT binary patch literal 13022 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 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/emoji/set1_preview.webp b/Telegram/Resources/emoji/set1_preview.webp new file mode 100644 index 0000000000000000000000000000000000000000..2a8a03bbcb43bac9a2c25a264eeffd8bec1d2b83 GIT binary patch literal 13900 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 awocpcntvti6yHr9j4?ql1MTbB0000qLsx_V literal 0 HcmV?d00001 diff --git a/Telegram/Resources/emoji/set2_preview.webp b/Telegram/Resources/emoji/set2_preview.webp new file mode 100644 index 0000000000000000000000000000000000000000..2b682dd02ee91951ab4df795650fc52aee9d7a3f GIT binary patch literal 10324 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
  • 7pXyoAn2BNIj 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 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/emoji/set3_preview.webp b/Telegram/Resources/emoji/set3_preview.webp new file mode 100644 index 0000000000000000000000000000000000000000..0e89f3a38d9983a86639c0e6052516abb6cdecb4 GIT binary patch literal 12860 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 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings_emoji@3x.png b/Telegram/Resources/icons/settings_emoji@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..656a17b9958aaf49b81e74e884c5e18b31f80e1a GIT binary patch literal 4707 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 B5T*bC literal 0 HcmV?d00001 diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index 0624ead80..b72099fb6 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -1035,10 +1035,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_emoji_category7" = "Symbols & Flags"; "lng_emoji_hide_panel" = "Click here to hide the emoji sidebar"; "lng_emoji_manage_sets" = "Choose emoji set"; -"lng_emoji_set_available" = "Download {size}"; -"lng_emoji_set_ready" = "Ready"; -"lng_emoji_set_active" = "Active"; -"lng_emoji_set_loading" = "Downloading {progress}"; +"lng_emoji_set_ready" = "Downloaded"; +"lng_emoji_set_active" = "Current set"; +"lng_emoji_set_loading" = "{percent}, {progress}"; "lng_recent_stickers" = "Frequently used"; "lng_faved_stickers_add" = "Add to Favorites"; diff --git a/Telegram/Resources/qrc/telegram_emoji_preview.qrc b/Telegram/Resources/qrc/telegram_emoji_preview.qrc new file mode 100644 index 000000000..238abec17 --- /dev/null +++ b/Telegram/Resources/qrc/telegram_emoji_preview.qrc @@ -0,0 +1,8 @@ + + + ../emoji/set0_preview.webp + ../emoji/set1_preview.webp + ../emoji/set2_preview.webp + ../emoji/set3_preview.webp + + diff --git a/Telegram/SourceFiles/boxes/connection_box.cpp b/Telegram/SourceFiles/boxes/connection_box.cpp index fb545d050..548c81941 100644 --- a/Telegram/SourceFiles/boxes/connection_box.cpp +++ b/Telegram/SourceFiles/boxes/connection_box.cpp @@ -347,7 +347,7 @@ void ProxyRow::paintCheck(Painter &p, TimeMs ms) { } const auto loading = _progress ? _progress->computeState() - : Ui::InfiniteRadialAnimation::State{ 0., 0, FullArcLength }; + : Ui::RadialState{ 0., 0, FullArcLength }; const auto toggled = _toggled.current(ms, _view.selected ? 1. : 0.) * (1. - loading.shown); const auto _st = &st::defaultRadio; @@ -361,6 +361,7 @@ void ProxyRow::paintCheck(Painter &p, TimeMs ms) { auto pen = anim::pen(_st->untoggledFg, _st->toggledFg, toggled * set); pen.setWidth(_st->thickness); + pen.setCapStyle(Qt::RoundCap); p.setPen(pen); p.setBrush(_st->bg); const auto rect = rtlrect(QRectF(left, top, _st->diameter, _st->diameter).marginsRemoved(QMarginsF(_st->thickness / 2., _st->thickness / 2., _st->thickness / 2., _st->thickness / 2.)), outerWidth); diff --git a/Telegram/SourceFiles/chat_helpers/chat_helpers.style b/Telegram/SourceFiles/chat_helpers/chat_helpers.style index c1e80a8c9..cce561661 100644 --- a/Telegram/SourceFiles/chat_helpers/chat_helpers.style +++ b/Telegram/SourceFiles/chat_helpers/chat_helpers.style @@ -266,10 +266,10 @@ autocompleteRowTitle: semiboldTextStyle; autocompleteRowKeys: defaultTextStyle; autocompleteRowAnswer: defaultTextStyle; -manageEmojiCheck: IconButton(defaultIconButton) { - width: 18px; - height: 13px; - icon: stickersFeaturedInstalled; -} -manageEmojiRadialSize: size(20px, 20px); -manageEmojiRadialThickness: 2px; +manageEmojiPreview: 22px; +manageEmojiPreviewWidth: 48px; +manageEmojiPreviewHeight: 48px; +manageEmojiPreviewPadding: margins(23px, 9px, 19px, 9px); +manageEmojiMarginRight: 21px; +manageEmojiNameTop: 3px; +manageEmojiStatusTop: 25px; diff --git a/Telegram/SourceFiles/chat_helpers/emoji_sets_manager.cpp b/Telegram/SourceFiles/chat_helpers/emoji_sets_manager.cpp index 54ac9199b..2e459769b 100644 --- a/Telegram/SourceFiles/chat_helpers/emoji_sets_manager.cpp +++ b/Telegram/SourceFiles/chat_helpers/emoji_sets_manager.cpp @@ -113,24 +113,26 @@ protected: private: [[nodiscard]] bool showOver() const; [[nodiscard]] bool showOver(State state) const; + void updateStatusColorOverride(); void setupContent(const Set &set); - void setupCheck(); void setupLabels(const Set &set); + void setupPreview(const Set &set); void setupAnimation(); + void paintPreview(Painter &p) const; + void paintRadio(Painter &p, TimeMs ms); void updateAnimation(TimeMs ms); void setupHandler(); void load(); void step_radial(TimeMs ms, bool timer); - [[nodiscard]] QRect rightPartRect(QSize size) const; - [[nodiscard]] QRect radialRect() const; - [[nodiscard]] QRect checkRect() const; - int _id = 0; bool _switching = false; rpl::variable _state; Ui::FlatLabel *_status = nullptr; + std::array _preview; + Animation _toggled; + Animation _active; std::unique_ptr _loading; }; @@ -166,13 +168,18 @@ SetState ComputeState(int id) { QString StateDescription(const SetState &state) { return state.match([](const Available &data) { - return lng_emoji_set_available(lt_size, formatSizeText(data.size)); + return formatSizeText(data.size); }, [](const Ready &data) -> QString { return lang(lng_emoji_set_ready); }, [](const Active &data) -> QString { return lang(lng_emoji_set_active); }, [](const Loading &data) { + const auto percent = (data.size > 0) + ? snap((data.already * 100) / float64(data.size), 0., 100.) + : 0.; return lng_emoji_set_loading( + lt_percent, + QString::number(int(std::round(percent))) + '%', lt_progress, formatDownloadText(data.already, data.size)); }, [](const Failed &data) { @@ -351,38 +358,94 @@ void Row::paintEvent(QPaintEvent *e) { const auto ms = getms(); paintRipple(p, 0, 0, ms); - updateAnimation(ms); - if (_loading) { - _loading->draw( - p, - radialRect(), - st::manageEmojiRadialThickness, - over ? st::windowSubTextFgOver : st::windowSubTextFg); + paintPreview(p); + paintRadio(p, ms); +} + +void Row::paintPreview(Painter &p) const { + const auto x = st::manageEmojiPreviewPadding.left(); + const auto y = st::manageEmojiPreviewPadding.top(); + const auto width = st::manageEmojiPreviewWidth; + const auto height = st::manageEmojiPreviewWidth; + auto &&preview = ranges::view::zip(_preview, ranges::view::ints(0)); + for (const auto &[pixmap, index] : preview) { + const auto row = (index / 2); + const auto column = (index % 2); + const auto left = x + (column ? width - st::manageEmojiPreview : 0); + const auto top = y + (row ? height - st::manageEmojiPreview : 0); + p.drawPixmap(left, top, pixmap); } } -QRect Row::rightPartRect(QSize size) const { - const auto x = width() - - (st::contactsPadding.right() - + st::contactsCheckPosition.x() - + st::manageEmojiCheck.width) - + (st::manageEmojiCheck.width / 2); - const auto y = st::contactsPadding.top() - + (st::contactsPhotoSize - st::manageEmojiCheck.height) / 2 - + (st::manageEmojiCheck.height / 2); - return QRect( - QPoint(x, y) - QPoint(size.width() / 2, size.height() / 2), - size); -} +void Row::paintRadio(Painter &p, TimeMs ms) { + updateAnimation(ms); -QRect Row::radialRect() const { - return rightPartRect(st::manageEmojiRadialSize); -} + const auto loading = _loading + ? _loading->computeState() + : Ui::RadialState{ 0., 0, FullArcLength }; + const auto isToggledSet = _state.current().is(); + const auto isActiveSet = isToggledSet || _state.current().is(); + const auto toggled = _toggled.current(ms, isToggledSet ? 1. : 0.); + const auto active = _active.current(ms, isActiveSet ? 1. : 0.); + const auto _st = &st::defaultRadio; -QRect Row::checkRect() const { - return rightPartRect(QSize( - st::manageEmojiCheck.width, - st::manageEmojiCheck.height)); + PainterHighQualityEnabler hq(p); + + const auto left = width() + - st::manageEmojiMarginRight + - _st->diameter + - _st->thickness; + const auto top = (height() - _st->diameter - _st->thickness) / 2; + const auto outerWidth = width(); + + auto pen = anim::pen(_st->untoggledFg, _st->toggledFg, active); + pen.setWidth(_st->thickness); + pen.setCapStyle(Qt::RoundCap); + p.setPen(pen); + p.setBrush(_st->bg); + const auto rect = rtlrect(QRectF( + left, + top, + _st->diameter, + _st->diameter + ).marginsRemoved(QMarginsF( + _st->thickness / 2., + _st->thickness / 2., + _st->thickness / 2., + _st->thickness / 2. + )), outerWidth); + if (loading.shown > 0 && anim::Disabled()) { + anim::DrawStaticLoading( + p, + rect, + _st->thickness, + pen.color(), + _st->bg); + } else if (loading.arcLength < FullArcLength) { + p.drawArc(rect, loading.arcFrom, loading.arcLength); + } else { + p.drawEllipse(rect); + } + + if (toggled > 0 && (!_loading || !anim::Disabled())) { + p.setPen(Qt::NoPen); + p.setBrush(anim::brush(_st->untoggledFg, _st->toggledFg, toggled)); + + const auto skip0 = _st->diameter / 2.; + const auto skip1 = _st->skip / 10.; + const auto checkSkip = skip0 * (1. - toggled) + skip1 * toggled; + p.drawEllipse(rtlrect(QRectF( + left, + top, + _st->diameter, + _st->diameter + ).marginsRemoved(QMarginsF( + checkSkip, + checkSkip, + checkSkip, + checkSkip + )), outerWidth)); + } } bool Row::showOver(State state) const { @@ -396,11 +459,22 @@ bool Row::showOver() const { void Row::onStateChanged(State was, StateChangeSource source) { RippleButton::onStateChanged(was, source); + if (showOver() != showOver(was)) { + updateStatusColorOverride(); + } +} + +void Row::updateStatusColorOverride() { + const auto isToggledSet = _state.current().is(); + const auto toggled = _toggled.current(isToggledSet ? 1. : 0.); const auto over = showOver(); - if (over != showOver(was)) { - _status->setTextColorOverride(over - ? std::make_optional(st::windowSubTextFgOver->c) - : std::nullopt); + if (toggled == 0. && !over) { + _status->setTextColorOverride(std::nullopt); + } else { + _status->setTextColorOverride(anim::color( + over ? st::contactsStatusFgOver : st::contactsStatusFg, + st::contactsStatusFgOnline, + toggled)); } } @@ -422,11 +496,14 @@ void Row::setupContent(const Set &set) { return !_state.current().is() || !state.is(); }); - setupCheck(); setupLabels(set); + setupPreview(set); setupAnimation(); - resize(width(), st::defaultPeerList.item.height); + const auto height = st::manageEmojiPreviewPadding.top() + + st::manageEmojiPreviewHeight + + st::manageEmojiPreviewPadding.bottom(); + resize(width(), height); } void Row::setupHandler() { @@ -463,28 +540,6 @@ void Row::load() { SetGlobalLoader(base::make_unique_q(App::main(), _id)); } -void Row::setupCheck() { - using namespace rpl::mappers; - - const auto check = Ui::CreateChild>( - this, - object_ptr( - this, - st::manageEmojiCheck)); - sizeValue( - ) | rpl::start_with_next([=](QSize size) { - const auto rect = checkRect(); - check->moveToLeft(rect.x(), rect.y()); - }, check->lifetime()); - - check->toggleOn(_state.value( - ) | rpl::map( - _1 == Active() - )); - - check->setAttribute(Qt::WA_TransparentForMouseEvents); -} - void Row::setupLabels(const Set &set) { using namespace rpl::mappers; @@ -502,16 +557,31 @@ void Row::setupLabels(const Set &set) { sizeValue( ) | rpl::start_with_next([=](QSize size) { - const auto left = st::contactsPadding.left(); - const auto namey = st::contactsPadding.top() - + st::contactsNameTop; - const auto statusy = st::contactsPadding.top() - + st::contactsStatusTop; + const auto left = st::manageEmojiPreviewPadding.left() + + st::manageEmojiPreviewWidth + + st::manageEmojiPreviewPadding.right(); + const auto namey = st::manageEmojiPreviewPadding.top() + + st::manageEmojiNameTop; + const auto statusy = st::manageEmojiPreviewPadding.top() + + st::manageEmojiStatusTop; name->moveToLeft(left, namey); _status->moveToLeft(left, statusy); }, name->lifetime()); } +void Row::setupPreview(const Set &set) { + const auto size = st::manageEmojiPreview * cIntRetinaFactor(); + const auto original = QImage(set.previewPath); + const auto full = original.height(); + auto &&preview = ranges::view::zip(_preview, ranges::view::ints(0)); + for (auto &&[pixmap, index] : preview) { + pixmap = App::pixmapFromImageInPlace(original.copy( + { full * index, 0, full, full } + ).scaledToWidth(size, Qt::SmoothTransformation)); + pixmap.setDevicePixelRatio(cRetinaFactor()); + } +} + void Row::step_radial(TimeMs ms, bool timer) { if (timer && !anim::Disabled()) { update(); @@ -519,10 +589,40 @@ void Row::step_radial(TimeMs ms, bool timer) { } void Row::setupAnimation() { + using namespace rpl::mappers; + _state.value( ) | rpl::start_with_next([=](const SetState &state) { update(); }, lifetime()); + + _state.value( + ) | rpl::map( + _1 == Active() + ) | rpl::distinct_until_changed( + ) | rpl::start_with_next([=](bool toggled) { + _toggled.start( + [=] { updateStatusColorOverride(); update(); }, + toggled ? 0. : 1., + toggled ? 1. : 0., + st::defaultRadio.duration); + }, lifetime()); + + _state.value( + ) | rpl::map([](const SetState &state) { + return state.is() || state.is(); + }) | rpl::distinct_until_changed( + ) | rpl::start_with_next([=](bool active) { + _active.start( + [=] { update(); }, + active ? 0. : 1., + active ? 1. : 0., + st::defaultRadio.duration); + }, lifetime()); + + _toggled.finish(); + _active.finish(); + updateStatusColorOverride(); } void Row::updateAnimation(TimeMs ms) { diff --git a/Telegram/SourceFiles/settings/settings.style b/Telegram/SourceFiles/settings/settings.style index 4cf66f22e..fe2668768 100644 --- a/Telegram/SourceFiles/settings/settings.style +++ b/Telegram/SourceFiles/settings/settings.style @@ -58,6 +58,7 @@ settingsIconLanguage: icon {{ "settings_language", menuIconFg }}; settingsIconInterfaceScale: icon {{ "settings_interface_scale", menuIconFg }}; settingsIconFaq: icon {{ "settings_faq", menuIconFg }}; settingsIconStickers: icon {{ "settings_stickers", menuIconFg }}; +settingsIconEmoji: icon {{ "settings_emoji", menuIconFg }}; settingsIconThemes: icon {{ "settings_themes", menuIconFg }}; settingsIconCalls: icon {{ "settings_phone_number", menuIconFg }}; diff --git a/Telegram/SourceFiles/settings/settings_chat.cpp b/Telegram/SourceFiles/settings/settings_chat.cpp index 8c28d56ff..d9b88de2e 100644 --- a/Telegram/SourceFiles/settings/settings_chat.cpp +++ b/Telegram/SourceFiles/settings/settings_chat.cpp @@ -490,7 +490,7 @@ void SetupStickersEmoji(not_null container) { container, lng_emoji_manage_sets, st::settingsChatButton, - &st::settingsIconStickers, + &st::settingsIconEmoji, st::settingsChatIconLeft )->addClickHandler([] { Ui::show(Box()); diff --git a/Telegram/SourceFiles/ui/animation.h b/Telegram/SourceFiles/ui/animation.h index 470e67506..7eb6a2577 100644 --- a/Telegram/SourceFiles/ui/animation.h +++ b/Telegram/SourceFiles/ui/animation.h @@ -676,6 +676,7 @@ private: , updateCallback(std::move(updateCallback)) { } void step(float64 ms, bool timer) { + const auto callback = updateCallback; const auto dt = (ms >= duration || anim::Disabled()) ? 1. : (ms / duration); @@ -686,7 +687,7 @@ private: } else { value.update(dt, transition); } - updateCallback(); + callback(); } anim::value value; diff --git a/Telegram/SourceFiles/ui/effects/radial_animation.cpp b/Telegram/SourceFiles/ui/effects/radial_animation.cpp index bcfb86235..4133e7053 100644 --- a/Telegram/SourceFiles/ui/effects/radial_animation.cpp +++ b/Telegram/SourceFiles/ui/effects/radial_animation.cpp @@ -72,9 +72,15 @@ void RadialAnimation::step(TimeMs ms) { _animation.step(ms); } -void RadialAnimation::draw(Painter &p, const QRect &inner, int32 thickness, style::color color) { +void RadialAnimation::draw( + Painter &p, + const QRect &inner, + int32 thickness, + style::color color) { + const auto state = computeState(); + auto o = p.opacity(); - p.setOpacity(o * _opacity); + p.setOpacity(o * state.shown); auto pen = color->p; auto was = p.pen(); @@ -82,24 +88,27 @@ void RadialAnimation::draw(Painter &p, const QRect &inner, int32 thickness, styl pen.setCapStyle(Qt::RoundCap); p.setPen(pen); - auto len = MinArcLength + qRound(a_arcEnd.current()); - auto from = QuarterArcLength - - len - - (anim::Disabled() ? 0 : qRound(a_arcStart.current())); - if (rtl()) { - from = QuarterArcLength - (from - QuarterArcLength) - len; - if (from < 0) from += FullArcLength; - } - { PainterHighQualityEnabler hq(p); - p.drawArc(inner, from, len); + p.drawArc(inner, state.arcFrom, state.arcLength); } p.setPen(was); p.setOpacity(o); } +RadialState RadialAnimation::computeState() { + auto length = MinArcLength + qRound(a_arcEnd.current()); + auto from = QuarterArcLength + - length + - (anim::Disabled() ? 0 : qRound(a_arcStart.current())); + if (rtl()) { + from = QuarterArcLength - (from - QuarterArcLength) - length; + if (from < 0) from += FullArcLength; + } + return { _opacity, from, length }; +} + InfiniteRadialAnimation::InfiniteRadialAnimation( AnimationCallbacks &&callbacks, const style::InfiniteRadialAnimation &st) @@ -186,7 +195,7 @@ void InfiniteRadialAnimation::draw( p.setOpacity(o); } -auto InfiniteRadialAnimation::computeState() -> State { +RadialState InfiniteRadialAnimation::computeState() { const auto now = getms(); const auto linear = int(((now * FullArcLength) / _st.linearPeriod) % FullArcLength); diff --git a/Telegram/SourceFiles/ui/effects/radial_animation.h b/Telegram/SourceFiles/ui/effects/radial_animation.h index d4742455a..a68c77a7c 100644 --- a/Telegram/SourceFiles/ui/effects/radial_animation.h +++ b/Telegram/SourceFiles/ui/effects/radial_animation.h @@ -13,6 +13,12 @@ struct InfiniteRadialAnimation; namespace Ui { +struct RadialState { + float64 shown = 0.; + int arcFrom = 0; + int arcLength = FullArcLength; +}; + class RadialAnimation { public: RadialAnimation(AnimationCallbacks &&callbacks); @@ -33,7 +39,13 @@ public: step(getms()); } - void draw(Painter &p, const QRect &inner, int32 thickness, style::color color); + void draw( + Painter &p, + const QRect &inner, + int32 thickness, + style::color color); + + RadialState computeState(); private: TimeMs _firstStart = 0; @@ -49,11 +61,6 @@ private: class InfiniteRadialAnimation { public: - struct State { - float64 shown = 0.; - int arcFrom = 0; - int arcLength = FullArcLength; - }; InfiniteRadialAnimation( AnimationCallbacks &&callbacks, const style::InfiniteRadialAnimation &st); @@ -80,7 +87,7 @@ public: QSize size, int outerWidth); - State computeState(); + RadialState computeState(); private: const style::InfiniteRadialAnimation &_st; diff --git a/Telegram/SourceFiles/ui/emoji_config.cpp b/Telegram/SourceFiles/ui/emoji_config.cpp index 7d4d266d7..f02ca9461 100644 --- a/Telegram/SourceFiles/ui/emoji_config.cpp +++ b/Telegram/SourceFiles/ui/emoji_config.cpp @@ -30,10 +30,10 @@ constexpr auto kCacheVersion = uint32(3); constexpr auto kMaxId = uint32(1 << 8); const auto kSets = { - Set{ 0, 0, 0, "Mac" }, - Set{ 1, 205, 7'232'542, "Android" }, - Set{ 2, 206, 5'038'738, "Twemoji" }, - Set{ 3, 238, 6'992'260, "EmojiOne" }, + Set{ 0, 0, 0, "Mac", ":/gui/emoji/set0_preview.webp" }, + Set{ 1, 246, 7'336'383, "Android", ":/gui/emoji/set1_preview.webp" }, + Set{ 2, 206, 5'038'738, "Twemoji", ":/gui/emoji/set2_preview.webp" }, + Set{ 3, 238, 6'992'260, "EmojiOne", ":/gui/emoji/set3_preview.webp" }, }; // Right now we can't allow users of Ui::Emoji to create custom sizes. diff --git a/Telegram/SourceFiles/ui/emoji_config.h b/Telegram/SourceFiles/ui/emoji_config.h index a6f3fbbe3..bcf2dbb80 100644 --- a/Telegram/SourceFiles/ui/emoji_config.h +++ b/Telegram/SourceFiles/ui/emoji_config.h @@ -30,6 +30,7 @@ struct Set { int postId = 0; int size = 0; QString name; + QString previewPath; }; // Thread safe, callback is called on main thread. diff --git a/Telegram/SourceFiles/ui/special_buttons.cpp b/Telegram/SourceFiles/ui/special_buttons.cpp index a25116ad3..05dd6ac17 100644 --- a/Telegram/SourceFiles/ui/special_buttons.cpp +++ b/Telegram/SourceFiles/ui/special_buttons.cpp @@ -196,7 +196,7 @@ void EmojiButton::paintEvent(QPaintEvent *e) { const auto over = isOver(); const auto loadingState = _loading ? _loading->computeState() - : Ui::InfiniteRadialAnimation::State{ 0., 0, FullArcLength }; + : Ui::RadialState{ 0., 0, FullArcLength }; if (loadingState.shown < 1.) { p.setOpacity(1. - loadingState.shown); diff --git a/Telegram/gyp/telegram_qrc.gypi b/Telegram/gyp/telegram_qrc.gypi index a8c936d61..d9147d6d2 100644 --- a/Telegram/gyp/telegram_qrc.gypi +++ b/Telegram/gyp/telegram_qrc.gypi @@ -13,6 +13,7 @@ '<(res_loc)/qrc/telegram_emoji_3.qrc', '<(res_loc)/qrc/telegram_emoji_4.qrc', '<(res_loc)/qrc/telegram_emoji_5.qrc', + '<(res_loc)/qrc/telegram_emoji_preview.qrc', '<(res_loc)/qrc/telegram_sounds.qrc', ], },