diff --git a/Telegram/Resources/art/sprite.png b/Telegram/Resources/art/sprite.png index e1f5778499..3c4dd1eeca 100644 Binary files a/Telegram/Resources/art/sprite.png and b/Telegram/Resources/art/sprite.png differ diff --git a/Telegram/Resources/art/sprite_200x.png b/Telegram/Resources/art/sprite_200x.png index 9eaedee277..aad7f64b0e 100644 Binary files a/Telegram/Resources/art/sprite_200x.png and b/Telegram/Resources/art/sprite_200x.png differ diff --git a/Telegram/Resources/basic.style b/Telegram/Resources/basic.style index 76cf5bbf8d..925b6a4075 100644 --- a/Telegram/Resources/basic.style +++ b/Telegram/Resources/basic.style @@ -1169,30 +1169,78 @@ msgFileOutBg: #78c67f; msgFileOutBgOver: #6bc272; msgFileOutBgSelected: #5fb389; -msgFileOutImage: sprite(0px, 146px, 18px, 18px); -msgFileOutImageSelected: sprite(18px, 146px, 18px, 18px); -msgFileInImage: sprite(0px, 164px, 18px, 18px); -msgFileInImageSelected: sprite(18px, 164px, 18px, 18px); -msgFileOutFile: sprite(36px, 146px, 18px, 18px); -msgFileOutFileSelected: sprite(54px, 146px, 18px, 18px); -msgFileInFile: sprite(36px, 164px, 18px, 18px); -msgFileInFileSelected: sprite(54px, 164px, 18px, 18px); -msgFileOutDownload: sprite(72px, 142px, 14px, 20px); -msgFileOutDownloadSelected: sprite(86px, 142px, 14px, 20px); -msgFileInDownload: sprite(72px, 162px, 14px, 20px); -msgFileInDownloadSelected: sprite(86px, 162px, 14px, 20px); -msgFileOutCancel: sprite(100px, 147px, 16px, 16px); -msgFileOutCancelSelected: sprite(116px, 147px, 16px, 16px); -msgFileInCancel: sprite(100px, 165px, 16px, 16px); -msgFileInCancelSelected: sprite(116px, 165px, 16px, 16px); -msgFileOutPause: sprite(132px, 147px, 14px, 16px); -msgFileOutPauseSelected: sprite(146px, 147px, 14px, 16px); -msgFileInPause: sprite(132px, 165px, 14px, 16px); -msgFileInPauseSelected: sprite(146px, 165px, 14px, 16px); -msgFileOutPlay: sprite(160px, 146px, 20px, 18px); -msgFileOutPlaySelected: sprite(180px, 146px, 20px, 18px); -msgFileInPlay: sprite(160px, 164px, 20px, 18px); -msgFileInPlaySelected: sprite(180px, 164px, 20px, 18px); +msgFileOutImage: icon { + { "msg_file_image", msgOutBg }, +}; +msgFileOutImageSelected: icon { + { "msg_file_image", msgOutBgSelected }, +}; +msgFileInImage: icon { + { "msg_file_image", msgInBg }, +}; +msgFileInImageSelected: icon { + { "msg_file_image", msgInBgSelected }, +}; +msgFileOutDocument: icon { + { "msg_file_document", msgOutBg }, +}; +msgFileOutDocumentSelected: icon { + { "msg_file_document", msgOutBgSelected }, +}; +msgFileInDocument: icon { + { "msg_file_document", msgInBg }, +}; +msgFileInDocumentSelected: icon { + { "msg_file_document", msgInBgSelected }, +}; +msgFileOutDownload: icon { + { "msg_file_download", msgOutBg }, +}; +msgFileOutDownloadSelected: icon { + { "msg_file_download", msgOutBgSelected }, +}; +msgFileInDownload: icon { + { "msg_file_download", msgInBg }, +}; +msgFileInDownloadSelected: icon { + { "msg_file_download", msgInBgSelected }, +}; +msgFileOutCancel: icon { + { "msg_file_cancel", msgOutBg }, +}; +msgFileOutCancelSelected: icon { + { "msg_file_cancel", msgOutBgSelected }, +}; +msgFileInCancel: icon { + { "msg_file_cancel", msgInBg }, +}; +msgFileInCancelSelected: icon { + { "msg_file_cancel", msgInBgSelected }, +}; +msgFileOutPause: icon { + { "msg_file_pause", msgOutBg }, +}; +msgFileOutPauseSelected: icon { + { "msg_file_pause", msgOutBgSelected }, +}; +msgFileInPause: icon { + { "msg_file_pause", msgInBg }, +}; +msgFileInPauseSelected: icon { + { "msg_file_pause", msgInBgSelected }, +}; +msgFileOutPlay: icon { + { "msg_file_play", msgOutBg }, +}; +msgFileOutPlaySelected: icon { + { "msg_file_play", msgOutBgSelected }, +}; +msgFileInPlay: icon { + { "msg_file_play", msgInBg }, +}; +msgFileInPlaySelected: icon { + { "msg_file_play", msgInBgSelected }, +}; msgFileRed: sprite(0px, 425px, 20px, 20px); msgFileYellow: sprite(20px, 425px, 20px, 20px); diff --git a/Telegram/Resources/icons/msg_file_cancel.png b/Telegram/Resources/icons/msg_file_cancel.png new file mode 100644 index 0000000000..8ec157e206 Binary files /dev/null and b/Telegram/Resources/icons/msg_file_cancel.png differ diff --git a/Telegram/Resources/icons/msg_file_cancel@2x.png b/Telegram/Resources/icons/msg_file_cancel@2x.png new file mode 100644 index 0000000000..f7992a20c2 Binary files /dev/null and b/Telegram/Resources/icons/msg_file_cancel@2x.png differ diff --git a/Telegram/Resources/icons/msg_file_document.png b/Telegram/Resources/icons/msg_file_document.png new file mode 100644 index 0000000000..4e9b369088 Binary files /dev/null and b/Telegram/Resources/icons/msg_file_document.png differ diff --git a/Telegram/Resources/icons/msg_file_document@2x.png b/Telegram/Resources/icons/msg_file_document@2x.png new file mode 100644 index 0000000000..740c790607 Binary files /dev/null and b/Telegram/Resources/icons/msg_file_document@2x.png differ diff --git a/Telegram/Resources/icons/msg_file_download.png b/Telegram/Resources/icons/msg_file_download.png new file mode 100644 index 0000000000..8022c8fc1d Binary files /dev/null and b/Telegram/Resources/icons/msg_file_download.png differ diff --git a/Telegram/Resources/icons/msg_file_download@2x.png b/Telegram/Resources/icons/msg_file_download@2x.png new file mode 100644 index 0000000000..b3824bedc6 Binary files /dev/null and b/Telegram/Resources/icons/msg_file_download@2x.png differ diff --git a/Telegram/Resources/icons/msg_file_image.png b/Telegram/Resources/icons/msg_file_image.png new file mode 100644 index 0000000000..689d62062d Binary files /dev/null and b/Telegram/Resources/icons/msg_file_image.png differ diff --git a/Telegram/Resources/icons/msg_file_image@2x.png b/Telegram/Resources/icons/msg_file_image@2x.png new file mode 100644 index 0000000000..294ec43a42 Binary files /dev/null and b/Telegram/Resources/icons/msg_file_image@2x.png differ diff --git a/Telegram/Resources/icons/msg_file_pause.png b/Telegram/Resources/icons/msg_file_pause.png new file mode 100644 index 0000000000..85ea133ff0 Binary files /dev/null and b/Telegram/Resources/icons/msg_file_pause.png differ diff --git a/Telegram/Resources/icons/msg_file_pause@2x.png b/Telegram/Resources/icons/msg_file_pause@2x.png new file mode 100644 index 0000000000..c101828cf1 Binary files /dev/null and b/Telegram/Resources/icons/msg_file_pause@2x.png differ diff --git a/Telegram/Resources/icons/msg_file_play.png b/Telegram/Resources/icons/msg_file_play.png new file mode 100644 index 0000000000..36cf135f98 Binary files /dev/null and b/Telegram/Resources/icons/msg_file_play.png differ diff --git a/Telegram/Resources/icons/msg_file_play@2x.png b/Telegram/Resources/icons/msg_file_play@2x.png new file mode 100644 index 0000000000..97605dfda6 Binary files /dev/null and b/Telegram/Resources/icons/msg_file_play@2x.png differ diff --git a/Telegram/Resources/winrc/Telegram.rc b/Telegram/Resources/winrc/Telegram.rc index 1d240708ca..15b6b5dc40 100644 --- a/Telegram/Resources/winrc/Telegram.rc +++ b/Telegram/Resources/winrc/Telegram.rc @@ -34,8 +34,8 @@ IDI_ICON1 ICON "..\\art\\icon256.ico" // VS_VERSION_INFO VERSIONINFO - FILEVERSION 0,10,8,3 - PRODUCTVERSION 0,10,8,3 + FILEVERSION 0,10,8,4 + PRODUCTVERSION 0,10,8,4 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -51,10 +51,10 @@ BEGIN BLOCK "040904b0" BEGIN VALUE "CompanyName", "Telegram Messenger LLP" - VALUE "FileVersion", "0.10.8.3" + VALUE "FileVersion", "0.10.8.4" VALUE "LegalCopyright", "Copyright (C) 2014-2016" VALUE "ProductName", "Telegram Desktop" - VALUE "ProductVersion", "0.10.8.3" + VALUE "ProductVersion", "0.10.8.4" END END BLOCK "VarFileInfo" diff --git a/Telegram/Resources/winrc/Updater.rc b/Telegram/Resources/winrc/Updater.rc index c82764a5c9..afd47db8c6 100644 --- a/Telegram/Resources/winrc/Updater.rc +++ b/Telegram/Resources/winrc/Updater.rc @@ -25,8 +25,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // VS_VERSION_INFO VERSIONINFO - FILEVERSION 0,10,8,3 - PRODUCTVERSION 0,10,8,3 + FILEVERSION 0,10,8,4 + PRODUCTVERSION 0,10,8,4 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -43,10 +43,10 @@ BEGIN BEGIN VALUE "CompanyName", "Telegram Messenger LLP" VALUE "FileDescription", "Telegram Updater" - VALUE "FileVersion", "0.10.8.3" + VALUE "FileVersion", "0.10.8.4" VALUE "LegalCopyright", "Copyright (C) 2014-2016" VALUE "ProductName", "Telegram Desktop" - VALUE "ProductVersion", "0.10.8.3" + VALUE "ProductVersion", "0.10.8.4" END END BLOCK "VarFileInfo" diff --git a/Telegram/SourceFiles/boxes/photosendbox.cpp b/Telegram/SourceFiles/boxes/photosendbox.cpp index ff3c66b180..d1fc79a6a7 100644 --- a/Telegram/SourceFiles/boxes/photosendbox.cpp +++ b/Telegram/SourceFiles/boxes/photosendbox.cpp @@ -233,7 +233,8 @@ void PhotoSendBox::paintEvent(QPaintEvent *e) { p.drawEllipse(inner); p.setRenderHint(QPainter::HighQualityAntialiasing, false); - p.drawSpriteCenter(inner, st::msgFileInPlay); + auto icon = &st::msgFileInPlay; + icon->paintInCenter(p, inner); } } else { int32 w = width() - st::boxPhotoPadding.left() - st::boxPhotoPadding.right(); @@ -272,7 +273,8 @@ void PhotoSendBox::paintEvent(QPaintEvent *e) { p.drawEllipse(inner); p.setRenderHint(QPainter::HighQualityAntialiasing, false); - p.drawSpriteCenter(inner, _isImage ? st::msgFileOutImage : st::msgFileOutFile); + auto icon = &(_isImage ? st::msgFileOutImage : st::msgFileOutDocument); + icon->paintInCenter(p, inner); } else { p.drawPixmapLeft(x + st::msgFilePadding.left(), y + st::msgFilePadding.top(), width(), userDefPhoto(1)->pixCircled(st::msgFileSize)); } @@ -553,7 +555,8 @@ void EditCaptionBox::paintEvent(QPaintEvent *e) { p.drawEllipse(inner); p.setRenderHint(QPainter::HighQualityAntialiasing, false); - p.drawSpriteCenter(inner, st::msgFileInPlay); + auto icon = &st::msgFileInPlay; + icon->paintInCenter(p, inner); } } else if (_doc) { int32 w = width() - st::boxPhotoPadding.left() - st::boxPhotoPadding.right(); @@ -591,7 +594,8 @@ void EditCaptionBox::paintEvent(QPaintEvent *e) { p.drawEllipse(inner); p.setRenderHint(QPainter::HighQualityAntialiasing, false); - p.drawSpriteCenter(inner, _isImage ? st::msgFileInImage : st::msgFileInFile); + auto icon = &(_isImage ? st::msgFileInImage : st::msgFileInDocument); + icon->paintInCenter(p, inner); } p.setFont(st::semiboldFont); p.setPen(st::black); diff --git a/Telegram/SourceFiles/core/version.h b/Telegram/SourceFiles/core/version.h index 170016e560..a3f0716d9b 100644 --- a/Telegram/SourceFiles/core/version.h +++ b/Telegram/SourceFiles/core/version.h @@ -22,7 +22,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org #include "core/utils.h" -#define BETA_VERSION_MACRO (10008003ULL) +#define BETA_VERSION_MACRO (10008004ULL) constexpr int AppVersion = 10008; constexpr str_const AppVersionStr = "0.10.8"; diff --git a/Telegram/SourceFiles/history/history_media.h b/Telegram/SourceFiles/history/history_media.h index b823dcb6ae..fac47c4977 100644 --- a/Telegram/SourceFiles/history/history_media.h +++ b/Telegram/SourceFiles/history/history_media.h @@ -169,6 +169,15 @@ public: return (_inBubbleState == MediaInBubbleState::Bottom) || (_inBubbleState == MediaInBubbleState::None); } + // Sometimes click on media in message is overloaded by the messsage: + // (for example it can open a link or a game instead of opening media) + // But the overloading click handler should be used only when media + // is already loaded (not a photo or gif waiting for load with auto + // load being disabled - in such case media should handle the click). + virtual bool isReadyForOpen() const { + return true; + } + protected: HistoryItem *_parent; int _width = 0; diff --git a/Telegram/SourceFiles/history/history_media_types.cpp b/Telegram/SourceFiles/history/history_media_types.cpp index 5d775c83c4..bf8f18e2fc 100644 --- a/Telegram/SourceFiles/history/history_media_types.cpp +++ b/Telegram/SourceFiles/history/history_media_types.cpp @@ -408,7 +408,7 @@ void HistoryPhoto::draw(Painter &p, const QRect &r, TextSelection selection, uin App::roundRect(p, rthumb, textstyleCurrent()->selectOverlay, overlayCorners); } - if (notChild && (radial || (!loaded && !_data->loading()))) { + if (radial || (!loaded && !_data->loading())) { float64 radialOpacity = (radial && loaded && !_data->uploading()) ? _animation->radial.opacity() : 1; QRect inner(rthumb.x() + (rthumb.width() - st::msgFileSize) / 2, rthumb.y() + (rthumb.height() - st::msgFileSize) / 2, st::msgFileSize, st::msgFileSize); p.setPen(Qt::NoPen); @@ -432,17 +432,18 @@ void HistoryPhoto::draw(Painter &p, const QRect &r, TextSelection selection, uin p.setOpacity(radial ? _animation->radial.opacity() : 1); p.setOpacity(radialOpacity); - style::sprite icon; - if (radial || _data->loading()) { - DelayedStorageImage *delayed = _data->full->toDelayedStorageImage(); - if (!delayed || !delayed->location().isNull()) { - icon = (selected ? st::msgFileInCancelSelected : st::msgFileInCancel); + auto icon = ([radial, this, selected]() -> const style::icon* { + if (radial || _data->loading()) { + auto delayed = _data->full->toDelayedStorageImage(); + if (!delayed || !delayed->location().isNull()) { + return &(selected ? st::msgFileInCancelSelected : st::msgFileInCancel); + } + return nullptr; } - } else { - icon = (selected ? st::msgFileInDownloadSelected : st::msgFileInDownload); - } - if (!icon.isEmpty()) { - p.drawSpriteCenter(inner, icon); + return &(selected ? st::msgFileInDownloadSelected : st::msgFileInDownload); + })(); + if (icon) { + icon->paintInCenter(p, inner); } if (radial) { p.setOpacity(1); @@ -769,15 +770,15 @@ void HistoryVideo::draw(Painter &p, const QRect &r, TextSelection selection, uin p.setOpacity(1); } - style::sprite icon; - if (loaded) { - icon = (selected ? st::msgFileInPlaySelected : st::msgFileInPlay); - } else if (radial || _data->loading()) { - icon = (selected ? st::msgFileInCancelSelected : st::msgFileInCancel); - } else { - icon = (selected ? st::msgFileInDownloadSelected : st::msgFileInDownload); - } - p.drawSpriteCenter(inner, icon); + auto icon = ([loaded, radial, this, selected] { + if (loaded) { + return &(selected ? st::msgFileInPlaySelected : st::msgFileInPlay); + } else if (radial || _data->loading()) { + return &(selected ? st::msgFileInCancelSelected : st::msgFileInCancel); + } + return &(selected ? st::msgFileInDownloadSelected : st::msgFileInDownload); + })(); + icon->paintInCenter(p, inner); if (radial) { QRect rinner(inner.marginsRemoved(QMargins(st::msgFileRadialLine, st::msgFileRadialLine, st::msgFileRadialLine, st::msgFileRadialLine))); _animation->radial.draw(p, rinner, st::msgFileRadialLine, selected ? st::msgInBgSelected : st::msgInBg); @@ -1122,14 +1123,14 @@ void HistoryDocument::draw(Painter &p, const QRect &r, TextSelection selection, p.setRenderHint(QPainter::HighQualityAntialiasing, false); p.setOpacity(radialOpacity); - style::sprite icon; - if (radial || _data->loading()) { - icon = (selected ? st::msgFileInCancelSelected : st::msgFileInCancel); - } else { - icon = (selected ? st::msgFileInDownloadSelected : st::msgFileInDownload); - } + auto icon = ([radial, this, selected] { + if (radial || _data->loading()) { + return &(selected ? st::msgFileInCancelSelected : st::msgFileInCancel); + } + return &(selected ? st::msgFileInDownloadSelected : st::msgFileInDownload); + })(); p.setOpacity((radial && loaded) ? _animation->radial.opacity() : 1); - p.drawSpriteCenter(inner, icon); + icon->paintInCenter(p, inner); if (radial) { p.setOpacity(1); @@ -1174,23 +1175,22 @@ void HistoryDocument::draw(Painter &p, const QRect &r, TextSelection selection, _animation->radial.draw(p, rinner, st::msgFileRadialLine, bg); } - style::sprite icon; - if (showPause) { - icon = outbg ? (selected ? st::msgFileOutPauseSelected : st::msgFileOutPause) : (selected ? st::msgFileInPauseSelected : st::msgFileInPause); - } else if (radial || _data->loading()) { - icon = outbg ? (selected ? st::msgFileOutCancelSelected : st::msgFileOutCancel) : (selected ? st::msgFileInCancelSelected : st::msgFileInCancel); - } else if (loaded) { - if (_data->song() || _data->voice()) { - icon = outbg ? (selected ? st::msgFileOutPlaySelected : st::msgFileOutPlay) : (selected ? st::msgFileInPlaySelected : st::msgFileInPlay); - } else if (_data->isImage()) { - icon = outbg ? (selected ? st::msgFileOutImageSelected : st::msgFileOutImage) : (selected ? st::msgFileInImageSelected : st::msgFileInImage); - } else { - icon = outbg ? (selected ? st::msgFileOutFileSelected : st::msgFileOutFile) : (selected ? st::msgFileInFileSelected : st::msgFileInFile); + auto icon = ([showPause, radial, this, loaded, outbg, selected] { + if (showPause) { + return &(outbg ? (selected ? st::msgFileOutPauseSelected : st::msgFileOutPause) : (selected ? st::msgFileInPauseSelected : st::msgFileInPause)); + } else if (radial || _data->loading()) { + return &(outbg ? (selected ? st::msgFileOutCancelSelected : st::msgFileOutCancel) : (selected ? st::msgFileInCancelSelected : st::msgFileInCancel)); + } else if (loaded) { + if (_data->song() || _data->voice()) { + return &(outbg ? (selected ? st::msgFileOutPlaySelected : st::msgFileOutPlay) : (selected ? st::msgFileInPlaySelected : st::msgFileInPlay)); + } else if (_data->isImage()) { + return &(outbg ? (selected ? st::msgFileOutImageSelected : st::msgFileOutImage) : (selected ? st::msgFileInImageSelected : st::msgFileInImage)); + } + return &(outbg ? (selected ? st::msgFileOutDocumentSelected : st::msgFileOutDocument) : (selected ? st::msgFileInDocumentSelected : st::msgFileInDocument)); } - } else { - icon = outbg ? (selected ? st::msgFileOutDownloadSelected : st::msgFileOutDownload) : (selected ? st::msgFileInDownloadSelected : st::msgFileInDownload); - } - p.drawSpriteCenter(inner, icon); + return &(outbg ? (selected ? st::msgFileOutDownloadSelected : st::msgFileOutDownload) : (selected ? st::msgFileInDownloadSelected : st::msgFileInDownload)); + })(); + icon->paintInCenter(p, inner); } int32 namewidth = _width - nameleft - nameright; @@ -1746,18 +1746,19 @@ void HistoryGif::draw(Painter &p, const QRect &r, TextSelection selection, uint6 p.setRenderHint(QPainter::HighQualityAntialiasing, false); p.setOpacity(radialOpacity); - style::sprite icon; - if (_data->loaded() && !radial) { - icon = (selected ? st::msgFileInPlaySelected : st::msgFileInPlay); - } else if (radial || _data->loading()) { - if (_parent->id > 0 || _data->uploading()) { - icon = (selected ? st::msgFileInCancelSelected : st::msgFileInCancel); + auto icon = ([this, radial, selected]() -> const style::icon * { + if (_data->loaded() && !radial) { + return &(selected ? st::msgFileInPlaySelected : st::msgFileInPlay); + } else if (radial || _data->loading()) { + if (_parent->id > 0 || _data->uploading()) { + return &(selected ? st::msgFileInCancelSelected : st::msgFileInCancel); + } + return nullptr; } - } else { - icon = (selected ? st::msgFileInDownloadSelected : st::msgFileInDownload); - } - if (!icon.isEmpty()) { - p.drawSpriteCenter(inner, icon); + return &(selected ? st::msgFileInDownloadSelected : st::msgFileInDownload); + })(); + if (icon) { + icon->paintInCenter(p, inner); } if (radial) { p.setOpacity(1); @@ -2729,10 +2730,12 @@ void HistoryWebPage::draw(Painter &p, const QRect &r, TextSelection selection, u int32 pixwidth = _attach->currentWidth(), pixheight = _attach->height(); if (_data->type == WebPageVideo && _attach->type() == MediaTypePhoto) { - if (_data->siteName == qstr("YouTube")) { - p.drawSprite(QPoint((pixwidth - st::youtubeIcon.pxWidth()) / 2, (pixheight - st::youtubeIcon.pxHeight()) / 2), st::youtubeIcon); - } else { - p.drawSprite(QPoint((pixwidth - st::videoIcon.pxWidth()) / 2, (pixheight - st::videoIcon.pxHeight()) / 2), st::videoIcon); + if (_attach->isReadyForOpen()) { + if (_data->siteName == qstr("YouTube")) { + p.drawSprite(QPoint((pixwidth - st::youtubeIcon.pxWidth()) / 2, (pixheight - st::youtubeIcon.pxHeight()) / 2), st::youtubeIcon); + } else { + p.drawSprite(QPoint((pixwidth - st::videoIcon.pxWidth()) / 2, (pixheight - st::videoIcon.pxHeight()) / 2), st::videoIcon); + } } if (_durationWidth) { int32 dateX = pixwidth - _durationWidth - st::msgDateImgDelta - 2 * st::msgDateImgPadding.x(); @@ -2811,7 +2814,7 @@ HistoryTextState HistoryWebPage::getState(int x, int y, HistoryStateRequest requ if (rtl()) attachLeft = _width - attachLeft - _attach->currentWidth(); result = _attach->getState(x - attachLeft, y - attachTop, request); - if (result.link && !_data->document && _data->photo) { + if (result.link && !_data->document && _data->photo && _attach->isReadyForOpen()) { if (_data->type == WebPageProfile || _data->type == WebPageVideo) { result.link = _openl; } else if (_data->type == WebPagePhoto || _data->siteName == qstr("Twitter") || _data->siteName == qstr("Facebook")) { @@ -3160,7 +3163,11 @@ HistoryTextState HistoryGame::getState(int x, int y, HistoryStateRequest request if (rtl()) attachLeft = _width - attachLeft - _attach->currentWidth(); if (x >= attachLeft && x < attachLeft + _attach->currentWidth() && y >= tshift && y < _height - bshift) { - result.link = _openl; + if (_attach->isReadyForOpen()) { + result.link = _openl; + } else { + result = _attach->getState(x - attachLeft, y - attachTop, request); + } } } diff --git a/Telegram/SourceFiles/history/history_media_types.h b/Telegram/SourceFiles/history/history_media_types.h index 341f278b6c..45c0ea3eae 100644 --- a/Telegram/SourceFiles/history/history_media_types.h +++ b/Telegram/SourceFiles/history/history_media_types.h @@ -172,6 +172,9 @@ public: bool hideFromName() const override { return true; } + bool isReadyForOpen() const override { + return _data->loaded(); + } protected: float64 dataProgress() const override { @@ -481,6 +484,9 @@ public: bool hideFromName() const override { return true; } + bool isReadyForOpen() const override { + return _data->loaded(); + } ~HistoryGif(); diff --git a/Telegram/SourceFiles/history/history_message.cpp b/Telegram/SourceFiles/history/history_message.cpp index 0190a3ec38..f931b7aafb 100644 --- a/Telegram/SourceFiles/history/history_message.cpp +++ b/Telegram/SourceFiles/history/history_message.cpp @@ -494,7 +494,7 @@ void HistoryMessage::updateMediaInBubbleState() { return; } - bool hasSomethingAbove = displayFromName() || displayForwardedFrom() || Has(); + bool hasSomethingAbove = displayFromName() || displayForwardedFrom() || Has() || Has(); bool hasSomethingBelow = false; if (!emptyText()) { if (_media->isAboveMessage()) { diff --git a/Telegram/SourceFiles/inline_bots/inline_bot_layout_internal.cpp b/Telegram/SourceFiles/inline_bots/inline_bot_layout_internal.cpp index f3ed03cf11..04744c28d7 100644 --- a/Telegram/SourceFiles/inline_bots/inline_bot_layout_internal.cpp +++ b/Telegram/SourceFiles/inline_bots/inline_bot_layout_internal.cpp @@ -177,16 +177,16 @@ void Gif::paint(Painter &p, const QRect &clip, const PaintContext *context) cons p.setOpacity(radialOpacity * p.opacity()); p.setOpacity(radialOpacity); - style::sprite icon; - if (loaded && !radial) { - icon = st::msgFileInPlay; - } else if (radial || loading) { - icon = st::msgFileInCancel; - } else { - icon = st::msgFileInDownload; - } + auto icon = ([loaded, radial, loading] { + if (loaded && !radial) { + return &st::msgFileInPlay; + } else if (radial || loading) { + return &st::msgFileInCancel; + } + return &st::msgFileInDownload; + })(); QRect inner((_width - st::msgFileSize) / 2, (height - st::msgFileSize) / 2, st::msgFileSize, st::msgFileSize); - p.drawSpriteCenter(inner, icon); + icon->paintInCenter(p, inner); if (radial) { p.setOpacity(1); QRect rinner(inner.marginsRemoved(QMargins(st::msgFileRadialLine, st::msgFileRadialLine, st::msgFileRadialLine, st::msgFileRadialLine))); @@ -702,7 +702,7 @@ void File::paint(Painter &p, const QRect &clip, const PaintContext *context) con bool showPause = updateStatusText(); bool radial = isRadialAnimation(context->ms); - QRect iconCircle = rtlrect(0, st::inlineRowMargin, st::msgFileSize, st::msgFileSize, _width); + auto inner = rtlrect(0, st::inlineRowMargin, st::msgFileSize, st::msgFileSize, _width); p.setPen(Qt::NoPen); if (isThumbAnimation(context->ms)) { float64 over = _animation->a_thumbOver.current(); @@ -713,31 +713,30 @@ void File::paint(Painter &p, const QRect &clip, const PaintContext *context) con } p.setRenderHint(QPainter::HighQualityAntialiasing); - p.drawEllipse(iconCircle); + p.drawEllipse(inner); p.setRenderHint(QPainter::HighQualityAntialiasing, false); if (radial) { - QRect radialCircle(iconCircle.marginsRemoved(QMargins(st::msgFileRadialLine, st::msgFileRadialLine, st::msgFileRadialLine, st::msgFileRadialLine))); + auto radialCircle = inner.marginsRemoved(QMargins(st::msgFileRadialLine, st::msgFileRadialLine, st::msgFileRadialLine, st::msgFileRadialLine)); _animation->radial.draw(p, radialCircle, st::msgFileRadialLine, st::msgInBg); } - style::sprite icon; - if (showPause) { - icon = st::msgFileInPause; - } else if (radial || document->loading()) { - icon = st::msgFileInCancel; - } else if (true || document->loaded()) { - if (document->isImage()) { - icon = st::msgFileInImage; - } else if (document->voice() || document->song()) { - icon = st::msgFileInPlay; - } else { - icon = st::msgFileInFile; + auto icon = ([showPause, radial, document] { + if (showPause) { + return &st::msgFileInPause; + } else if (radial || document->loading()) { + return &st::msgFileInCancel; + } else if (true || document->loaded()) { + if (document->isImage()) { + return &st::msgFileInImage; + } else if (document->voice() || document->song()) { + return &st::msgFileInPlay; + } + return &st::msgFileInDocument; } - } else { - icon = st::msgFileInDownload; - } - p.drawSpriteCenter(iconCircle, icon); + return &st::msgFileInDownload; + })(); + icon->paintInCenter(p, inner); int titleTop = st::inlineRowMargin + st::inlineRowFileNameTop; int descriptionTop = st::inlineRowMargin + st::inlineRowFileDescriptionTop; diff --git a/Telegram/SourceFiles/overview/overview_layout.cpp b/Telegram/SourceFiles/overview/overview_layout.cpp index 7bf875dfa8..52f7090e5d 100644 --- a/Telegram/SourceFiles/overview/overview_layout.cpp +++ b/Telegram/SourceFiles/overview/overview_layout.cpp @@ -333,15 +333,15 @@ void Video::paint(Painter &p, const QRect &clip, TextSelection selection, const p.setRenderHint(QPainter::HighQualityAntialiasing, false); p.setOpacity((radial && loaded) ? _radial->opacity() : 1); - style::sprite icon; - if (radial) { - icon = (selected ? st::msgFileInCancelSelected : st::msgFileInCancel); - } else if (loaded) { - icon = (selected ? st::msgFileInPlaySelected : st::msgFileInPlay); - } else { - icon = (selected ? st::msgFileInDownloadSelected : st::msgFileInDownload); - } - p.drawSpriteCenter(inner, icon); + auto icon = ([radial, loaded, selected] { + if (radial) { + return &(selected ? st::msgFileInCancelSelected : st::msgFileInCancel); + } else if (loaded) { + return &(selected ? st::msgFileInPlaySelected : st::msgFileInPlay); + } + return &(selected ? st::msgFileInDownloadSelected : st::msgFileInDownload); + })(); + icon->paintInCenter(p, inner); if (radial) { p.setOpacity(1); QRect rinner(inner.marginsRemoved(QMargins(st::msgFileRadialLine, st::msgFileRadialLine, st::msgFileRadialLine, st::msgFileRadialLine))); @@ -461,17 +461,17 @@ void Voice::paint(Painter &p, const QRect &clip, TextSelection selection, const _radial->draw(p, rinner, st::msgFileRadialLine, bg); } - style::sprite icon; - if (showPause) { - icon = selected ? st::msgFileInPauseSelected : st::msgFileInPause; - } else if (_statusSize < 0 || _statusSize == FileStatusSizeLoaded) { - icon = selected ? st::msgFileInPlaySelected : st::msgFileInPlay; - } else if (_data->loading()) { - icon = selected ? st::msgFileInCancelSelected : st::msgFileInCancel; - } else { - icon = selected ? st::msgFileInDownloadSelected : st::msgFileInDownload; - } - p.drawSpriteCenter(inner, icon); + auto icon = ([showPause, this, selected] { + if (showPause) { + return &(selected ? st::msgFileInPauseSelected : st::msgFileInPause); + } else if (_statusSize < 0 || _statusSize == FileStatusSizeLoaded) { + return &(selected ? st::msgFileInPlaySelected : st::msgFileInPlay); + } else if (_data->loading()) { + return &(selected ? st::msgFileInCancelSelected : st::msgFileInCancel); + } + return &(selected ? st::msgFileInDownloadSelected : st::msgFileInDownload); + })(); + icon->paintInCenter(p, inner); } int32 namewidth = _width - nameleft - nameright; @@ -672,17 +672,17 @@ void Document::paint(Painter &p, const QRect &clip, TextSelection selection, con _radial->draw(p, rinner, st::msgFileRadialLine, bg); } - style::sprite icon; - if (showPause) { - icon = selected ? st::msgFileInPauseSelected : st::msgFileInPause; - } else if (loaded) { - icon = selected ? st::msgFileInPlaySelected : st::msgFileInPlay; - } else if (_data->loading()) { - icon = selected ? st::msgFileInCancelSelected : st::msgFileInCancel; - } else { - icon = selected ? st::msgFileInDownloadSelected : st::msgFileInDownload; - } - p.drawSpriteCenter(inner, icon); + auto icon = ([showPause, loaded, this, selected] { + if (showPause) { + return &(selected ? st::msgFileInPauseSelected : st::msgFileInPause); + } else if (loaded) { + return &(selected ? st::msgFileInPlaySelected : st::msgFileInPlay); + } else if (_data->loading()) { + return &(selected ? st::msgFileInCancelSelected : st::msgFileInCancel); + } + return &(selected ? st::msgFileInDownloadSelected : st::msgFileInDownload); + })(); + icon->paintInCenter(p, inner); } } else { nameleft = st::overviewFileSize + st::overviewFilePadding.right(); @@ -748,13 +748,13 @@ void Document::paint(Painter &p, const QRect &clip, TextSelection selection, con p.setRenderHint(QPainter::HighQualityAntialiasing, false); p.setOpacity(radialOpacity); - style::sprite icon; - if (loaded || _data->loading()) { - icon = (selected ? st::msgFileInCancelSelected : st::msgFileInCancel); - } else { - icon = (selected ? st::msgFileInDownloadSelected : st::msgFileInDownload); - } - p.drawSpriteCenter(inner, icon); + auto icon = ([loaded, this, selected] { + if (loaded || _data->loading()) { + return &(selected ? st::msgFileInCancelSelected : st::msgFileInCancel); + } + return &(selected ? st::msgFileInDownloadSelected : st::msgFileInDownload); + })(); + icon->paintInCenter(p, inner); if (radial) { p.setOpacity(1); diff --git a/Telegram/SourceFiles/platform/win/main_window_win.cpp b/Telegram/SourceFiles/platform/win/main_window_win.cpp index 789d6fd791..1b382393c5 100644 --- a/Telegram/SourceFiles/platform/win/main_window_win.cpp +++ b/Telegram/SourceFiles/platform/win/main_window_win.cpp @@ -529,7 +529,7 @@ private: }; _PsShadowWindows _psShadowWindows; -QColor _shActive(0, 0, 0), _shInactive(0, 0, 0); +QColor _shActive(0, 0, 0)/*, _shInactive(0, 0, 0)*/; LRESULT CALLBACK _PsShadowWindows::wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { auto wnd = App::wnd(); @@ -633,12 +633,12 @@ void MainWindow::shadowsUpdate(ShadowsChanges changes, WINDOWPOS *position) { } void MainWindow::shadowsActivate() { - _psShadowWindows.setColor(_shActive); +// _psShadowWindows.setColor(_shActive); shadowsUpdate(ShadowsChange::Activate); } void MainWindow::shadowsDeactivate() { - _psShadowWindows.setColor(_shInactive); +// _psShadowWindows.setColor(_shInactive); } void MainWindow::psShowTrayMenu() { diff --git a/Telegram/SourceFiles/ui/style/style_core_icon.h b/Telegram/SourceFiles/ui/style/style_core_icon.h index b4c4d2a65d..f8d3849396 100644 --- a/Telegram/SourceFiles/ui/style/style_core_icon.h +++ b/Telegram/SourceFiles/ui/style/style_core_icon.h @@ -89,8 +89,8 @@ public: Icon(const ColoredCopy &makeCopy) { _parts.reserve(makeCopy.copyFrom._parts.size()); auto colorIt = makeCopy.colors.cbegin(), colorsEnd = makeCopy.colors.cend(); - for_const (const auto &part, makeCopy.copyFrom._parts) { - const auto &newPart = part.clone((colorIt == colorsEnd) ? Color(Qt::Uninitialized) : *(colorIt++)); + for_const (auto &part, makeCopy.copyFrom._parts) { + auto &newPart = part.clone((colorIt == colorsEnd) ? Color(Qt::Uninitialized) : *(colorIt++)); _parts.push_back(newPart); } } @@ -106,6 +106,12 @@ public: } void paint(QPainter &p, const QPoint &pos, int outerw) const; + void paint(QPainter &p, int x, int y, int outerw) const { + paint(p, QPoint(x, y), outerw); + } + void paintInCenter(QPainter &p, const QRect &outer) const { + paint(p, outer.x() + (outer.width() - width()) / 2, outer.y() + (outer.height() - height()) / 2, outer.x() * 2 + outer.width()); + } void fill(QPainter &p, const QRect &rect) const; int width() const; int height() const; diff --git a/Telegram/build/version b/Telegram/build/version index 37cdddf1e0..5d2c512de0 100644 --- a/Telegram/build/version +++ b/Telegram/build/version @@ -3,4 +3,4 @@ AppVersionStrMajor 0.10 AppVersionStrSmall 0.10.8 AppVersionStr 0.10.8 AlphaChannel 0 -BetaVersion 10008003 +BetaVersion 10008004