1
mirror of https://invent.kde.org/network/falkon.git synced 2024-09-21 17:52:10 +02:00

More memory efficient and faster preview generation.

There is no need to allocate a very large image buffer, just enough for
the thumbnail preview. For a little filtering, use the two-stage
scaling. See http://labs.qt.nokia.com/2009/01/26/creating-thumbnail-preview/
for the details.

This tecnique is adopted from my live preview implementation for Arora:
http://ariya.ofilabs.com/2008/07/be-my-mirror-my-sword-and-shield.html.
This commit is contained in:
Ariya Hidayat 2012-04-11 21:24:51 -07:00
parent 35ab9cb25f
commit 7d1f8a4ae4

View File

@ -264,16 +264,21 @@ QPixmap WebTab::renderTabPreview()
renderWidth -= verticalScrollBarWidth;
renderHeight -= horizontalScrollBarHeight;
QPixmap pageImage(renderWidth, renderHeight);
const int previewWidth = 230;
const int previewHeight = 150;
qreal scalingFactor = 2 * static_cast<qreal>(previewWidth) / renderWidth;
QPixmap pageImage(2 * previewWidth, 2 * previewHeight);
pageImage.fill(Qt::transparent);
QPainter p(&pageImage);
p.scale(scalingFactor, scalingFactor);
m_view->page()->mainFrame()->render(&p, QWebFrame::ContentsLayer);
p.end();
page->setViewportSize(oldSize);
return pageImage.scaled(230, 150, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
return pageImage.scaled(previewWidth, previewHeight, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
}
void WebTab::showNotification(QWidget* notif)