summaryrefslogtreecommitdiffstats
path: root/x11vnc.c
diff options
context:
space:
mode:
authordscho <dscho>2001-11-19 17:12:42 +0000
committerdscho <dscho>2001-11-19 17:12:42 +0000
commit9e192f40f2a7fe0785fce8739f270fa1e826eb56 (patch)
tree65944bbe47859257df9ca6dd828d8edfb4a5950c /x11vnc.c
parentbbcc2f51e676568f25a19eeac6ef2bd800cebeca (diff)
downloadlibtdevnc-9e192f40f2a7fe0785fce8739f270fa1e826eb56.tar.gz
libtdevnc-9e192f40f2a7fe0785fce8739f270fa1e826eb56.zip
first support for colourmaps
Diffstat (limited to 'x11vnc.c')
-rw-r--r--x11vnc.c29
1 files changed, 23 insertions, 6 deletions
diff --git a/x11vnc.c b/x11vnc.c
index 33ecfdf..a9bb1d1 100644
--- a/x11vnc.c
+++ b/x11vnc.c
@@ -131,6 +131,8 @@ void checkForImageUpdates(rfbScreenInfoPtr s,char *b)
int main(int argc,char** argv)
{
+ Screen *sc;
+ Colormap cm;
XImage *framebufferImage;
char *backupImage;
int xscreen,i;
@@ -168,12 +170,27 @@ int main(int argc,char** argv)
screen->rfbServerFormat.trueColour = TRUE;
if ( screen->rfbServerFormat.bitsPerPixel == 8 ) {
- screen->rfbServerFormat.redShift = 0;
- screen->rfbServerFormat.greenShift = 2;
- screen->rfbServerFormat.blueShift = 5;
- screen->rfbServerFormat.redMax = 3;
- screen->rfbServerFormat.greenMax = 7;
- screen->rfbServerFormat.blueMax = 3;
+ if(CellsOfScreen(ScreenOfDisplay(dpy,xscreen))!=0) {
+ XColor color[256];
+ int i;
+ screen->rfbServerFormat.trueColour = FALSE;
+ screen->colourMap = malloc(sizeof(rfbColourMap));
+ screen->colourMap.is16 = TRUE;
+ screen->colourMap.count = XQueryColors(dpy,DefaultColormap(dpy,xscreen),color,256);
+ screen->colourMap.data.shorts = malloc(6*screen->colourMap.count);
+ for(i=0;i<screen->colourMap.count;i++) {
+ screen->colourMap.data.shorts[i*6+0] = color[i].red;
+ screen->colourMap.data.shorts[i*6+2] = color[i].green;
+ screen->colourMap.data.shorts[i*6+4] = color[i].blue;
+ }
+ } else {
+ screen->rfbServerFormat.redShift = 0;
+ screen->rfbServerFormat.greenShift = 2;
+ screen->rfbServerFormat.blueShift = 5;
+ screen->rfbServerFormat.redMax = 3;
+ screen->rfbServerFormat.greenMax = 7;
+ screen->rfbServerFormat.blueMax = 3;
+ }
} else {
screen->rfbServerFormat.redShift = 0;
if ( framebufferImage->red_mask )