Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!uunet!ogicse!milton!gichan@blake.u.washington.edu From: gichan@blake.u.washington.edu (Gilbert Chan) Newsgroups: comp.windows.x Subject: XView Q:"How do I colorize individual server_image?" Message-ID: <6275@milton.u.washington.edu> Date: 14 Aug 90 06:42:54 GMT Sender: news@milton.u.washington.edu Followup-To: bchan@ddn-eur.ddn.mil Distribution: na Organization: University of Washington, Seattle Lines: 105 I'm posting the following message for a friend, PLEASE direct all your responses to him at bchan@ddn-eur.ddn.mil . Thank you. --------------------------------------------------------------------- My objective is to display a 2-D vector (say x vs y) using server images (icons) on a base frame. [user clicks on the x panel buttons and then it will do something else.] I first draw the 5 types of icons (image_?_bits) using iconedit to represent, say integers from 0 - 4. Then I declare them by: image_1 = (Server_image)xv_create(NULL, SERVER_IMAGE, SERVER_IMAGE_COLORMAP, "palette", XV_WIDTH, 16, XV_HEIGHT, 16, SERVER_IMAGE_DEPTH, 1, SERVER_IMAGE_BITS, image_1_bits, NULL); (I show only one here.) Then I treat the icon as a panel message and displayed the icon as fellow: /* display icon */ (void) xv_create(l_panel, PANEL_MESSAGE, XV_X, xv_col(l_panel, col), XV_Y, xv_row(l_panel, row), PANEL_LABEL_IMAGE, image_1, NULL); This scheme works fine. (I am using this approach since I don't have worry about the font width, and height stuff when I need to display the column and rows labels as panel buttons.) The trouble is when I want to colorize individual icons, I hit a wall. I have tried WIN_FOREGROUND and WIN_BACKGROUND and SERVER_IMAGE_DEPTH = 8. No helps. I also have taken the hint from the example color_objs.c under Color in book 7 of the O'Reilly series: void declare_image(panel) Panel panel; { register int i; Display *dpy = (Display *)xv_get(panel, XV_DISPLAY); unsigned long mask, *pixels; XGCValues values; Pixmap pixmap; GC gc; if (DefaultDepth(dpy, DefaultScreen(dpy)) == 1) { puts("You need a color display to run this program"); exit(1); } /* setup gc for drawing colord squares (chips) */ values.graphics_exposures = False; values.foreground = 1; mask = GCGraphicsExposures | GCForeground; gc = XCreateGC(dpy, RootWindow(dpy, DefaultScreen(dpy)), mask, &values); /* Get the actual X pixel values from the colormap. The colormap * has been installed on the panel, so use that. Any window with * a cms colormap will do. */ pixels = (unsigned long *)xv_get(panel, WIN_X_COLOR_INDICES); not_active_image = (Server_image)xv_create(NULL, SERVER_IMAGE, SERVER_IMAGE_COLORMAP, "palette", XV_WIDTH, 16, XV_HEIGHT, 16, WIN_FOREGROUND_COLOR, 3, WIN_BACKGROUND_COLOR, 5, SERVER_IMAGE_DEPTH, 8, SERVER_IMAGE_BITS, not_active_bits, NULL); i=3; /* color index */ XSetForeground(dpy, gc, pixels[i]); pixmap = (Pixmap)xv_get(not_active_image, XV_XID); /* XFillRectangle(dpy, pixmap, gc, 0, 0, 16, 16); */ The foreground color didn't change. The icon was corrupted because of the server_image_depth. One of my problems I can think of is the pixmap business. But how can I draw an icon using pixmap? I have struggled on this problem for quite some time now. (I have less than a month of XView experience under my belt.) Can anyone point me to the right direction? Thank you very much for your help, Brian Chan Stuttgart, FRG Internet: bchan@ddn-eur.ddn.mil Phone # 49-711-680-5364 Autovon # 430-5364