From 9e192f40f2a7fe0785fce8739f270fa1e826eb56 Mon Sep 17 00:00:00 2001
From: dscho <dscho>
Date: Mon, 19 Nov 2001 17:12:42 +0000
Subject: first support for colourmaps

---
 x11vnc.c | 29 +++++++++++++++++++++++------
 1 file 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 )
-- 
cgit v1.2.3

