mirror of
https://github.com/kotatogram/kotatogram-desktop
synced 2025-08-31 06:35:14 +00:00
Use emoji/stickers/gifs slider in EmojiPan.
Also rename EmojiTabs to EmojiSections.
This commit is contained in:
@@ -386,38 +386,40 @@ void StickersBox::switchTab() {
|
||||
newTab = &_archived;
|
||||
requestArchivedSets();
|
||||
}
|
||||
if (_tab != newTab) {
|
||||
if (_tab == &_installed) {
|
||||
_localOrder = _tab->widget()->getFullOrder();
|
||||
_localRemoved = _tab->widget()->getRemovedSets();
|
||||
}
|
||||
auto wasCache = grabContentCache();
|
||||
auto wasIndex = _tab->index();
|
||||
_tab->saveScrollTop();
|
||||
auto widget = takeInnerWidget<Inner>();
|
||||
widget->setParent(this);
|
||||
widget->hide();
|
||||
_tab->returnWidget(std::move(widget));
|
||||
_tab = newTab;
|
||||
_section = newSection;
|
||||
setInnerWidget(_tab->takeWidget(), getTopSkip());
|
||||
_tabs->raise();
|
||||
_unreadBadge->raise();
|
||||
_tab->widget()->show();
|
||||
rebuildList();
|
||||
onScrollToY(_tab->getScrollTop());
|
||||
auto nowCache = grabContentCache();
|
||||
auto nowIndex = _tab->index();
|
||||
|
||||
_slideAnimation = std::make_unique<Ui::SlideAnimation>();
|
||||
_slideAnimation->setSnapshots(std::move(wasCache), std::move(nowCache));
|
||||
auto slideLeft = wasIndex > nowIndex;
|
||||
_slideAnimation->start(slideLeft, [this] { update(); }, st::slideDuration);
|
||||
setInnerVisible(false);
|
||||
|
||||
setFocus();
|
||||
update();
|
||||
if (_tab == newTab) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (_tab == &_installed) {
|
||||
_localOrder = _tab->widget()->getFullOrder();
|
||||
_localRemoved = _tab->widget()->getRemovedSets();
|
||||
}
|
||||
auto wasCache = grabContentCache();
|
||||
auto wasIndex = _tab->index();
|
||||
_tab->saveScrollTop();
|
||||
auto widget = takeInnerWidget<Inner>();
|
||||
widget->setParent(this);
|
||||
widget->hide();
|
||||
_tab->returnWidget(std::move(widget));
|
||||
_tab = newTab;
|
||||
_section = newSection;
|
||||
setInnerWidget(_tab->takeWidget(), getTopSkip());
|
||||
_tabs->raise();
|
||||
_unreadBadge->raise();
|
||||
_tab->widget()->show();
|
||||
rebuildList();
|
||||
onScrollToY(_tab->getScrollTop());
|
||||
auto nowCache = grabContentCache();
|
||||
auto nowIndex = _tab->index();
|
||||
|
||||
_slideAnimation = std::make_unique<Ui::SlideAnimation>();
|
||||
_slideAnimation->setSnapshots(std::move(wasCache), std::move(nowCache));
|
||||
auto slideLeft = wasIndex > nowIndex;
|
||||
_slideAnimation->start(slideLeft, [this] { update(); }, st::slideDuration);
|
||||
setInnerVisible(false);
|
||||
|
||||
setFocus();
|
||||
update();
|
||||
}
|
||||
|
||||
QPixmap StickersBox::grabContentCache() {
|
||||
|
@@ -35,6 +35,12 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||
#include "auth_session.h"
|
||||
#include "messenger.h"
|
||||
|
||||
namespace {
|
||||
|
||||
constexpr auto kStickerPanPerRow = Stickers::kPanPerRow;
|
||||
|
||||
} // namespace
|
||||
|
||||
StickerSetBox::StickerSetBox(QWidget*, const MTPInputStickerSet &set)
|
||||
: _set(set) {
|
||||
}
|
||||
@@ -181,8 +187,8 @@ void StickerSetBox::Inner::gotSet(const MTPmessages_StickerSet &set) {
|
||||
if (_pack.isEmpty()) {
|
||||
Ui::show(Box<InformBox>(lang(lng_stickers_not_found)));
|
||||
} else {
|
||||
int32 rows = _pack.size() / StickerPanPerRow + ((_pack.size() % StickerPanPerRow) ? 1 : 0);
|
||||
resize(st::stickersPadding.left() + StickerPanPerRow * st::stickersSize.width(), st::stickersPadding.top() + rows * st::stickersSize.height() + st::stickersPadding.bottom());
|
||||
int32 rows = _pack.size() / kStickerPanPerRow + ((_pack.size() % kStickerPanPerRow) ? 1 : 0);
|
||||
resize(st::stickersPadding.left() + kStickerPanPerRow * st::stickersSize.width(), st::stickersPadding.top() + rows * st::stickersSize.height() + st::stickersPadding.bottom());
|
||||
}
|
||||
_loaded = true;
|
||||
|
||||
@@ -319,8 +325,8 @@ void StickerSetBox::Inner::setSelected(int selected) {
|
||||
void StickerSetBox::Inner::startOverAnimation(int index, float64 from, float64 to) {
|
||||
if (index >= 0 && index < _packOvers.size()) {
|
||||
_packOvers[index].start([this, index] {
|
||||
int row = index / StickerPanPerRow;
|
||||
int column = index % StickerPanPerRow;
|
||||
int row = index / kStickerPanPerRow;
|
||||
int column = index % kStickerPanPerRow;
|
||||
int left = st::stickersPadding.left() + column * st::stickersSize.width();
|
||||
int top = st::stickersPadding.top() + row * st::stickersSize.height();
|
||||
rtlupdate(left, top, st::stickersSize.width(), st::stickersSize.height());
|
||||
@@ -341,8 +347,8 @@ int32 StickerSetBox::Inner::stickerFromGlobalPos(const QPoint &p) const {
|
||||
if (rtl()) l.setX(width() - l.x());
|
||||
int32 row = (l.y() >= st::stickersPadding.top()) ? qFloor((l.y() - st::stickersPadding.top()) / st::stickersSize.height()) : -1;
|
||||
int32 col = (l.x() >= st::stickersPadding.left()) ? qFloor((l.x() - st::stickersPadding.left()) / st::stickersSize.width()) : -1;
|
||||
if (row >= 0 && col >= 0 && col < StickerPanPerRow) {
|
||||
int32 result = row * StickerPanPerRow + col;
|
||||
if (row >= 0 && col >= 0 && col < kStickerPanPerRow) {
|
||||
int32 result = row * kStickerPanPerRow + col;
|
||||
return (result < _pack.size()) ? result : -1;
|
||||
}
|
||||
return -1;
|
||||
@@ -355,12 +361,12 @@ void StickerSetBox::Inner::paintEvent(QPaintEvent *e) {
|
||||
if (_pack.isEmpty()) return;
|
||||
|
||||
auto ms = getms();
|
||||
int32 rows = _pack.size() / StickerPanPerRow + ((_pack.size() % StickerPanPerRow) ? 1 : 0);
|
||||
int32 rows = _pack.size() / kStickerPanPerRow + ((_pack.size() % kStickerPanPerRow) ? 1 : 0);
|
||||
int32 from = qFloor(e->rect().top() / st::stickersSize.height()), to = qFloor(e->rect().bottom() / st::stickersSize.height()) + 1;
|
||||
|
||||
for (int32 i = from; i < to; ++i) {
|
||||
for (int32 j = 0; j < StickerPanPerRow; ++j) {
|
||||
int32 index = i * StickerPanPerRow + j;
|
||||
for (int32 j = 0; j < kStickerPanPerRow; ++j) {
|
||||
int32 index = i * kStickerPanPerRow + j;
|
||||
if (index >= _pack.size()) break;
|
||||
t_assert(index < _packOvers.size());
|
||||
|
||||
|
Reference in New Issue
Block a user