Fixed always loading 1x, 2x and 3x images

This commit is contained in:
fourtf 2019-08-13 13:42:38 +02:00
parent 294c2aecdc
commit 6274c05520
5 changed files with 19 additions and 10 deletions

View file

@ -275,7 +275,14 @@ const Url &Image::url() const
return this->url_;
}
boost::optional<QPixmap> Image::pixmap() const
bool Image::loaded() const
{
assertInGuiThread();
return bool(this->frames_->current());
}
boost::optional<QPixmap> Image::pixmapOrLoad() const
{
assertInGuiThread();

View file

@ -53,7 +53,9 @@ public:
static ImagePtr getEmpty();
const Url &url() const;
boost::optional<QPixmap> pixmap() const;
bool loaded() const;
// either returns the current pixmap, or triggers loading it (lazy loading)
boost::optional<QPixmap> pixmapOrLoad() const;
qreal scale() const;
bool isEmpty() const;
int width() const;

View file

@ -84,16 +84,16 @@ const ImagePtr &ImageSet::getImage(float scale) const
return this->imageX1_;
}();
// prefere other image if selected image is not loaded yet
if (result->pixmap())
// prefer other image if selected image is not loaded yet
if (result->loaded())
return result;
else if (this->imageX1_->pixmap())
else if (this->imageX1_->loaded())
return this->imageX1_;
else if (this->imageX2_ && !this->imageX2_->isEmpty() &&
this->imageX2_->pixmap())
this->imageX2_->loaded())
return this->imageX2_;
else if (this->imageX3_ && !this->imageX3_->isEmpty() &&
this->imageX3_->pixmap())
this->imageX3_->loaded())
return this->imageX3_;
else
return result;

View file

@ -120,7 +120,7 @@ void ImageLayoutElement::paint(QPainter &painter)
return;
}
auto pixmap = this->image_->pixmap();
auto pixmap = this->image_->pixmapOrLoad();
if (pixmap && !this->image_->animated())
{
// fourtf: make it use qreal values
@ -137,7 +137,7 @@ void ImageLayoutElement::paintAnimated(QPainter &painter, int yOffset)
if (this->image_->animated())
{
if (auto pixmap = this->image_->pixmap())
if (auto pixmap = this->image_->pixmapOrLoad())
{
auto rect = this->getRect();
rect.moveTop(rect.y() + yOffset);

View file

@ -17,7 +17,7 @@ TooltipPreviewImage::TooltipPreviewImage()
auto tooltipWidget = TooltipWidget::getInstance();
if (this->image_ && !tooltipWidget->isHidden())
{
auto pixmap = this->image_->pixmap();
auto pixmap = this->image_->pixmapOrLoad();
if (pixmap)
{
tooltipWidget->setImage(*pixmap);