Remap the pointer in case of rotated screen
https://bugzilla.redhat.com/show_bug.cgi?id=1791804 The remapping will work only when the driver controls the placement of drawn pointer, i.e. when the input device in VM is usb-mouse and the Spice Agent is not active. Signed-off-by: Yuri Benditovich <yuri.benditovich@daynix.com> Acked-by: Marek Kedzierski <mkedzier@redhat.com>
This commit is contained in:
parent
e318b56cb8
commit
96a8fcf04f
@ -557,7 +557,31 @@ NTSTATUS QxlDod::SetPointerPosition(_In_ CONST DXGKARG_SETPOINTERPOSITION* pSetP
|
|||||||
|
|
||||||
QXL_ASSERT(pSetPointerPosition != NULL);
|
QXL_ASSERT(pSetPointerPosition != NULL);
|
||||||
QXL_ASSERT(pSetPointerPosition->VidPnSourceId < MAX_VIEWS);
|
QXL_ASSERT(pSetPointerPosition->VidPnSourceId < MAX_VIEWS);
|
||||||
|
DXGKARG_SETPOINTERPOSITION adjusted;
|
||||||
|
if (m_CurrentModes[pSetPointerPosition->VidPnSourceId].Rotation == D3DKMDT_VPPR_ROTATE90)
|
||||||
|
{
|
||||||
|
adjusted = *pSetPointerPosition;
|
||||||
|
adjusted.Y = m_CurrentModes[pSetPointerPosition->VidPnSourceId].SrcModeHeight - pSetPointerPosition->X;
|
||||||
|
adjusted.X = pSetPointerPosition->Y;
|
||||||
|
DbgPrint(TRACE_LEVEL_INFORMATION, ("%s: src %d,%d -> %d,%d\n", __FUNCTION__,
|
||||||
|
pSetPointerPosition->X, pSetPointerPosition->Y,
|
||||||
|
adjusted.X, adjusted.Y));
|
||||||
|
pSetPointerPosition = &adjusted;
|
||||||
|
}
|
||||||
|
else if (m_CurrentModes[pSetPointerPosition->VidPnSourceId].Rotation == D3DKMDT_VPPR_ROTATE180)
|
||||||
|
{
|
||||||
|
adjusted = *pSetPointerPosition;
|
||||||
|
adjusted.Y = m_CurrentModes[pSetPointerPosition->VidPnSourceId].SrcModeHeight - pSetPointerPosition->Y;
|
||||||
|
adjusted.X = m_CurrentModes[pSetPointerPosition->VidPnSourceId].SrcModeWidth - pSetPointerPosition->X;
|
||||||
|
pSetPointerPosition = &adjusted;
|
||||||
|
}
|
||||||
|
else if (m_CurrentModes[pSetPointerPosition->VidPnSourceId].Rotation == D3DKMDT_VPPR_ROTATE270)
|
||||||
|
{
|
||||||
|
adjusted = *pSetPointerPosition;
|
||||||
|
adjusted.Y = pSetPointerPosition->X;
|
||||||
|
adjusted.X = m_CurrentModes[pSetPointerPosition->VidPnSourceId].SrcModeWidth - pSetPointerPosition->Y;
|
||||||
|
pSetPointerPosition = &adjusted;
|
||||||
|
}
|
||||||
return m_pHWDevice->SetPointerPosition(pSetPointerPosition);
|
return m_pHWDevice->SetPointerPosition(pSetPointerPosition);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user