From 3a35b6c5fdfe683bd5b91c567ed4d9d582a16d79 Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 8 Jun 2015 15:24:21 +0300 Subject: [PATCH] version 0.8.24 with new sticker packs buttons done --- Telegram/PrepareWin.bat | 10 ++-- Telegram/SourceFiles/config.h | 6 +- Telegram/SourceFiles/dropdown.cpp | 63 ++++++++++++-------- Telegram/SourceFiles/dropdown.h | 1 + Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 ++-- Telegram/Version.sh | 2 +- 8 files changed, 54 insertions(+), 42 deletions(-) diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index a291fa2f24..d7b546d086 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,10 +1,10 @@ @echo OFF -set "AppVersion=8023" -set "AppVersionStrSmall=0.8.23" -set "AppVersionStr=0.8.23" -set "AppVersionStrFull=0.8.23.0" -set "DevChannel=1" +set "AppVersion=8024" +set "AppVersionStrSmall=0.8.24" +set "AppVersionStr=0.8.24" +set "AppVersionStrFull=0.8.24.0" +set "DevChannel=0" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 1da5bd352e..14a560e0f5 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,9 +17,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8023; -static const wchar_t *AppVersionStr = L"0.8.23"; -static const bool DevChannel = true; +static const int32 AppVersion = 8024; +static const wchar_t *AppVersionStr = L"0.8.24"; +static const bool DevChannel = false; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Desktop"; diff --git a/Telegram/SourceFiles/dropdown.cpp b/Telegram/SourceFiles/dropdown.cpp index 64280d0a0a..07a4d6d0bb 100644 --- a/Telegram/SourceFiles/dropdown.cpp +++ b/Telegram/SourceFiles/dropdown.cpp @@ -1158,7 +1158,7 @@ int StickerPanInner::countHeight() { for (int i = 0; i < _sets.size(); ++i) { int cnt = _sets.at(i).size(), rows = (cnt / StickerPanPerRow) + ((cnt % StickerPanPerRow) ? 1 : 0); int h = st::emojiPanHeader + rows * st::stickerPanSize.height(); - if (i == _sets.size() - 1 && _setIds.at(i) != CustomStickerSetId && h < minLastH) h = minLastH; + if (i == _sets.size() - 1 && h < minLastH) h = minLastH; result += h; } return result + st::stickerPanPadding; @@ -1179,7 +1179,7 @@ void StickerPanInner::paintEvent(QPaintEvent *e) { tilly = y + st::emojiPanHeader + (rows * st::stickerPanSize.height()); if (r.top() >= tilly) continue; - bool special = (_setIds[c] == DefaultStickerSetId || _setIds[c] == CustomStickerSetId || _setIds[c] == RecentStickerSetId); + bool special = (_setIds[c] == DefaultStickerSetId || _setIds[c] == RecentStickerSetId); y += st::emojiPanHeader; QString title = _titles[c]; @@ -1244,7 +1244,7 @@ void StickerPanInner::paintEvent(QPaintEvent *e) { p.drawPixmapLeft(ppos, width(), sticker->sticker->img->pix(w, h)); } - if (hover > 0 && _setIds[c] == CustomStickerSetId) { + if (hover > 0 && _setIds[c] == RecentStickerSetId && _custom.at(index)) { float64 xHover = _hovers[c][_sets[c].size() + index]; QPoint xPos = pos + QPoint(st::stickerPanSize.width() - st::stickerPanDelete.pxWidth(), 0); @@ -1298,16 +1298,16 @@ void StickerPanInner::mouseReleaseEvent(QMouseEvent *e) { } int tab = (_selected / emojiTabShift), sel = _selected % emojiTabShift; - if (_setIds[tab] == CustomStickerSetId && sel >= _sets[tab].size() && sel < _sets[tab].size() * 2) { + if (_setIds[tab] == RecentStickerSetId && sel >= _sets[tab].size() && sel < _sets[tab].size() * 2 && _custom.at(sel - _sets[tab].size())) { clearSelection(true); - int32 refresh = 0; + bool refresh = false; DocumentData *sticker = _sets[tab].at(sel - _sets[tab].size()); RecentStickerPack &recent(cGetRecentStickers()); for (int32 i = 0, l = recent.size(); i < l; ++i) { if (recent.at(i).first == sticker) { recent.removeAt(i); Local::writeUserSettings(); - refresh = 1; + refresh = true; break; } } @@ -1321,17 +1321,13 @@ void StickerPanInner::mouseReleaseEvent(QMouseEvent *e) { sets.erase(it); } Local::writeStickers(); - refresh = 2; + refresh = true; break; } } } if (refresh) { - if (refresh > 1) { - refreshStickers(); - } else { - refreshRecent(); - } + refreshRecent(); updateSelected(); update(); } @@ -1388,7 +1384,6 @@ void StickerPanInner::refreshStickers() { refreshRecent(false); - appendSet(CustomStickerSetId); appendSet(DefaultStickerSetId); for (StickerSetsOrder::const_iterator i = cStickerSetsOrder().cbegin(), e = cStickerSetsOrder().cend(); i != e; ++i) { appendSet(*i); @@ -1457,14 +1452,16 @@ void StickerPanInner::appendSet(uint64 setId) { } _setIds.push_back(it->id); _sets.push_back(pack); - _hovers.push_back(QVector(it->stickers.size() + (it->id == CustomStickerSetId ? it->stickers.size() : 1), 0)); + _hovers.push_back(QVector(it->stickers.size() + 1, 0)); int32 availw = width() - st::emojiPanHeaderLeft - st::emojiSwitchSkip - _emojiWidth - (st::emojiSwitchSkip - st::emojiSwitchImgSkip); _titles.push_back(st::emojiPanHeaderFont->m.elidedText(it->title, Qt::ElideRight, availw)); } void StickerPanInner::refreshRecent(bool performResize) { + _custom.clear(); clearSelection(true); - if (cGetRecentStickers().isEmpty()) { + StickerSets::const_iterator customIt = cStickerSets().constFind(CustomStickerSetId); + if (cGetRecentStickers().isEmpty() && (customIt == cStickerSets().cend() || customIt->stickers.isEmpty())) { if (!_setIds.isEmpty() && _setIds.at(0) == RecentStickerSetId) { _setIds.pop_front(); _sets.pop_front(); @@ -1473,18 +1470,33 @@ void StickerPanInner::refreshRecent(bool performResize) { } } else { StickerPack recent; - recent.reserve(cGetRecentStickers().size()); + int32 customCnt = (customIt == cStickerSets().cend() ? 0 : customIt->stickers.size()); + QMap recentOnly; + recent.reserve(cGetRecentStickers().size() + customCnt); + _custom.reserve(cGetRecentStickers().size() + customCnt); for (int32 i = 0, l = cGetRecentStickers().size(); i < l; ++i) { - recent.push_back(cGetRecentStickers().at(i).first); + DocumentData *s = cGetRecentStickers().at(i).first; + recent.push_back(s); + recentOnly.insert(s, true); + _custom.push_back(false); + } + for (int32 i = 0; i < customCnt; ++i) { + DocumentData *s = customIt->stickers.at(i); + if (recentOnly.contains(s)) { + _custom[recent.indexOf(s)] = true; + } else { + recent.push_back(s); + _custom.push_back(true); + } } if (_setIds.isEmpty() || _setIds.at(0) != RecentStickerSetId) { _setIds.push_front(RecentStickerSetId); - _hovers.push_back(QVector(recent.size() + 1, 0)); + _hovers.push_back(QVector(recent.size() * 2, 0)); _sets.push_back(recent); _titles.push_back(lang(lng_emoji_category0)); } else { _sets[0] = recent; - _hovers[0].resize(recent.size() + 1); + _hovers[0].resize(recent.size() * 2); } } @@ -1503,7 +1515,6 @@ void StickerPanInner::fillIcons(QVector &icons) { icons.reserve(_sets.size()); int32 i = 0; if (_setIds.at(0) == RecentStickerSetId) ++i; - if (_setIds.at(0) == CustomStickerSetId || _setIds.at(1) == CustomStickerSetId) ++i; if (i > 0) icons.push_back(StickerIcon()); for (int32 l = _sets.size(); i < l; ++i) { DocumentData *s = _sets.at(i).at(0); @@ -1538,7 +1549,7 @@ void StickerPanInner::updateSelected() { int y, ytill = 0, sx = (rtl() ? width() - p.x() : p.x()) - st::stickerPanPadding; for (int c = 0, l = _setIds.size(); c < l; ++c) { int cnt = _sets[c].size(); - bool special = _setIds[c] == DefaultStickerSetId || _setIds[c] == CustomStickerSetId || _setIds[c] == RecentStickerSetId; + bool special = _setIds[c] == DefaultStickerSetId || _setIds[c] == RecentStickerSetId; y = ytill; ytill = y + st::emojiPanHeader + ((cnt / StickerPanPerRow) + ((cnt % StickerPanPerRow) ? 1 : 0)) * st::stickerPanSize.height(); if (p.y() >= y && p.y() < ytill) { @@ -1551,7 +1562,7 @@ void StickerPanInner::updateSelected() { if (selIndex >= _sets[c].size()) { selIndex = -1; } else { - if (_setIds[c] == CustomStickerSetId) { + if (_setIds[c] == RecentStickerSetId && _custom[selIndex]) { int32 inx = sx - (selIndex % StickerPanPerRow) * st::stickerPanSize.width(), iny = p.y() - y - ((selIndex / StickerPanPerRow) * st::stickerPanSize.height()); if (inx >= st::stickerPanSize.width() - st::stickerPanDelete.pxWidth() && iny < st::stickerPanDelete.pxHeight()) { selIndex += _sets[c].size(); @@ -1568,11 +1579,11 @@ void StickerPanInner::updateSelected() { bool startanim = false; int oldSel = _selected, oldSelTab = oldSel / emojiTabShift, xOldSel = -1, newSel = selIndex, newSelTab = newSel / emojiTabShift, xNewSel = -1; - if (oldSel >= 0 && oldSelTab < _setIds.size() && _setIds[oldSelTab] == CustomStickerSetId && oldSel >= oldSelTab * emojiTabShift + _sets[oldSelTab].size()) { + if (oldSel >= 0 && oldSelTab < _setIds.size() && _setIds[oldSelTab] == RecentStickerSetId && oldSel >= oldSelTab * emojiTabShift + _sets[oldSelTab].size()) { xOldSel = oldSel; oldSel -= _sets[oldSelTab].size(); } - if (newSel >= 0 && newSelTab < _setIds.size() && _setIds[newSelTab] == CustomStickerSetId && newSel >= newSelTab * emojiTabShift + _sets[newSelTab].size()) { + if (newSel >= 0 && newSelTab < _setIds.size() && _setIds[newSelTab] == RecentStickerSetId && newSel >= newSelTab * emojiTabShift + _sets[newSelTab].size()) { xNewSel = newSel; newSel -= _sets[newSelTab].size(); } @@ -2347,7 +2358,7 @@ void EmojiPan::onSwitch() { void EmojiPan::onRemoveSet(uint64 setId) { StickerSets::const_iterator it = cStickerSets().constFind(setId); - if (it != cStickerSets().cend() && setId != CustomStickerSetId && setId != DefaultStickerSetId && setId != RecentStickerSetId) { + if (it != cStickerSets().cend() && setId != DefaultStickerSetId && setId != RecentStickerSetId) { _removingSetId = it->id; ConfirmBox *box = new ConfirmBox(lng_stickers_remove_pack(lt_sticker_pack, it->title)); connect(box, SIGNAL(confirmed()), this, SLOT(onRemoveSetSure())); @@ -2359,7 +2370,7 @@ void EmojiPan::onRemoveSet(uint64 setId) { void EmojiPan::onRemoveSetSure() { App::wnd()->hideLayer(); StickerSets::iterator it = cRefStickerSets().find(_removingSetId); - if (it != cRefStickerSets().cend() && _removingSetId != CustomStickerSetId && _removingSetId != DefaultStickerSetId && _removingSetId != RecentStickerSetId) { + if (it != cRefStickerSets().cend() && _removingSetId != DefaultStickerSetId && _removingSetId != RecentStickerSetId) { if (it->id && it->access) { MTP::send(MTPmessages_UninstallStickerSet(MTP_inputStickerSetID(MTP_long(it->id), MTP_long(it->access)))); } else if (!it->shortName.isEmpty()) { diff --git a/Telegram/SourceFiles/dropdown.h b/Telegram/SourceFiles/dropdown.h index df9af49efa..7a136f72c7 100644 --- a/Telegram/SourceFiles/dropdown.h +++ b/Telegram/SourceFiles/dropdown.h @@ -343,6 +343,7 @@ private: QList _setIds; QList _sets; QList > _hovers; + QList _custom; int32 _selected, _pressedSel; QPoint _lastMousePos; diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index b0a2b66e0f..0ba654895a 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.23 + 0.8.24 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index 30e84033c84ffc9174d2fed5d2b22525daf73927..234db8af4dc6efa6145055bb17b4e506a5e3be1b 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig_3