[client] render_queue: support cursor operations

This commit is contained in:
Quantum 2022-09-18 20:23:44 -04:00 committed by Geoffrey McRae
parent f14d135266
commit 1fd00ba26c
2 changed files with 65 additions and 1 deletions

View File

@ -103,6 +103,31 @@ void renderQueue_spiceShow(bool show)
app_invalidateWindow(true); app_invalidateWindow(true);
} }
void renderQueue_cursorState(bool visible, int x, int y, int hx, int hy)
{
RenderCommand * cmd = malloc(sizeof(*cmd));
cmd->op = CURSOR_OP_STATE;
cmd->cursorState.visible = visible;
cmd->cursorState.x = x;
cmd->cursorState.y = y;
cmd->cursorState.hx = hx;
cmd->cursorState.hy = hy;
ll_push(l_renderQueue, cmd);
}
void renderQueue_cursorImage(bool monochrome, int width, int height, int pitch,
uint8_t * data)
{
RenderCommand * cmd = malloc(sizeof(*cmd));
cmd->op = CURSOR_OP_IMAGE;
cmd->cursorImage.monochrome = monochrome;
cmd->cursorImage.width = width;
cmd->cursorImage.height = height;
cmd->cursorImage.pitch = pitch;
cmd->cursorImage.data = data;
ll_push(l_renderQueue, cmd);
}
void renderQueue_process(void) void renderQueue_process(void)
{ {
RenderCommand * cmd; RenderCommand * cmd;
@ -136,6 +161,18 @@ void renderQueue_process(void)
if (cmd->spiceShow.show) if (cmd->spiceShow.show)
overlaySplash_show(false); overlaySplash_show(false);
break; break;
case CURSOR_OP_STATE:
RENDERER(onMouseEvent, cmd->cursorState.visible, cmd->cursorState.x,
cmd->cursorState.y, cmd->cursorState.hx, cmd->cursorState.hy);
break;
case CURSOR_OP_IMAGE:
RENDERER(onMouseShape,
cmd->cursorImage.monochrome ? LG_CURSOR_MONOCHROME : LG_CURSOR_COLOR,
cmd->cursorImage.width, cmd->cursorImage.height,
cmd->cursorImage.pitch, cmd->cursorImage.data);
free(cmd->cursorImage.data);
} }
free(cmd); free(cmd);
} }

View File

@ -27,7 +27,9 @@ typedef struct
SPICE_OP_CONFIGURE, SPICE_OP_CONFIGURE,
SPICE_OP_DRAW_FILL, SPICE_OP_DRAW_FILL,
SPICE_OP_DRAW_BITMAP, SPICE_OP_DRAW_BITMAP,
SPICE_OP_SHOW SPICE_OP_SHOW,
CURSOR_OP_STATE,
CURSOR_OP_IMAGE,
} }
op; op;
@ -62,6 +64,26 @@ typedef struct
bool show; bool show;
} }
spiceShow; spiceShow;
struct
{
bool visible;
int x;
int y;
int hx;
int hy;
}
cursorState;
struct
{
bool monochrome;
int width;
int height;
int pitch;
uint8_t * data;
}
cursorImage;
}; };
} }
RenderCommand; RenderCommand;
@ -80,3 +102,8 @@ void renderQueue_spiceDrawBitmap(int x, int y, int width, int height, int stride
void * data, bool topDown); void * data, bool topDown);
void renderQueue_spiceShow(bool show); void renderQueue_spiceShow(bool show);
void renderQueue_cursorState(bool visible, int x, int y, int hx, int hy);
void renderQueue_cursorImage(bool monochrome, int width, int height, int pitch,
uint8_t * data);