summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordscho <dscho>2001-09-27 15:42:54 +0000
committerdscho <dscho>2001-09-27 15:42:54 +0000
commit11d64787ee113b4767d0f2e96e8b2ded6999064e (patch)
tree64e26faf7d0316e840ce8bbbcf63892d42be86a5
parent080ad356d38dcb2acf3cdc4e1c30b9ee12251ba0 (diff)
downloadlibtdevnc-11d64787ee113b4767d0f2e96e8b2ded6999064e.tar.gz
libtdevnc-11d64787ee113b4767d0f2e96e8b2ded6999064e.zip
added setTranslateFunction as member of rfbScreenInfo,
cursor may be NULL (no cursor).
-rw-r--r--README5
-rw-r--r--cursor.c5
-rw-r--r--main.c1
-rw-r--r--rfb.h17
-rw-r--r--rfbserver.c2
5 files changed, 26 insertions, 4 deletions
diff --git a/README b/README
index 9b7c5ff..005650a 100644
--- a/README
+++ b/README
@@ -128,9 +128,12 @@ There is only one hook:
newClientHook(rfbClientPtr cl)
is called when a new client has connected.
-You can also override the following method:
+You can also override the following methods:
getCursorPtr(rfbClientPtr cl)
This could be used to make an animated cursor (if you really want ...)
+setTranslateFunction(rfbClientPtr cl)
+ If you insist on colour maps or something more obscure, you have to
+ implement this. Default is a trueColour mapping.
Cursor handling
---------------
diff --git a/cursor.c b/cursor.c
index 9168b31..f34a397 100644
--- a/cursor.c
+++ b/cursor.c
@@ -370,7 +370,10 @@ void rfbDrawCursor(rfbClientPtr cl)
rfbCursorPtr c=s->cursor;
int i,j,x1,x2,y1,y2,i1,j1,bpp=s->rfbServerFormat.bitsPerPixel/8,
rowstride=s->paddedWidthInBytes,
- bufSize=c->width*c->height*bpp,w=(c->width+7)/8;
+ bufSize,w;
+ if(!c) return;
+ bufSize=c->width*c->height*bpp;
+ w=(c->width+7)/8;
if(s->cursorIsDrawn)
rfbUndrawCursor(cl);
if(s->underCursorBufferLen<bufSize) {
diff --git a/main.c b/main.c
index ee97164..046909b 100644
--- a/main.c
+++ b/main.c
@@ -415,6 +415,7 @@ rfbScreenInfoPtr rfbGetScreen(int argc,char** argv,
rfbScreen->setXCutText = defaultSetXCutText;
rfbScreen->getCursorPtr = defaultGetCursorPtr;
rfbScreen->cursor = &myCursor;
+ rfbScreen->setTranslateFunction = rfbSetTranslateFunction;
rfbScreen->newClientHook = doNothingWithClient;
/* initialize client list and iterator mutex */
diff --git a/rfb.h b/rfb.h
index 207f7e1..f17303b 100644
--- a/rfb.h
+++ b/rfb.h
@@ -91,6 +91,7 @@ typedef void (*KbdReleaseAllKeysProcPtr) (struct rfbClientRec* cl);
typedef void (*PtrAddEventProcPtr) (int buttonMask, int x, int y, struct rfbClientRec* cl);
typedef void (*SetXCutTextProcPtr) (char* str,int len, struct rfbClientRec* cl);
typedef struct rfbCursor* (*GetCursorProcPtr) (struct rfbClientRec* pScreen);
+typedef Bool (*SetTranslateFunctionProcPtr)(struct rfbClientRec* cl);
typedef void (*NewClientHookPtr)(struct rfbClientRec* cl);
/*
@@ -110,6 +111,12 @@ typedef struct
Pixel blackPixel;
Pixel whitePixel;
+ /* some screen specific data can be put into a struct where screenData
+ * points to. You need this if you have more than one screen at the
+ * same time while using the same functions.
+ */
+ void* screenData;
+
/* The following two members are used to minimise the amount of unnecessary
drawing caused by cursor movement. Whenever any drawing affects the
part of the screen where the cursor is, the cursor is removed first and
@@ -212,7 +219,8 @@ typedef struct
PtrAddEventProcPtr ptrAddEvent;
SetXCutTextProcPtr setXCutText;
GetCursorProcPtr getCursorPtr;
-
+ SetTranslateFunctionProcPtr setTranslateFunction;
+
/* the following members are hooks, i.e. they are called if set,
but not overriding original functionality */
/* newClientHook is called just after a new client is created */
@@ -264,7 +272,14 @@ typedef struct RegionRec {
typedef void (*ClientGoneHookPtr)(struct rfbClientRec* cl);
typedef struct rfbClientRec {
+
+ /* back pointer to the screen */
rfbScreenInfoPtr screen;
+
+ /* private data. You should put any application client specific data
+ * into a struct and let clientData point to it. Don't forget to
+ * free the struct via clientGoneHook!
+ */
void* clientData;
ClientGoneHookPtr clientGoneHook;
diff --git a/rfbserver.c b/rfbserver.c
index df58ea3..964deba 100644
--- a/rfbserver.c
+++ b/rfbserver.c
@@ -533,8 +533,8 @@ rfbProcessClientNormalMessage(cl)
cl->format.blueShift = msg.spf.format.blueShift;
cl->readyForSetColourMapEntries = TRUE;
+ cl->screen->setTranslateFunction(cl);
- rfbSetTranslateFunction(cl);
return;