plugins/screencast: Fix a glitch in cursor bitmap
In 52bc46069e
, some code was shuffled
around to improve code readability. However, it was overlooked that
spa_meta_bitmap->offset is initialized too late, after QImage dest is
constructed. That's the reason why the left edge of the cursor is
wrapped around horizontally.
This change fixes the cursor glitch by ensuring that
spa_meta_bitmap->offset is initialized to proper value before getting
pointer to bitmap data. While on this, this change also moves
spa_meta_bitmap initialization code around to make spa_meta_bitmap setup
look less like a bowl of spaghetti, i.e. spa_meta_bitmap is initialized
first, and QImage dest is created with spa_meta_bitmap's values.
This commit is contained in:
parent
8e19f3149e
commit
f26c6ad5be
1 changed files with 10 additions and 7 deletions
|
@ -641,9 +641,18 @@ void ScreenCastStream::sendCursorData(Cursor *cursor, spa_meta_cursor *spa_meta_
|
|||
struct spa_meta_bitmap *spa_meta_bitmap = SPA_MEMBER (spa_meta_cursor,
|
||||
spa_meta_cursor->bitmap_offset,
|
||||
struct spa_meta_bitmap);
|
||||
spa_meta_bitmap->format = SPA_VIDEO_FORMAT_RGBA;
|
||||
spa_meta_bitmap->offset = sizeof(struct spa_meta_bitmap);
|
||||
spa_meta_bitmap->size.width = std::min(m_cursor.bitmapSize.width(), image.width());
|
||||
spa_meta_bitmap->size.height = std::min(m_cursor.bitmapSize.height(), image.height());
|
||||
spa_meta_bitmap->stride = spa_meta_bitmap->size.width * 4;
|
||||
|
||||
uint8_t *bitmap_data = SPA_MEMBER (spa_meta_bitmap, spa_meta_bitmap->offset, uint8_t);
|
||||
QImage dest(bitmap_data, std::min(m_cursor.bitmapSize.width(), image.width()), std::min(m_cursor.bitmapSize.height(), image.height()), QImage::Format_RGBA8888_Premultiplied);
|
||||
QImage dest(bitmap_data,
|
||||
spa_meta_bitmap->size.width,
|
||||
spa_meta_bitmap->size.height,
|
||||
spa_meta_bitmap->stride,
|
||||
QImage::Format_RGBA8888_Premultiplied);
|
||||
dest.setDevicePixelRatio(m_cursor.scale);
|
||||
dest.fill(Qt::transparent);
|
||||
|
||||
|
@ -651,12 +660,6 @@ void ScreenCastStream::sendCursorData(Cursor *cursor, spa_meta_cursor *spa_meta_
|
|||
QPainter painter(&dest);
|
||||
painter.drawImage(QPoint(), image);
|
||||
}
|
||||
|
||||
spa_meta_bitmap->format = SPA_VIDEO_FORMAT_RGBA;
|
||||
spa_meta_bitmap->offset = sizeof (struct spa_meta_bitmap);
|
||||
spa_meta_bitmap->size.width = dest.width();
|
||||
spa_meta_bitmap->size.height = dest.height();
|
||||
spa_meta_bitmap->stride = dest.bytesPerLine();
|
||||
}
|
||||
|
||||
void ScreenCastStream::setCursorMode(KWaylandServer::ScreencastV1Interface::CursorMode mode, qreal scale, const QRect &viewport)
|
||||
|
|
Loading…
Reference in a new issue