diff --git a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp index 55aab77aa..f3ca16a07 100644 --- a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp +++ b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp @@ -1249,9 +1249,7 @@ void OverlayWidget::onCopy() { } else if (!_current.isNull()) { QApplication::clipboard()->setPixmap(_current); } - } else { - if (!_photo || !_photo->loaded()) return; - + } else if (_photo && _photo->loaded()) { QApplication::clipboard()->setPixmap(_photo->large()->pix(fileOrigin())); } } @@ -2385,7 +2383,6 @@ void OverlayWidget::validatePhotoCurrentImage() { validatePhotoImage(_photo->thumbnailInline(), true); if (_current.isNull()) { _photo->loadThumbnailSmall(fileOrigin()); - validatePhotoImage(Image::Empty(), true); } } @@ -2426,15 +2423,14 @@ void OverlayWidget::paintEvent(QPaintEvent *e) { if (rect.intersects(r)) { if (videoShown()) { paintTransformedVideoFrame(p); - } else if (!_current.isNull()) { - if ((!_doc || !_doc->getStickerLarge()) && _current.hasAlpha()) { + } else { + if ((!_doc || !_doc->getStickerLarge()) + && (_current.isNull() || _current.hasAlpha())) { p.fillRect(rect, _transparentBrush); } - if (_current.width() != _w * cIntRetinaFactor()) { + if (!_current.isNull()) { PainterHighQualityEnabler hq(p); p.drawPixmap(rect, _current); - } else { - p.drawPixmap(rect.topLeft(), _current); } } @@ -2670,7 +2666,6 @@ void OverlayWidget::paintTransformedVideoFrame(Painter &p) { // const auto fill = rect.intersected(this->rect()); // PaintImageProfile(p, image, rect, fill); //} else { - PainterHighQualityEnabler hq(p); const auto rotation = _streamed->info.video.rotation; const auto rotated = [](QRect rect, int rotation) { switch (rotation) { @@ -2693,6 +2688,8 @@ void OverlayWidget::paintTransformedVideoFrame(Painter &p) { } Unexpected("Rotation in OverlayWidget::paintTransformedVideoFrame"); }; + + PainterHighQualityEnabler hq(p); if (rotation) { p.save(); p.rotate(rotation); @@ -2947,7 +2944,7 @@ void OverlayWidget::setZoomLevel(int newZoom) { float64 nx, ny, z = (_zoom == ZoomToScreenLevel) ? _zoomToScreen : _zoom; const auto contentSize = videoShown() ? ConvertScale(videoSize()) - : ConvertScale(_current.size() / cIntRetinaFactor()); + : QSize(_width, _height); _w = contentSize.width(); _h = contentSize.height(); if (z >= 0) { diff --git a/Telegram/SourceFiles/overview/overview_layout.cpp b/Telegram/SourceFiles/overview/overview_layout.cpp index 10e19d54e..2e1f1fb41 100644 --- a/Telegram/SourceFiles/overview/overview_layout.cpp +++ b/Telegram/SourceFiles/overview/overview_layout.cpp @@ -292,6 +292,9 @@ Photo::Photo( : ItemBase(parent) , _data(photo) , _link(std::make_shared(photo, parent->fullId())) { + if (!_data->thumbnailInline()) { + _data->loadThumbnailSmall(parent->fullId()); + } } void Photo::initDimensions() { @@ -328,6 +331,8 @@ void Photo::paint(Painter &p, const QRect &clip, TextSelection selection, const if (blurred->loaded()) { setPixFrom(blurred); } + } else { + _data->loadThumbnailSmall(parent()->fullId()); } } @@ -364,7 +369,12 @@ void Photo::setPixFrom(not_null image) { img = img.copy(0, (img.height() - img.width()) / 2, img.width(), img.width()).scaled(size, size, Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation); } img.setDevicePixelRatio(cRetinaFactor()); - _data->unload(); + + // In case we have inline thumbnail we can unload all images and we still + // won't get a blank image in the media viewer when the photo is opened. + if (_data->thumbnailInline() != nullptr) { + _data->unload(); + } _pix = App::pixmapFromImageInPlace(std::move(img)); }