+
+
+void ToolTipManager::startPreviewJob()
+{
+ m_generatingPreview = true;
+ KIO::PreviewJob* job = KIO::filePreview(KUrl::List() << m_item.url(),
+ PREVIEW_WIDTH,
+ PREVIEW_HEIGHT);
+ job->setIgnoreMaximumSize(true);
+
+ connect(job, SIGNAL(gotPreview(const KFileItem&, const QPixmap&)),
+ this, SLOT(setPreviewPix(const KFileItem&, const QPixmap&)));
+ connect(job, SIGNAL(failed(const KFileItem&)),
+ this, SLOT(previewFailed(const KFileItem&)));
+}
+
+
+void ToolTipManager::setPreviewPix(const KFileItem& item,
+ const QPixmap& pixmap)
+{
+ // If the url has changed, don't do anything.
+ if ( m_item.url().url() == item.url().url() )
+ {
+ QPixmap icon = pixmap;
+ // only paint borders if the pixmap is opaque
+ if (!icon.hasAlphaChannel())
+ {
+ // border painter (adapted from dolphin/src/iconmanager.cpp)
+ // the frame is painted on top of the pixmap, this is needed to keep
+ // the text preview visually nice (the previewer adds ugly borders)
+ QPainter painter;
+ // make a buffer pixmap, tends to crash when 'icon' is directly painted ...
+ QPixmap framedIcon(icon.size().width(), pixmap.size().height());
+ framedIcon.fill();
+ const int width = framedIcon.width() - 1;
+ const int height = framedIcon.height() - 1;
+
+ // draw the pixmap
+ painter.begin(&framedIcon);
+ painter.drawPixmap(0,0, icon);
+
+ // draw the frame
+ painter.setRenderHint(QPainter::Antialiasing, false);
+ painter.setPen(QColor(0, 0, 0));
+ painter.drawRect(0, 0, width-0, height-1);
+ painter.drawRect(1, 1, width-2, height-2);
+ painter.setPen(QColor(255, 255, 255));
+ painter.drawRect(2, 2, width-4, height-4);
+
+ painter.end();
+ icon = framedIcon;
+
+ // provide an alpha channel for the frame
+ QPixmap alphaChannel(icon.size());
+ alphaChannel.fill();
+
+ QPainter alphaPainter(&alphaChannel);
+ alphaPainter.setBrush(Qt::NoBrush);
+ alphaPainter.setRenderHint(QPainter::Antialiasing, false);
+ alphaPainter.setPen(QColor(32, 32, 32));
+ alphaPainter.drawRect(0, 0, width, height);
+ alphaPainter.setPen(QColor(64, 64, 64));
+ alphaPainter.drawRect(1, 1, width-2, height-2);
+
+ icon.setAlphaChannel(alphaChannel);
+ }
+
+ if (m_previewIsLate) {
+ // always use the maximal width
+ QPixmap paddedImage(QSize(PREVIEW_WIDTH, icon.height()));
+ paddedImage.fill(Qt::transparent);
+ QPainter painter(&paddedImage);
+ painter.drawPixmap((PREVIEW_WIDTH - icon.width()) / 2, 0, icon);
+ m_pix = paddedImage;
+ }
+ else {
+ m_pix = icon;
+ }
+ m_preview = true;
+ m_generatingPreview = false;
+ }
+}
+
+void ToolTipManager::previewFailed(const KFileItem& item)
+{
+ Q_UNUSED(item);
+ m_generatingPreview = false;
+}
+