Changeset View
Changeset View
Standalone View
Standalone View
lib/thumbnailview/thumbnailview.cpp
Show First 20 Lines • Show All 373 Lines • ▼ Show 20 Line(s) | 365 | { | |||
---|---|---|---|---|---|
374 | } | 374 | } | ||
375 | d->mThumbnailProvider = thumbnailProvider; | 375 | d->mThumbnailProvider = thumbnailProvider; | ||
376 | } | 376 | } | ||
377 | 377 | | |||
378 | void ThumbnailView::updateThumbnailSize() | 378 | void ThumbnailView::updateThumbnailSize() | ||
379 | { | 379 | { | ||
380 | QSize value = d->mThumbnailSize; | 380 | QSize value = d->mThumbnailSize; | ||
381 | // mWaitingThumbnail | 381 | // mWaitingThumbnail | ||
382 | const auto dpr = qApp->devicePixelRatio(); | ||||
382 | int waitingThumbnailSize; | 383 | int waitingThumbnailSize; | ||
383 | if (value.width() > 64) { | 384 | if (value.width() > 64 * dpr) { | ||
384 | waitingThumbnailSize = 48; | 385 | waitingThumbnailSize = 48 * dpr; | ||
385 | } else { | 386 | } else { | ||
386 | waitingThumbnailSize = 32; | 387 | waitingThumbnailSize = 32 * dpr; | ||
387 | } | 388 | } | ||
388 | QPixmap icon = DesktopIcon(QStringLiteral("chronometer"), waitingThumbnailSize); | 389 | QPixmap icon = DesktopIcon(QStringLiteral("chronometer"), waitingThumbnailSize); | ||
389 | QPixmap pix(value); | 390 | QPixmap pix(value); | ||
390 | pix.fill(Qt::transparent); | 391 | pix.fill(Qt::transparent); | ||
391 | QPainter painter(&pix); | 392 | QPainter painter(&pix); | ||
392 | painter.setOpacity(0.5); | 393 | painter.setOpacity(0.5); | ||
393 | painter.drawPixmap((value.width() - icon.width()) / 2, (value.height() - icon.height()) / 2, icon); | 394 | painter.drawPixmap((value.width() - icon.width()) / dpr / 2, (value.height() - icon.height()) / dpr / 2, icon); | ||
394 | painter.end(); | 395 | painter.end(); | ||
395 | d->mWaitingThumbnail = pix; | 396 | d->mWaitingThumbnail = pix; | ||
397 | d->mWaitingThumbnail.setDevicePixelRatio(dpr); | ||||
396 | 398 | | |||
397 | // Stop smoothing | 399 | // Stop smoothing | ||
398 | d->mSmoothThumbnailTimer.stop(); | 400 | d->mSmoothThumbnailTimer.stop(); | ||
399 | d->mSmoothThumbnailQueue.clear(); | 401 | d->mSmoothThumbnailQueue.clear(); | ||
400 | 402 | | |||
401 | // Clear adjustedPixes | 403 | // Clear adjustedPixes | ||
402 | ThumbnailForUrl::iterator | 404 | ThumbnailForUrl::iterator | ||
403 | it = d->mThumbnailForUrl.begin(), | 405 | it = d->mThumbnailForUrl.begin(), | ||
404 | end = d->mThumbnailForUrl.end(); | 406 | end = d->mThumbnailForUrl.end(); | ||
405 | for (; it != end; ++it) { | 407 | for (; it != end; ++it) { | ||
406 | it.value().mAdjustedPix = QPixmap(); | 408 | it.value().mAdjustedPix = QPixmap(); | ||
407 | } | 409 | } | ||
408 | 410 | | |||
409 | emit thumbnailSizeChanged(value); | 411 | emit thumbnailSizeChanged(value / qApp->devicePixelRatio()); | ||
410 | emit thumbnailWidthChanged(value.width()); | 412 | emit thumbnailWidthChanged(value.width() / qApp->devicePixelRatio()); | ||
411 | if (d->mScaleMode != ScaleToFit) { | 413 | if (d->mScaleMode != ScaleToFit) { | ||
412 | scheduleDelayedItemsLayout(); | 414 | scheduleDelayedItemsLayout(); | ||
413 | } | 415 | } | ||
414 | d->scheduleThumbnailGeneration(); | 416 | d->scheduleThumbnailGeneration(); | ||
415 | } | 417 | } | ||
416 | 418 | | |||
417 | void ThumbnailView::setThumbnailWidth(int width) | 419 | void ThumbnailView::setThumbnailWidth(int width) | ||
418 | { | 420 | { | ||
419 | if(d->mThumbnailSize.width() == width) { | 421 | const auto dpr = qApp->devicePixelRatio(); | ||
422 | const int newWidth = width * dpr; | ||||
423 | if(d->mThumbnailSize.width() == newWidth) { | ||||
420 | return; | 424 | return; | ||
421 | } | 425 | } | ||
422 | int height = round((qreal)width / d->mThumbnailAspectRatio); | 426 | int height = round((qreal)newWidth / d->mThumbnailAspectRatio); | ||
423 | d->mThumbnailSize = QSize(width, height); | 427 | d->mThumbnailSize = QSize(newWidth, height); | ||
424 | updateThumbnailSize(); | 428 | updateThumbnailSize(); | ||
425 | } | 429 | } | ||
426 | 430 | | |||
427 | void ThumbnailView::setThumbnailAspectRatio(qreal ratio) | 431 | void ThumbnailView::setThumbnailAspectRatio(qreal ratio) | ||
428 | { | 432 | { | ||
429 | if(d->mThumbnailAspectRatio == ratio) { | 433 | if(d->mThumbnailAspectRatio == ratio) { | ||
430 | return; | 434 | return; | ||
431 | } | 435 | } | ||
432 | d->mThumbnailAspectRatio = ratio; | 436 | d->mThumbnailAspectRatio = ratio; | ||
433 | int width = d->mThumbnailSize.width(); | 437 | int width = d->mThumbnailSize.width(); | ||
434 | int height = round((qreal)width / d->mThumbnailAspectRatio); | 438 | int height = round((qreal)width / d->mThumbnailAspectRatio); | ||
435 | d->mThumbnailSize = QSize(width, height); | 439 | d->mThumbnailSize = QSize(width, height); | ||
436 | updateThumbnailSize(); | 440 | updateThumbnailSize(); | ||
437 | } | 441 | } | ||
438 | 442 | | |||
439 | qreal ThumbnailView::thumbnailAspectRatio() const | 443 | qreal ThumbnailView::thumbnailAspectRatio() const | ||
440 | { | 444 | { | ||
441 | return d->mThumbnailAspectRatio; | 445 | return d->mThumbnailAspectRatio; | ||
442 | } | 446 | } | ||
443 | 447 | | |||
444 | QSize ThumbnailView::thumbnailSize() const | 448 | QSize ThumbnailView::thumbnailSize() const | ||
445 | { | 449 | { | ||
446 | return d->mThumbnailSize; | 450 | return d->mThumbnailSize / qApp->devicePixelRatio(); | ||
447 | } | 451 | } | ||
448 | 452 | | |||
449 | void ThumbnailView::setThumbnailViewHelper(AbstractThumbnailViewHelper* helper) | 453 | void ThumbnailView::setThumbnailViewHelper(AbstractThumbnailViewHelper* helper) | ||
450 | { | 454 | { | ||
451 | d->mThumbnailViewHelper = helper; | 455 | d->mThumbnailViewHelper = helper; | ||
452 | } | 456 | } | ||
453 | 457 | | |||
454 | AbstractThumbnailViewHelper* ThumbnailView::thumbnailViewHelper() const | 458 | AbstractThumbnailViewHelper* ThumbnailView::thumbnailViewHelper() const | ||
▲ Show 20 Lines • Show All 210 Lines • ▼ Show 20 Line(s) | 668 | if (thumbnail.mRough && !d->mSmoothThumbnailQueue.contains(url)) { | |||
665 | d->mSmoothThumbnailQueue.enqueue(url); | 669 | d->mSmoothThumbnailQueue.enqueue(url); | ||
666 | if (!d->mSmoothThumbnailTimer.isActive()) { | 670 | if (!d->mSmoothThumbnailTimer.isActive()) { | ||
667 | d->mSmoothThumbnailTimer.start(SMOOTH_DELAY); | 671 | d->mSmoothThumbnailTimer.start(SMOOTH_DELAY); | ||
668 | } | 672 | } | ||
669 | } | 673 | } | ||
670 | if (fullSize) { | 674 | if (fullSize) { | ||
671 | *fullSize = thumbnail.mRealFullSize; | 675 | *fullSize = thumbnail.mRealFullSize; | ||
672 | } | 676 | } | ||
677 | thumbnail.mAdjustedPix.setDevicePixelRatio(qApp->devicePixelRatio()); | ||||
673 | return thumbnail.mAdjustedPix; | 678 | return thumbnail.mAdjustedPix; | ||
674 | } | 679 | } | ||
675 | 680 | | |||
676 | bool ThumbnailView::isModified(const QModelIndex& index) const | 681 | bool ThumbnailView::isModified(const QModelIndex& index) const | ||
677 | { | 682 | { | ||
678 | if (!d->mDocumentInfoProvider) { | 683 | if (!d->mDocumentInfoProvider) { | ||
679 | return false; | 684 | return false; | ||
680 | } | 685 | } | ||
▲ Show 20 Lines • Show All 124 Lines • ▼ Show 20 Line(s) | |||||
805 | { | 810 | { | ||
806 | // If we don't adjust the single step, the wheel scroll exactly one item up | 811 | // If we don't adjust the single step, the wheel scroll exactly one item up | ||
807 | // and down, giving the impression that the items do not move but only | 812 | // and down, giving the impression that the items do not move but only | ||
808 | // their label changes. | 813 | // their label changes. | ||
809 | // For some reason it is necessary to set the step here: setting it in | 814 | // For some reason it is necessary to set the step here: setting it in | ||
810 | // setThumbnailSize() does not work | 815 | // setThumbnailSize() does not work | ||
811 | //verticalScrollBar()->setSingleStep(d->mThumbnailSize / 5); | 816 | //verticalScrollBar()->setSingleStep(d->mThumbnailSize / 5); | ||
812 | if (event->modifiers() == Qt::ControlModifier) { | 817 | if (event->modifiers() == Qt::ControlModifier) { | ||
813 | int width = d->mThumbnailSize.width() + (event->delta() > 0 ? 1 : -1) * WHEEL_ZOOM_MULTIPLIER; | 818 | int width = thumbnailSize().width() + (event->delta() > 0 ? 1 : -1) * WHEEL_ZOOM_MULTIPLIER; | ||
814 | width = qMax(int(MinThumbnailSize), qMin(width, int(MaxThumbnailSize))); | 819 | width = qMax(int(MinThumbnailSize), qMin(width, int(MaxThumbnailSize))); | ||
815 | setThumbnailWidth(width); | 820 | setThumbnailWidth(width); | ||
816 | } else { | 821 | } else { | ||
817 | QListView::wheelEvent(event); | 822 | QListView::wheelEvent(event); | ||
818 | } | 823 | } | ||
819 | } | 824 | } | ||
820 | 825 | | |||
821 | void ThumbnailView::mousePressEvent(QMouseEvent* event) | 826 | void ThumbnailView::mousePressEvent(QMouseEvent* event) | ||
▲ Show 20 Lines • Show All 210 Lines • Show Last 20 Lines |