Create drag pixmaps which match the device pixel ratio

This commit is contained in:
David Edmundson 2015-03-05 15:12:52 +01:00
parent 6a4d4463b8
commit 1fac8a7bba
3 changed files with 9 additions and 3 deletions

View file

@ -29,6 +29,8 @@
#include <QPainter>
#include <QTimer>
#include <QGraphicsScene>
#include <QGraphicsView>
// #define KFILEITEMLISTVIEW_DEBUG
@ -154,8 +156,10 @@ QPixmap KFileItemListView::createDragPixmap(const KItemSet& indexes) const
yCount = xCount;
}
qreal dpr = scene()->views()[0]->devicePixelRatio();
// Draw the selected items into the grid cells.
QPixmap dragPixmap(xCount * size + xCount, yCount * size + yCount);
QPixmap dragPixmap(QSize(xCount * size + xCount, yCount * size + yCount)*dpr);
dragPixmap.setDevicePixelRatio(dpr);
dragPixmap.fill(Qt::transparent);
QPainter painter(&dragPixmap);
@ -168,7 +172,7 @@ QPixmap KFileItemListView::createDragPixmap(const KItemSet& indexes) const
QIcon icon = QIcon::fromTheme(model()->data(index).value("iconName").toString());
pixmap = icon.pixmap(size, size);
} else {
KPixmapModifier::scale(pixmap, QSize(size, size));
KPixmapModifier::scale(pixmap, QSize(size, size) * dpr);
}
painter.drawPixmap(x, y, pixmap);

View file

@ -1168,7 +1168,7 @@ void KItemListController::startDragging()
const QPixmap pixmap = m_view->createDragPixmap(selectedItems);
drag->setPixmap(pixmap);
const QPoint hotSpot(pixmap.width() / 2, 0);
const QPoint hotSpot((pixmap.width() / pixmap.devicePixelRatio()) / 2, 0);
drag->setHotSpot(hotSpot);
drag->exec(Qt::MoveAction | Qt::CopyAction | Qt::LinkAction, Qt::CopyAction);

View file

@ -369,6 +369,8 @@ QPixmap KItemListWidget::createDragPixmap(const QStyleOptionGraphicsItem* option
QWidget* widget)
{
QPixmap pixmap(size().toSize());
QPixmap pixmap(size().toSize() * widget->devicePixelRatio());
pixmap.setDevicePixelRatio(widget->devicePixelRatio());
pixmap.fill(Qt::transparent);
QPainter painter(&pixmap);