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:
parent
9ff1f77e8e
commit
2cc42ecc12
1 changed files with 3 additions and 0 deletions
|
@ -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());
|
||||
|
|
Loading…
Reference in a new issue