4#include <freerdp/gdi/gdi.h>
5#include <QLoggingCategory>
6#include "BackendFreeRDP.h"
8static Q_LOGGING_CATEGORY(log,
"FreeRDP.Cursor")
14int CCursorFreeRDP::RegisterPointer(rdpGraphics *graphics)
16 rdpPointer* pointer = NULL;
17 if (!(pointer = (rdpPointer*)calloc(1,
sizeof(rdpPointer))))
20 pointer->New = CbPointerNew;
21 pointer->Free = CbPointerFree;
22 pointer->Set = CbPointerSet;
23 pointer->SetNull = CbPointerSetNull;
24 pointer->SetDefault = CbPointerSetDefault;
25 pointer->SetPosition = CbPointerSetPosition;
26 graphics_register_pointer(graphics, pointer);
31BOOL CCursorFreeRDP::CbPointerNew(rdpContext *context, rdpPointer *pointer)
34 CBackendFreeRDP* pThis = ((CBackendFreeRDP::ClientContext*)context)->pThis;
35 return pThis ? pThis->m_Cursor.
OnNew(context, pointer) :
false;
38void CCursorFreeRDP::CbPointerFree(rdpContext* context, rdpPointer* pointer)
41 CBackendFreeRDP* pThis = ((CBackendFreeRDP::ClientContext*)context)->pThis;
43 pThis->m_Cursor.OnFree(context, pointer);
46BOOL CCursorFreeRDP::CbPointerSet(rdpContext *context,
47 #
if FREERDP_VERSION_MAJOR >= 3
50 const rdpPointer *pointer
55 CBackendFreeRDP* pThis = ((CBackendFreeRDP::ClientContext*)context)->pThis;
56 return pThis ? pThis->m_Cursor.
OnSet(context, pointer) :
false;
59BOOL CCursorFreeRDP::CbPointerSetNull(rdpContext *context)
62 CBackendFreeRDP* pThis = ((CBackendFreeRDP::ClientContext*)context)->pThis;
63 return pThis ? pThis->m_Cursor.OnSetNull(context) :
false;
66BOOL CCursorFreeRDP::CbPointerSetDefault(rdpContext *context)
69 CBackendFreeRDP* pThis = ((CBackendFreeRDP::ClientContext*)context)->pThis;
70 return pThis ? pThis->m_Cursor.OnSetDefault(context) :
false;
73BOOL CCursorFreeRDP::CbPointerSetPosition(rdpContext *context, UINT32 x, UINT32 y)
76 CBackendFreeRDP* pThis = ((CBackendFreeRDP::ClientContext*)context)->pThis;
77 return pThis ? pThis->m_Cursor.OnSetPosition(context, x, y) :
false;
82 qDebug(log) <<
"onNew:" << pointer->xPos << pointer->yPos << pointer->width << pointer->height;
84 QImage cursor(pointer->width, pointer->height, QImage::Format_ARGB32);
92 bRet = freerdp_image_copy_from_pointer_data(cursor.bits(),
93 CBackendFreeRDP::GetImageFormat(cursor.format()),
95 0, 0, cursor.width(), cursor.height(),
97 pointer->lengthXorMask,
99 pointer->lengthAndMask,
101 &context->gdi->palette);
104 emit m_pConnect->sigUpdateCursor(
105 QCursor(QPixmap::fromImage(m_Cursor), pointer->xPos, pointer->yPos));
110void CCursorFreeRDP::OnFree(rdpContext* context, rdpPointer* pointer)
112 qDebug(log) <<
"OnFree";
119 qDebug(log) <<
"OnSet:" << pointer->xPos << pointer->yPos << pointer->width << pointer->height;
121 QImage cursor(pointer->width, pointer->height, QImage::Format_ARGB32);
129 bRet = freerdp_image_copy_from_pointer_data(cursor.bits(),
130 CBackendFreeRDP::GetImageFormat(cursor.format()),
132 0, 0, cursor.width(), cursor.height(),
133 pointer->xorMaskData,
134 pointer->lengthXorMask,
135 pointer->andMaskData,
136 pointer->lengthAndMask,
138 &context->gdi->palette);
141 emit m_pConnect->sigUpdateCursor(
142 QCursor(QPixmap::fromImage(m_Cursor), pointer->xPos, pointer->yPos));
147BOOL CCursorFreeRDP::OnSetDefault(rdpContext *context)
149 qDebug(log) <<
"OnSetDefault";
152 emit m_pConnect->sigUpdateCursor(QCursor());
156BOOL CCursorFreeRDP::OnSetNull(rdpContext *context)
158 qDebug(log) <<
"OnSetNull";
161 emit m_pConnect->sigUpdateCursor(QCursor(Qt::BlankCursor));
165BOOL CCursorFreeRDP::OnSetPosition(rdpContext *context, UINT32 x, UINT32 y)
167 qDebug(log) <<
"OnSetPosition" << x << y;
169 emit m_pConnect->sigUpdateCursorPosition(QPoint(x, y));
BOOL OnNew(rdpContext *context, rdpPointer *pointer)
BOOL OnSet(rdpContext *context, const rdpPointer *pointer)