[pve-devel] [PATCH vncterm] add custom cursor
Dominik Csapak
d.csapak at proxmox.com
Tue Jun 6 11:01:51 CEST 2017
instead of a black 'x' we now have a 'proper' cursor with a white edge,
to be able to see it when we are in the novnc console
Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
vncterm.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 58 insertions(+)
diff --git a/vncterm.c b/vncterm.c
index ed77f58..ff24953 100644
--- a/vncterm.c
+++ b/vncterm.c
@@ -2201,6 +2201,63 @@ new_client (rfbClientPtr client)
static char *vncticket = NULL;
+static void
+MakeRichCursor(rfbScreenInfoPtr rfbScreen)
+{
+ int w = 16,
+ h = 16;
+ rfbCursorPtr c = rfbScreen->cursor;
+ char bitmap[] =
+ " "
+ " x "
+ " xx "
+ " xxx "
+ " xxxx "
+ " xxxxx "
+ " xxxxxx "
+ " xxxxxxx "
+ " xxxxxxxx "
+ " xxxxxxxxx "
+ " xxxxxxxxxx "
+ " xxxx "
+ " xxx "
+ " xx "
+ " x "
+ " ";
+ char edge[] =
+ " "
+ " x "
+ " xx "
+ " x x "
+ " x x "
+ " x x "
+ " x x "
+ " x x "
+ " x x "
+ " x x "
+ " x xxxxxx "
+ " x x "
+ " x x "
+ " xx "
+ " x "
+ " ";
+
+ c = rfbScreen->cursor = rfbMakeXCursor(w,h,bitmap,bitmap);
+ c->richSource = (unsigned char*)calloc(w*h, 1);
+ c->cleanupRichSource = TRUE;
+
+ for(int j=0;j<h;j++) {
+ for(int i=0;i<w;i++) {
+ unsigned int pos = j*w+i;
+ if (edge[pos] == 'x') {
+ c->richSource[pos] = 15; // white
+ } else {
+ c->richSource[pos] = 0; // black
+ }
+ }
+ }
+}
+
vncTerm *
create_vncterm (int argc, char** argv, int maxx, int maxy)
{
@@ -2208,6 +2265,7 @@ create_vncterm (int argc, char** argv, int maxx, int maxy)
rfbScreenInfoPtr screen = rfbGetScreen (&argc, argv, maxx, maxy, 8, 1, 1);
screen->frameBuffer=(char*)calloc(maxx*maxy, 1);
+ MakeRichCursor(screen);
char **passwds = calloc(sizeof(char**), 2);
--
2.11.0
More information about the pve-devel
mailing list