mirror of
https://github.com/gnif/LookingGlass.git
synced 2024-11-25 23:07:18 +00:00
[client] added initial code for rendering the cursor shape
This commit is contained in:
parent
4b4aca841c
commit
a950f7b187
@ -30,6 +30,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA
|
|||||||
(x)->deinitialize && \
|
(x)->deinitialize && \
|
||||||
(x)->is_compatible && \
|
(x)->is_compatible && \
|
||||||
(x)->on_resize && \
|
(x)->on_resize && \
|
||||||
|
(x)->on_mouse_shape && \
|
||||||
(x)->on_mouse_event && \
|
(x)->on_mouse_event && \
|
||||||
(x)->render)
|
(x)->render)
|
||||||
|
|
||||||
@ -62,11 +63,20 @@ typedef struct LG_RendererRect
|
|||||||
}
|
}
|
||||||
LG_RendererRect;
|
LG_RendererRect;
|
||||||
|
|
||||||
|
typedef enum LG_RendererCursor
|
||||||
|
{
|
||||||
|
LG_CURSOR_COLOR ,
|
||||||
|
LG_CURSOR_MONOCHROME ,
|
||||||
|
LG_CURSOR_MASKED_COLOR
|
||||||
|
}
|
||||||
|
LG_RendererCursor;
|
||||||
|
|
||||||
typedef const char * (* LG_RendererGetName )();
|
typedef const char * (* LG_RendererGetName )();
|
||||||
typedef bool (* LG_RendererInitialize )(void ** opaque, const LG_RendererParams params, const LG_RendererFormat format);
|
typedef bool (* LG_RendererInitialize )(void ** opaque, const LG_RendererParams params, const LG_RendererFormat format);
|
||||||
typedef void (* LG_RendererDeInitialize )(void * opaque);
|
typedef void (* LG_RendererDeInitialize )(void * opaque);
|
||||||
typedef bool (* LG_RendererIsCompatible )(void * opaque, const LG_RendererFormat format);
|
typedef bool (* LG_RendererIsCompatible )(void * opaque, const LG_RendererFormat format);
|
||||||
typedef void (* LG_RendererOnResize )(void * opaque, const int width, const int height, const LG_RendererRect destRect);
|
typedef void (* LG_RendererOnResize )(void * opaque, const int width, const int height, const LG_RendererRect destRect);
|
||||||
|
typedef bool (* LG_RendererOnMouseShape )(void * opaque, const LG_RendererCursor cursor, const int width, const int height, const uint8_t * data);
|
||||||
typedef bool (* LG_RendererOnMouseEvent )(void * opaque, const bool visible , const int x, const int y);
|
typedef bool (* LG_RendererOnMouseEvent )(void * opaque, const bool visible , const int x, const int y);
|
||||||
typedef bool (* LG_RendererOnFrameEvent )(void * opaque, const uint8_t * data, bool resample);
|
typedef bool (* LG_RendererOnFrameEvent )(void * opaque, const uint8_t * data, bool resample);
|
||||||
typedef bool (* LG_RendererRender )(void * opaque);
|
typedef bool (* LG_RendererRender )(void * opaque);
|
||||||
@ -78,6 +88,7 @@ typedef struct LG_Renderer
|
|||||||
LG_RendererDeInitialize deinitialize;
|
LG_RendererDeInitialize deinitialize;
|
||||||
LG_RendererIsCompatible is_compatible;
|
LG_RendererIsCompatible is_compatible;
|
||||||
LG_RendererOnResize on_resize;
|
LG_RendererOnResize on_resize;
|
||||||
|
LG_RendererOnMouseShape on_mouse_shape;
|
||||||
LG_RendererOnMouseEvent on_mouse_event;
|
LG_RendererOnMouseEvent on_mouse_event;
|
||||||
LG_RendererOnFrameEvent on_frame_event;
|
LG_RendererOnFrameEvent on_frame_event;
|
||||||
LG_RendererRender render;
|
LG_RendererRender render;
|
||||||
|
@ -317,6 +317,31 @@ int renderThread(void * unused)
|
|||||||
|
|
||||||
if (header.cursor.flags & KVMFR_CURSOR_FLAG_SHAPE)
|
if (header.cursor.flags & KVMFR_CURSOR_FLAG_SHAPE)
|
||||||
{
|
{
|
||||||
|
LG_RendererCursor c = LG_CURSOR_COLOR;
|
||||||
|
switch(header.cursor.type)
|
||||||
|
{
|
||||||
|
case CURSOR_TYPE_COLOR : c = LG_CURSOR_COLOR ; break;
|
||||||
|
case CURSOR_TYPE_MONOCHROME : c = LG_CURSOR_MONOCHROME ; break;
|
||||||
|
case CURSOR_TYPE_MASKED_COLOR: c = LG_CURSOR_MASKED_COLOR; break;
|
||||||
|
default:
|
||||||
|
DEBUG_ERROR("Invalid cursor type");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state.lgr)
|
||||||
|
{
|
||||||
|
if (!state.lgr->on_mouse_shape(
|
||||||
|
state.lgrData,
|
||||||
|
c,
|
||||||
|
header.cursor.w,
|
||||||
|
header.cursor.h,
|
||||||
|
header.cursor.shape
|
||||||
|
))
|
||||||
|
{
|
||||||
|
DEBUG_ERROR("Failed to update mouse shape");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state.lgr)
|
if (state.lgr)
|
||||||
|
@ -277,6 +277,15 @@ void lgr_opengl_on_resize(void * opaque, const int width, const int height, cons
|
|||||||
this->resizeWindow = true;
|
this->resizeWindow = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool lgr_opengl_on_mouse_shape(void * opaque, const LG_RendererCursor cursor, const int width, const int height, const uint8_t * data)
|
||||||
|
{
|
||||||
|
struct LGR_OpenGL * this = (struct LGR_OpenGL *)opaque;
|
||||||
|
if (!this || !this->initialized)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool lgr_opengl_on_mouse_event(void * opaque, const bool visible, const int x, const int y)
|
bool lgr_opengl_on_mouse_event(void * opaque, const bool visible, const int x, const int y)
|
||||||
{
|
{
|
||||||
struct LGR_OpenGL * this = (struct LGR_OpenGL *)opaque;
|
struct LGR_OpenGL * this = (struct LGR_OpenGL *)opaque;
|
||||||
@ -576,6 +585,7 @@ const LG_Renderer LGR_OpenGL =
|
|||||||
.deinitialize = lgr_opengl_deinitialize,
|
.deinitialize = lgr_opengl_deinitialize,
|
||||||
.is_compatible = lgr_opengl_is_compatible,
|
.is_compatible = lgr_opengl_is_compatible,
|
||||||
.on_resize = lgr_opengl_on_resize,
|
.on_resize = lgr_opengl_on_resize,
|
||||||
|
.on_mouse_shape = lgr_opengl_on_mouse_shape,
|
||||||
.on_mouse_event = lgr_opengl_on_mouse_event,
|
.on_mouse_event = lgr_opengl_on_mouse_event,
|
||||||
.on_frame_event = lgr_opengl_on_frame_event,
|
.on_frame_event = lgr_opengl_on_frame_event,
|
||||||
.render = lgr_opengl_render
|
.render = lgr_opengl_render
|
||||||
|
Loading…
Reference in New Issue
Block a user