KShare/platformspecifics/x11/x11backend.cpp

30 lines
1.2 KiB
C++
Raw Normal View History

2017-05-13 11:03:46 +02:00
#include "x11backend.hpp"
#include <QPixmap>
#include <QX11Info>
#include <unistd.h>
2017-05-13 11:03:46 +02:00
#include <xcb/xcb_cursor.h>
#include <xcb/xcb_util.h>
#include <xcb/xfixes.h>
2017-05-13 23:33:36 +02:00
std::tuple<QPoint, QPixmap> PlatformBackend::getCursor() {
2017-05-13 11:03:46 +02:00
xcb_connection_t *connection = QX11Info::connection();
xcb_xfixes_get_cursor_image_cookie_t cursorCookie = xcb_xfixes_get_cursor_image_unchecked(connection);
QScopedPointer<xcb_xfixes_get_cursor_image_reply_t> cursorReply(xcb_xfixes_get_cursor_image_reply(connection, cursorCookie, NULL));
if (cursorReply.isNull()) {
2017-05-13 23:33:36 +02:00
return std::tuple<QPoint, QPixmap>(QPoint(0, 0), QPixmap());
2017-05-13 11:03:46 +02:00
}
quint32 *pixels = xcb_xfixes_get_cursor_image_cursor_image(cursorReply.data());
if (!pixels) {
2017-05-13 23:33:36 +02:00
return std::tuple<QPoint, QPixmap>(QPoint(0, 0), QPixmap());
2017-05-13 11:03:46 +02:00
}
2017-05-13 23:33:36 +02:00
return std::tuple<QPoint, QPixmap>(QPoint(cursorReply->xhot, cursorReply->yhot),
QPixmap::fromImage(QImage((quint8 *)pixels, cursorReply->width, cursorReply->height,
QImage::Format_ARGB32_Premultiplied)));
2017-05-13 11:03:46 +02:00
}
pid_t PlatformBackend::pid() {
return getpid();
}