mirror of
https://github.com/gnif/LookingGlass.git
synced 2025-04-29 01:56:27 +00:00
[c-host] inform the client if we have positional cursor information
This commit is contained in:
parent
b4cf8f76c8
commit
b7e4426002
@ -61,6 +61,7 @@ CaptureFrame;
|
|||||||
|
|
||||||
typedef struct CapturePointer
|
typedef struct CapturePointer
|
||||||
{
|
{
|
||||||
|
bool positionUpdate;
|
||||||
int x, y;
|
int x, y;
|
||||||
bool visible;
|
bool visible;
|
||||||
|
|
||||||
@ -94,4 +95,4 @@ typedef struct CaptureInterface
|
|||||||
CaptureResult (*waitFrame )(CaptureFrame * frame);
|
CaptureResult (*waitFrame )(CaptureFrame * frame);
|
||||||
CaptureResult (*getFrame )(FrameBuffer * frame);
|
CaptureResult (*getFrame )(FrameBuffer * frame);
|
||||||
}
|
}
|
||||||
CaptureInterface;
|
CaptureInterface;
|
||||||
|
@ -710,9 +710,15 @@ static CaptureResult dxgi_capture()
|
|||||||
frameInfo.PointerPosition.Visible != this->lastPointerVisible
|
frameInfo.PointerPosition.Visible != this->lastPointerVisible
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
pointer.positionUpdate = true;
|
||||||
this->lastPointerX = frameInfo.PointerPosition.Position.x;
|
this->lastPointerX = frameInfo.PointerPosition.Position.x;
|
||||||
this->lastPointerY = frameInfo.PointerPosition.Position.y;
|
this->lastPointerY = frameInfo.PointerPosition.Position.y;
|
||||||
this->lastPointerVisible = frameInfo.PointerPosition.Visible;
|
this->lastPointerVisible = frameInfo.PointerPosition.Visible;
|
||||||
|
|
||||||
|
pointer.x = this->lastPointerX;
|
||||||
|
pointer.y = this->lastPointerY;
|
||||||
|
pointer.visible = this->lastPointerVisible;
|
||||||
|
|
||||||
postPointer = true;
|
postPointer = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -754,12 +760,7 @@ static CaptureResult dxgi_capture()
|
|||||||
|
|
||||||
// post back the pointer information
|
// post back the pointer information
|
||||||
if (postPointer)
|
if (postPointer)
|
||||||
{
|
|
||||||
pointer.x = this->lastPointerX;
|
|
||||||
pointer.y = this->lastPointerY;
|
|
||||||
pointer.visible = this->lastPointerVisible;
|
|
||||||
this->postPointerBufferFn(pointer);
|
this->postPointerBufferFn(pointer);
|
||||||
}
|
|
||||||
|
|
||||||
return CAPTURE_RESULT_OK;
|
return CAPTURE_RESULT_OK;
|
||||||
}
|
}
|
||||||
@ -868,4 +869,4 @@ struct CaptureInterface Capture_DXGI =
|
|||||||
.capture = dxgi_capture,
|
.capture = dxgi_capture,
|
||||||
.waitFrame = dxgi_waitFrame,
|
.waitFrame = dxgi_waitFrame,
|
||||||
.getFrame = dxgi_getFrame
|
.getFrame = dxgi_getFrame
|
||||||
};
|
};
|
||||||
|
@ -316,9 +316,9 @@ static int pointerThread(void * unused)
|
|||||||
if (this->stop)
|
if (this->stop)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
CaptureResult result;
|
CaptureResult result;
|
||||||
CapturePointer pointer = { 0 };
|
CapturePointer pointer = { 0 };
|
||||||
pointer.shapeUpdate = false;
|
|
||||||
if (this->seperateCursor && events[1])
|
if (this->seperateCursor && events[1])
|
||||||
{
|
{
|
||||||
void * data;
|
void * data;
|
||||||
@ -341,9 +341,13 @@ static int pointerThread(void * unused)
|
|||||||
this->mouseHotY = pointer.y;
|
this->mouseHotY = pointer.y;
|
||||||
}
|
}
|
||||||
|
|
||||||
pointer.visible = this->mouseVisible;
|
if (events[0])
|
||||||
pointer.x = this->mouseX - this->mouseHotX;
|
{
|
||||||
pointer.y = this->mouseY - this->mouseHotY;
|
pointer.positionUpdate = true;
|
||||||
|
pointer.visible = this->mouseVisible;
|
||||||
|
pointer.x = this->mouseX - this->mouseHotX;
|
||||||
|
pointer.y = this->mouseY - this->mouseHotY;
|
||||||
|
}
|
||||||
|
|
||||||
this->postPointerBufferFn(pointer);
|
this->postPointerBufferFn(pointer);
|
||||||
}
|
}
|
||||||
@ -365,4 +369,4 @@ struct CaptureInterface Capture_NVFBC =
|
|||||||
.capture = nvfbc_capture,
|
.capture = nvfbc_capture,
|
||||||
.waitFrame = nvfbc_waitFrame,
|
.waitFrame = nvfbc_waitFrame,
|
||||||
.getFrame = nvfbc_getFrame
|
.getFrame = nvfbc_getFrame
|
||||||
};
|
};
|
||||||
|
@ -312,10 +312,16 @@ void capturePostPointerBuffer(CapturePointer pointer)
|
|||||||
app.pointerIndex = 0;
|
app.pointerIndex = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t flags = 0;
|
||||||
KVMFRCursor *cursor = lgmpHostMemPtr(mem);
|
KVMFRCursor *cursor = lgmpHostMemPtr(mem);
|
||||||
cursor->x = pointer.x;
|
|
||||||
cursor->y = pointer.y;
|
if (pointer.positionUpdate)
|
||||||
cursor->visible = pointer.visible;
|
{
|
||||||
|
flags |= CURSOR_FLAG_POSITION;
|
||||||
|
cursor->x = pointer.x;
|
||||||
|
cursor->y = pointer.y;
|
||||||
|
cursor->visible = pointer.visible;
|
||||||
|
}
|
||||||
|
|
||||||
if (pointer.shapeUpdate)
|
if (pointer.shapeUpdate)
|
||||||
{
|
{
|
||||||
@ -337,11 +343,11 @@ void capturePostPointerBuffer(CapturePointer pointer)
|
|||||||
app.pointerShapeValid = true;
|
app.pointerShapeValid = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const uint32_t sendShape =
|
if ((pointer.shapeUpdate || newClient) && app.pointerShapeValid)
|
||||||
((pointer.shapeUpdate || newClient) && app.pointerShapeValid) ? 1 : 0;
|
flags |= CURSOR_FLAG_SHAPE;
|
||||||
|
|
||||||
LGMP_STATUS status;
|
LGMP_STATUS status;
|
||||||
while ((status = lgmpHostQueuePost(app.pointerQueue, sendShape, mem)) != LGMP_OK)
|
while ((status = lgmpHostQueuePost(app.pointerQueue, flags, mem)) != LGMP_OK)
|
||||||
{
|
{
|
||||||
if (status == LGMP_ERR_QUEUE_FULL)
|
if (status == LGMP_ERR_QUEUE_FULL)
|
||||||
continue;
|
continue;
|
||||||
|
@ -34,6 +34,13 @@ typedef enum FrameType
|
|||||||
}
|
}
|
||||||
FrameType;
|
FrameType;
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
CURSOR_FLAG_POSITION = 0x1,
|
||||||
|
CURSOR_FLAG_SHAPE = 0x2
|
||||||
|
};
|
||||||
|
typedef uint32_t KVMFRCursorFlags;
|
||||||
|
|
||||||
typedef enum CursorType
|
typedef enum CursorType
|
||||||
{
|
{
|
||||||
CURSOR_TYPE_COLOR ,
|
CURSOR_TYPE_COLOR ,
|
||||||
@ -55,11 +62,11 @@ KVMFRCursor;
|
|||||||
|
|
||||||
typedef struct KVMFRFrame
|
typedef struct KVMFRFrame
|
||||||
{
|
{
|
||||||
FrameType type; // the frame data type
|
FrameType type; // the frame data type
|
||||||
uint32_t width; // the width
|
uint32_t width; // the width
|
||||||
uint32_t height; // the height
|
uint32_t height; // the height
|
||||||
uint32_t stride; // the row stride (zero if compressed data)
|
uint32_t stride; // the row stride (zero if compressed data)
|
||||||
uint32_t pitch; // the row pitch (stride in bytes or the compressed frame size)
|
uint32_t pitch; // the row pitch (stride in bytes or the compressed frame size)
|
||||||
uint32_t offset; // offset from the start of this header to the FrameBuffer header
|
uint32_t offset; // offset from the start of this header to the FrameBuffer header
|
||||||
}
|
}
|
||||||
KVMFRFrame;
|
KVMFRFrame;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user