DRM cursor scaling

Summary:
We pass the buffer scale of the cursor through QImage::devicePixelRatio.

When copying the cursor with QPainter use Qt's in-built functionality to
handle resizing the cursor pixmap as necessary to match the screen.

As we're now resizing the cursor, the hotspot needs translating from
logical to device co-ordinates.

Test Plan: Used with associated patches

Reviewers: #kwin, graesslin

Reviewed By: #kwin, graesslin

Subscribers: graesslin, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D13605
This commit is contained in:
David Edmundson 2018-06-23 18:14:50 +01:00
parent 9ff1f77e8e
commit 2cc42ecc12

View file

@ -132,6 +132,8 @@ void DrmOutput::updateCursor()
m_hasNewCursor = true;
QImage *c = m_cursor[m_cursorIndex]->image();
c->fill(Qt::transparent);
c->setDevicePixelRatio(m_scale);
QPainter p;
p.begin(c);
if (m_orientation == Qt::InvertedLandscapeOrientation) {
@ -158,6 +160,7 @@ void DrmOutput::moveCursor(const QPoint &globalPos)
hotspotMatrix.rotate(180.0f, 0.0f, 0.0f, 1.0f);
hotspotMatrix.translate(-cursorSize.width()/2.0, -cursorSize.height()/2.0);
}
hotspotMatrix.scale(m_scale);
matrix.scale(m_scale);
matrix.translate(-m_globalPos.x(), -m_globalPos.y());
const QPoint p = matrix.map(globalPos) - hotspotMatrix.map(m_backend->softwareCursorHotspot());