comparison src/glyphs-x.c @ 438:84b14dcb0985 r21-2-27

Import from CVS: tag r21-2-27
author cvs
date Mon, 13 Aug 2007 11:32:25 +0200
parents 080151679be2
children 8de8e3f6228a
comparison
equal deleted inserted replaced
437:e2a4e8b94b82 438:84b14dcb0985
2 Copyright (C) 1993, 1994 Free Software Foundation, Inc. 2 Copyright (C) 1993, 1994 Free Software Foundation, Inc.
3 Copyright (C) 1995 Board of Trustees, University of Illinois. 3 Copyright (C) 1995 Board of Trustees, University of Illinois.
4 Copyright (C) 1995 Tinker Systems 4 Copyright (C) 1995 Tinker Systems
5 Copyright (C) 1995, 1996 Ben Wing 5 Copyright (C) 1995, 1996 Ben Wing
6 Copyright (C) 1995 Sun Microsystems 6 Copyright (C) 1995 Sun Microsystems
7 Copyright (C) 1999 Andy Piper 7 Copyright (C) 1999, 2000 Andy Piper
8 8
9 This file is part of XEmacs. 9 This file is part of XEmacs.
10 10
11 XEmacs is free software; you can redistribute it and/or modify it 11 XEmacs is free software; you can redistribute it and/or modify it
12 under the terms of the GNU General Public License as published by the 12 under the terms of the GNU General Public License as published by the
102 #ifdef HAVE_JPEG 102 #ifdef HAVE_JPEG
103 DECLARE_IMAGE_INSTANTIATOR_FORMAT (jpeg); 103 DECLARE_IMAGE_INSTANTIATOR_FORMAT (jpeg);
104 #endif 104 #endif
105 #ifdef HAVE_TIFF 105 #ifdef HAVE_TIFF
106 DECLARE_IMAGE_INSTANTIATOR_FORMAT (tiff); 106 DECLARE_IMAGE_INSTANTIATOR_FORMAT (tiff);
107 #endif 107 #endif
108 #ifdef HAVE_PNG 108 #ifdef HAVE_PNG
109 DECLARE_IMAGE_INSTANTIATOR_FORMAT (png); 109 DECLARE_IMAGE_INSTANTIATOR_FORMAT (png);
110 #endif 110 #endif
111 #ifdef HAVE_GIF 111 #ifdef HAVE_GIF
112 DECLARE_IMAGE_INSTANTIATOR_FORMAT (gif); 112 DECLARE_IMAGE_INSTANTIATOR_FORMAT (gif);
113 #endif 113 #endif
114 #ifdef HAVE_XPM 114 #ifdef HAVE_XPM
115 DEFINE_DEVICE_IIFORMAT (x, xpm); 115 DEFINE_DEVICE_IIFORMAT (x, xpm);
116 #endif 116 #endif
117 DEFINE_DEVICE_IIFORMAT (x, xbm); 117 DEFINE_DEVICE_IIFORMAT (x, xbm);
118 DEFINE_DEVICE_IIFORMAT (x, subwindow); 118 DEFINE_DEVICE_IIFORMAT (x, subwindow);
425 425
426 if (IMAGE_INSTANCE_X_MASK (p) && 426 if (IMAGE_INSTANCE_X_MASK (p) &&
427 IMAGE_INSTANCE_X_MASK (p) != IMAGE_INSTANCE_X_PIXMAP (p)) 427 IMAGE_INSTANCE_X_MASK (p) != IMAGE_INSTANCE_X_PIXMAP (p))
428 XFreePixmap (dpy, IMAGE_INSTANCE_X_MASK (p)); 428 XFreePixmap (dpy, IMAGE_INSTANCE_X_MASK (p));
429 IMAGE_INSTANCE_PIXMAP_MASK (p) = 0; 429 IMAGE_INSTANCE_PIXMAP_MASK (p) = 0;
430 430
431 if (IMAGE_INSTANCE_X_PIXMAP_SLICES (p)) 431 if (IMAGE_INSTANCE_X_PIXMAP_SLICES (p))
432 { 432 {
433 for (i = 0; i < IMAGE_INSTANCE_PIXMAP_MAXSLICE (p); i++) 433 for (i = 0; i < IMAGE_INSTANCE_PIXMAP_MAXSLICE (p); i++)
434 if (IMAGE_INSTANCE_X_PIXMAP_SLICE (p,i)) 434 if (IMAGE_INSTANCE_X_PIXMAP_SLICE (p,i))
435 { 435 {
443 if (IMAGE_INSTANCE_X_CURSOR (p)) 443 if (IMAGE_INSTANCE_X_CURSOR (p))
444 { 444 {
445 XFreeCursor (dpy, IMAGE_INSTANCE_X_CURSOR (p)); 445 XFreeCursor (dpy, IMAGE_INSTANCE_X_CURSOR (p));
446 IMAGE_INSTANCE_X_CURSOR (p) = 0; 446 IMAGE_INSTANCE_X_CURSOR (p) = 0;
447 } 447 }
448 448
449 if (IMAGE_INSTANCE_X_NPIXELS (p) != 0) 449 if (IMAGE_INSTANCE_X_NPIXELS (p) != 0)
450 { 450 {
451 XFreeColors (dpy, 451 XFreeColors (dpy,
452 IMAGE_INSTANCE_X_COLORMAP (p), 452 IMAGE_INSTANCE_X_COLORMAP (p),
453 IMAGE_INSTANCE_X_PIXELS (p), 453 IMAGE_INSTANCE_X_PIXELS (p),
517 int slices, 517 int slices,
518 enum image_instance_type type) 518 enum image_instance_type type)
519 { 519 {
520 ii->data = xnew_and_zero (struct x_image_instance_data); 520 ii->data = xnew_and_zero (struct x_image_instance_data);
521 IMAGE_INSTANCE_PIXMAP_MAXSLICE (ii) = slices; 521 IMAGE_INSTANCE_PIXMAP_MAXSLICE (ii) = slices;
522 IMAGE_INSTANCE_X_PIXMAP_SLICES (ii) = 522 IMAGE_INSTANCE_X_PIXMAP_SLICES (ii) =
523 xnew_array_and_zero (Pixmap, slices); 523 xnew_array_and_zero (Pixmap, slices);
524 IMAGE_INSTANCE_TYPE (ii) = type; 524 IMAGE_INSTANCE_TYPE (ii) = type;
525 IMAGE_INSTANCE_PIXMAP_FILENAME (ii) = Qnil; 525 IMAGE_INSTANCE_PIXMAP_FILENAME (ii) = Qnil;
526 IMAGE_INSTANCE_PIXMAP_MASK_FILENAME (ii) = Qnil; 526 IMAGE_INSTANCE_PIXMAP_MASK_FILENAME (ii) = Qnil;
527 IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii) = Qnil; 527 IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii) = Qnil;
943 int slice; 943 int slice;
944 XImage* ximage; 944 XImage* ximage;
945 945
946 for (slice = 0; slice < slices; slice++) 946 for (slice = 0; slice < slices; slice++)
947 { 947 {
948 ximage = convert_EImage_to_XImage (device, width, height, 948 ximage = convert_EImage_to_XImage (device, width, height,
949 eimage + (width * height * 3 * slice), 949 eimage + (width * height * 3 * slice),
950 &pixtbl, &npixels); 950 &pixtbl, &npixels);
951 if (!ximage) 951 if (!ximage)
952 { 952 {
953 if (pixtbl) xfree (pixtbl); 953 if (pixtbl) xfree (pixtbl);
1286 XpmFreeAttributes (xpmattrs); 1286 XpmFreeAttributes (xpmattrs);
1287 } 1287 }
1288 1288
1289 static void 1289 static void
1290 x_xpm_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, 1290 x_xpm_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
1291 Lisp_Object pointer_fg, Lisp_Object pointer_bg, 1291 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
1292 int dest_mask, Lisp_Object domain) 1292 int dest_mask, Lisp_Object domain)
1293 { 1293 {
1294 /* This function can GC */ 1294 /* This function can GC */
1295 struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance); 1295 struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
1296 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii); 1296 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
1297 Lisp_Object data = find_keyword_in_vector (instantiator, Q_data); 1297 Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
1727 data_must_be_present (instantiator); 1727 data_must_be_present (instantiator);
1728 } 1728 }
1729 1729
1730 static Lisp_Object 1730 static Lisp_Object
1731 autodetect_normalize (Lisp_Object instantiator, 1731 autodetect_normalize (Lisp_Object instantiator,
1732 Lisp_Object console_type) 1732 Lisp_Object console_type)
1733 { 1733 {
1734 Lisp_Object file = find_keyword_in_vector (instantiator, Q_data); 1734 Lisp_Object file = find_keyword_in_vector (instantiator, Q_data);
1735 Lisp_Object filename = Qnil; 1735 Lisp_Object filename = Qnil;
1736 Lisp_Object data = Qnil; 1736 Lisp_Object data = Qnil;
1737 struct gcpro gcpro1, gcpro2, gcpro3; 1737 struct gcpro gcpro1, gcpro2, gcpro3;
1818 IMAGE_TEXT_MASK; 1818 IMAGE_TEXT_MASK;
1819 } 1819 }
1820 1820
1821 static void 1821 static void
1822 autodetect_instantiate (Lisp_Object image_instance, 1822 autodetect_instantiate (Lisp_Object image_instance,
1823 Lisp_Object instantiator, 1823 Lisp_Object instantiator,
1824 Lisp_Object pointer_fg, 1824 Lisp_Object pointer_fg,
1825 Lisp_Object pointer_bg, 1825 Lisp_Object pointer_bg,
1826 int dest_mask, Lisp_Object domain) 1826 int dest_mask, Lisp_Object domain)
1827 { 1827 {
1828 Lisp_Object data = find_keyword_in_vector (instantiator, Q_data); 1828 Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
1829 struct gcpro gcpro1, gcpro2, gcpro3; 1829 struct gcpro gcpro1, gcpro2, gcpro3;
1830 Lisp_Object alist = Qnil; 1830 Lisp_Object alist = Qnil;
1831 Lisp_Object result = Qnil; 1831 Lisp_Object result = Qnil;
2111 static void 2111 static void
2112 x_unmap_subwindow (struct Lisp_Image_Instance *p) 2112 x_unmap_subwindow (struct Lisp_Image_Instance *p)
2113 { 2113 {
2114 if (IMAGE_INSTANCE_TYPE (p) == IMAGE_SUBWINDOW) 2114 if (IMAGE_INSTANCE_TYPE (p) == IMAGE_SUBWINDOW)
2115 { 2115 {
2116 XUnmapWindow 2116 XUnmapWindow
2117 (IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (p), 2117 (IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (p),
2118 IMAGE_INSTANCE_X_CLIPWINDOW (p)); 2118 IMAGE_INSTANCE_X_CLIPWINDOW (p));
2119 } 2119 }
2120 else /* must be a widget */ 2120 else /* must be a widget */
2121 { 2121 {
2122 XtUnmapWidget (IMAGE_INSTANCE_X_CLIPWIDGET (p)); 2122 XtUnmapWidget (IMAGE_INSTANCE_X_CLIPWIDGET (p));
2131 { 2131 {
2132 if (IMAGE_INSTANCE_TYPE (p) == IMAGE_SUBWINDOW) 2132 if (IMAGE_INSTANCE_TYPE (p) == IMAGE_SUBWINDOW)
2133 { 2133 {
2134 Window subwindow = IMAGE_INSTANCE_X_SUBWINDOW_ID (p); 2134 Window subwindow = IMAGE_INSTANCE_X_SUBWINDOW_ID (p);
2135 XMoveResizeWindow (IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (p), 2135 XMoveResizeWindow (IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (p),
2136 IMAGE_INSTANCE_X_CLIPWINDOW (p), 2136 IMAGE_INSTANCE_X_CLIPWINDOW (p),
2137 x, y, dga->width, dga->height); 2137 x, y, dga->width, dga->height);
2138 XMoveWindow (IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (p), 2138 XMoveWindow (IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (p),
2139 subwindow, -dga->xoffset, -dga->yoffset); 2139 subwindow, -dga->xoffset, -dga->yoffset);
2140 XMapWindow (IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (p), 2140 XMapWindow (IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (p),
2141 IMAGE_INSTANCE_X_CLIPWINDOW (p)); 2141 IMAGE_INSTANCE_X_CLIPWINDOW (p));
2142 } 2142 }
2143 else /* must be a widget */ 2143 else /* must be a widget */
2144 { 2144 {
2145 XtConfigureWidget (IMAGE_INSTANCE_X_CLIPWIDGET (p), 2145 XtConfigureWidget (IMAGE_INSTANCE_X_CLIPWIDGET (p),
2146 x + IMAGE_INSTANCE_X_WIDGET_XOFFSET (p), 2146 x + IMAGE_INSTANCE_X_WIDGET_XOFFSET (p),
2147 y + IMAGE_INSTANCE_X_WIDGET_YOFFSET (p), 2147 y + IMAGE_INSTANCE_X_WIDGET_YOFFSET (p),
2148 dga->width, dga->height, 0); 2148 dga->width, dga->height, 0);
2149 XtMoveWidget (IMAGE_INSTANCE_X_WIDGET_ID (p), 2149 XtMoveWidget (IMAGE_INSTANCE_X_WIDGET_ID (p),
2150 -dga->xoffset, -dga->yoffset); 2150 -dga->xoffset, -dga->yoffset);
2158 x_update_subwindow (struct Lisp_Image_Instance *p) 2158 x_update_subwindow (struct Lisp_Image_Instance *p)
2159 { 2159 {
2160 #ifdef HAVE_WIDGETS 2160 #ifdef HAVE_WIDGETS
2161 if (IMAGE_INSTANCE_TYPE (p) == IMAGE_WIDGET) 2161 if (IMAGE_INSTANCE_TYPE (p) == IMAGE_WIDGET)
2162 { 2162 {
2163 Arg al[5]; 2163 widget_value* wv = gui_items_to_widget_values
2164 widget_value* wv = gui_items_to_widget_values
2165 (IMAGE_INSTANCE_WIDGET_ITEMS (p)); 2164 (IMAGE_INSTANCE_WIDGET_ITEMS (p));
2166 2165
2167 /* This seems ugly, but I'm not sure what else to do. */ 2166 /* This seems ugly, but I'm not sure what else to do. */
2168 if (EQ (IMAGE_INSTANCE_WIDGET_TYPE (p), Qtab_control)) 2167 if (EQ (IMAGE_INSTANCE_WIDGET_TYPE (p), Qtab_control))
2169 { 2168 {
2170 update_tab_widget_face (wv, p, 2169 update_tab_widget_face (wv, p,
2171 IMAGE_INSTANCE_SUBWINDOW_FRAME (p)); 2170 IMAGE_INSTANCE_SUBWINDOW_FRAME (p));
2172 } 2171 }
2173 /* update the colors and font */ 2172 /* update the colors and font */
2174 update_widget_face (wv, p, IMAGE_INSTANCE_SUBWINDOW_FRAME (p)); 2173 update_widget_face (wv, p, IMAGE_INSTANCE_SUBWINDOW_FRAME (p));
2175 2174
2176 /* now modify the widget */ 2175 /* now modify the widget */
2177 lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (p), 2176 lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (p),
2178 wv, True); 2177 wv, True);
2179 free_widget_value_tree (wv); 2178 free_widget_value_tree (wv);
2180 /* We have to do this otherwise Motif will unceremoniously 2179 /* subwindow resizing now gets done by the parent function. */
2181 resize us when the label gets set. */
2182 XtSetArg (al [0], XtNwidth, IMAGE_INSTANCE_WIDGET_WIDTH (p));
2183 XtSetArg (al [1], XtNheight, IMAGE_INSTANCE_WIDGET_HEIGHT (p));
2184 XtSetValues (IMAGE_INSTANCE_X_WIDGET_ID (p), al, 2);
2185 } 2180 }
2186 #endif 2181 #endif
2187 } 2182 }
2188 2183
2189 /* instantiate and x type subwindow */ 2184 /* instantiate and x type subwindow */
2200 Display *dpy; 2195 Display *dpy;
2201 Screen *xs; 2196 Screen *xs;
2202 Window pw, win; 2197 Window pw, win;
2203 XSetWindowAttributes xswa; 2198 XSetWindowAttributes xswa;
2204 Mask valueMask = 0; 2199 Mask valueMask = 0;
2205 unsigned int w = IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii), 2200 unsigned int w = IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii),
2206 h = IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii); 2201 h = IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii);
2207 2202
2208 if (!DEVICE_X_P (XDEVICE (device))) 2203 if (!DEVICE_X_P (XDEVICE (device)))
2209 signal_simple_error ("Not an X device", device); 2204 signal_simple_error ("Not an X device", device);
2210 2205
2222 2217
2223 xswa.backing_store = Always; 2218 xswa.backing_store = Always;
2224 valueMask |= CWBackingStore; 2219 valueMask |= CWBackingStore;
2225 xswa.colormap = DefaultColormapOfScreen (xs); 2220 xswa.colormap = DefaultColormapOfScreen (xs);
2226 valueMask |= CWColormap; 2221 valueMask |= CWColormap;
2227 2222
2228 /* Create a window for clipping */ 2223 /* Create a window for clipping */
2229 IMAGE_INSTANCE_X_CLIPWINDOW (ii) = 2224 IMAGE_INSTANCE_X_CLIPWINDOW (ii) =
2230 XCreateWindow (dpy, pw, 0, 0, w, h, 0, CopyFromParent, 2225 XCreateWindow (dpy, pw, 0, 0, w, h, 0, CopyFromParent,
2231 InputOutput, CopyFromParent, valueMask, 2226 InputOutput, CopyFromParent, valueMask,
2232 &xswa); 2227 &xswa);
2233 2228
2234 /* Now put the subwindow inside the clip window. */ 2229 /* Now put the subwindow inside the clip window. */
2235 win = XCreateWindow (dpy, IMAGE_INSTANCE_X_CLIPWINDOW (ii), 2230 win = XCreateWindow (dpy, IMAGE_INSTANCE_X_CLIPWINDOW (ii),
2236 0, 0, w, h, 0, CopyFromParent, 2231 0, 0, w, h, 0, CopyFromParent,
2237 InputOutput, CopyFromParent, valueMask, 2232 InputOutput, CopyFromParent, valueMask,
2238 &xswa); 2233 &xswa);
2239 2234
2240 IMAGE_INSTANCE_SUBWINDOW_ID (ii) = (void*)win; 2235 IMAGE_INSTANCE_SUBWINDOW_ID (ii) = (void*)win;
2241 } 2236 }
2242 2237
2243 #if 0 2238 #if 0
2244 /* #### Should this function exist? If there's any doubt I'm not implementing it --andyp */ 2239 /* #### Should this function exist? If there's any doubt I'm not implementing it --andyp */
2268 2263
2269 return property; 2264 return property;
2270 } 2265 }
2271 #endif 2266 #endif
2272 2267
2273 static void 2268 static void
2274 x_resize_subwindow (struct Lisp_Image_Instance* ii, int w, int h) 2269 x_resize_subwindow (struct Lisp_Image_Instance* ii, int w, int h)
2275 { 2270 {
2276 if (IMAGE_INSTANCE_TYPE (ii) == IMAGE_SUBWINDOW) 2271 if (IMAGE_INSTANCE_TYPE (ii) == IMAGE_SUBWINDOW)
2277 { 2272 {
2278 XResizeWindow (IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (ii), 2273 XResizeWindow (IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (ii),
2308 Lisp_Object domain) 2303 Lisp_Object domain)
2309 { 2304 {
2310 #ifdef LWLIB_WIDGETS_MOTIF 2305 #ifdef LWLIB_WIDGETS_MOTIF
2311 XmFontList fontList; 2306 XmFontList fontList;
2312 #endif 2307 #endif
2313 2308 /* Update the foreground. */
2314 Lisp_Object pixel = FACE_FOREGROUND 2309 Lisp_Object pixel = FACE_FOREGROUND
2315 (IMAGE_INSTANCE_WIDGET_FACE (ii), 2310 (IMAGE_INSTANCE_WIDGET_FACE (ii),
2316 domain); 2311 domain);
2317 XColor fcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel)); 2312 XColor fcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel)), bcolor;
2318
2319 lw_add_widget_value_arg (wv, XtNforeground, fcolor.pixel); 2313 lw_add_widget_value_arg (wv, XtNforeground, fcolor.pixel);
2314
2315 /* Update the background. */
2316 pixel = FACE_BACKGROUND (IMAGE_INSTANCE_WIDGET_FACE (ii),
2317 domain);
2318 bcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel));
2319 lw_add_widget_value_arg (wv, XtNbackground, bcolor.pixel);
2320
2320 #ifdef LWLIB_WIDGETS_MOTIF 2321 #ifdef LWLIB_WIDGETS_MOTIF
2321 fontList = XmFontListCreate 2322 fontList = XmFontListCreate
2322 (FONT_INSTANCE_X_FONT 2323 (FONT_INSTANCE_X_FONT
2323 (XFONT_INSTANCE (widget_face_font_info 2324 (XFONT_INSTANCE (query_string_font
2324 (domain, 2325 (IMAGE_INSTANCE_WIDGET_TEXT (ii),
2325 IMAGE_INSTANCE_WIDGET_FACE (ii), 2326 IMAGE_INSTANCE_WIDGET_FACE (ii),
2326 0, 0))), XmSTRING_DEFAULT_CHARSET); 2327 domain))), XmSTRING_DEFAULT_CHARSET);
2327 lw_add_widget_value_arg (wv, XmNfontList, (XtArgVal)fontList); 2328 lw_add_widget_value_arg (wv, XmNfontList, (XtArgVal)fontList);
2328 #endif 2329 #endif
2329 lw_add_widget_value_arg 2330 lw_add_widget_value_arg
2330 (wv, XtNfont, (XtArgVal)FONT_INSTANCE_X_FONT 2331 (wv, XtNfont, (XtArgVal)FONT_INSTANCE_X_FONT
2331 (XFONT_INSTANCE (widget_face_font_info 2332 (XFONT_INSTANCE (query_string_font
2332 (domain, 2333 (IMAGE_INSTANCE_WIDGET_TEXT (ii),
2333 IMAGE_INSTANCE_WIDGET_FACE (ii), 2334 IMAGE_INSTANCE_WIDGET_FACE (ii),
2334 0, 0)))); 2335 domain))));
2335 } 2336 }
2336 2337
2337 static void 2338 static void
2338 update_tab_widget_face (widget_value* wv, struct Lisp_Image_Instance *ii, 2339 update_tab_widget_face (widget_value* wv, struct Lisp_Image_Instance *ii,
2339 Lisp_Object domain) 2340 Lisp_Object domain)
2340 { 2341 {
2341 if (wv->contents) 2342 if (wv->contents)
2342 { 2343 {
2343 widget_value* val = wv->contents, *cur; 2344 widget_value* val = wv->contents, *cur;
2344 2345
2345 /* Give each child label the correct foreground color. */ 2346 /* Give each child label the correct foreground color. */
2346 Lisp_Object pixel = FACE_FOREGROUND 2347 Lisp_Object pixel = FACE_FOREGROUND
2347 (IMAGE_INSTANCE_WIDGET_FACE (ii), 2348 (IMAGE_INSTANCE_WIDGET_FACE (ii),
2348 domain); 2349 domain);
2349 XColor fcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel)); 2350 XColor fcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel));
2350 lw_add_widget_value_arg (val, XtNtabForeground, fcolor.pixel); 2351 lw_add_widget_value_arg (val, XtNtabForeground, fcolor.pixel);
2351 2352
2396 this. Nothing else is simple enough and yet does what is 2397 this. Nothing else is simple enough and yet does what is
2397 required. */ 2398 required. */
2398 clip_wv = xmalloc_widget_value (); 2399 clip_wv = xmalloc_widget_value ();
2399 2400
2400 lw_add_widget_value_arg (clip_wv, XtNresize, False); 2401 lw_add_widget_value_arg (clip_wv, XtNresize, False);
2401 lw_add_widget_value_arg (clip_wv, XtNwidth, 2402 lw_add_widget_value_arg (clip_wv, XtNwidth,
2402 (Dimension)IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii)); 2403 (Dimension)IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii));
2403 lw_add_widget_value_arg (clip_wv, XtNheight, 2404 lw_add_widget_value_arg (clip_wv, XtNheight,
2404 (Dimension)IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii)); 2405 (Dimension)IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii));
2405 clip_wv->enabled = True; 2406 clip_wv->enabled = True;
2406 2407
2407 clip_wv->name = xstrdup ("clip-window"); 2408 clip_wv->name = xstrdup ("clip-window");
2408 clip_wv->value = xstrdup ("clip-window"); 2409 clip_wv->value = xstrdup ("clip-window");
2420 2421
2421 /* Fixup the colors. We have to do this *before* the widget gets 2422 /* Fixup the colors. We have to do this *before* the widget gets
2422 created so that Motif will fix up the shadow colors 2423 created so that Motif will fix up the shadow colors
2423 correctly. Once the widget is created Motif won't do this 2424 correctly. Once the widget is created Motif won't do this
2424 anymore...*/ 2425 anymore...*/
2425 pixel = FACE_FOREGROUND 2426 pixel = FACE_FOREGROUND
2426 (IMAGE_INSTANCE_WIDGET_FACE (ii), 2427 (IMAGE_INSTANCE_WIDGET_FACE (ii),
2427 IMAGE_INSTANCE_SUBWINDOW_FRAME (ii)); 2428 IMAGE_INSTANCE_SUBWINDOW_FRAME (ii));
2428 fcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel)); 2429 fcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel));
2429 2430
2430 pixel = FACE_BACKGROUND 2431 pixel = FACE_BACKGROUND
2434 2435
2435 lw_add_widget_value_arg (wv, XtNbackground, bcolor.pixel); 2436 lw_add_widget_value_arg (wv, XtNbackground, bcolor.pixel);
2436 lw_add_widget_value_arg (wv, XtNforeground, fcolor.pixel); 2437 lw_add_widget_value_arg (wv, XtNforeground, fcolor.pixel);
2437 /* we cannot allow widgets to resize themselves */ 2438 /* we cannot allow widgets to resize themselves */
2438 lw_add_widget_value_arg (wv, XtNresize, False); 2439 lw_add_widget_value_arg (wv, XtNresize, False);
2439 lw_add_widget_value_arg (wv, XtNwidth, 2440 lw_add_widget_value_arg (wv, XtNwidth,
2440 (Dimension)IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii)); 2441 (Dimension)IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii));
2441 lw_add_widget_value_arg (wv, XtNheight, 2442 lw_add_widget_value_arg (wv, XtNheight,
2442 (Dimension)IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii)); 2443 (Dimension)IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii));
2443 /* update the font. */ 2444 /* update the font. */
2444 update_widget_face (wv, ii, domain); 2445 update_widget_face (wv, ii, domain);
2445 2446
2446 wid = lw_create_widget (type, wv->name, id, wv, IMAGE_INSTANCE_X_CLIPWIDGET (ii), 2447 wid = lw_create_widget (type, wv->name, id, wv, IMAGE_INSTANCE_X_CLIPWIDGET (ii),
2450 IMAGE_INSTANCE_X_WIDGET_LWID (ii) = id; 2451 IMAGE_INSTANCE_X_WIDGET_LWID (ii) = id;
2451 2452
2452 /* Resize the widget here so that the values do not get copied by 2453 /* Resize the widget here so that the values do not get copied by
2453 lwlib. */ 2454 lwlib. */
2454 ac = 0; 2455 ac = 0;
2455 XtSetArg (al [ac], XtNwidth, 2456 XtSetArg (al [ac], XtNwidth,
2456 (Dimension)IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii)); ac++; 2457 (Dimension)IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii)); ac++;
2457 XtSetArg (al [ac], XtNheight, 2458 XtSetArg (al [ac], XtNheight,
2458 (Dimension)IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii)); ac++; 2459 (Dimension)IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii)); ac++;
2459 XtSetValues (IMAGE_INSTANCE_X_WIDGET_ID (ii), al, ac); 2460 XtSetValues (IMAGE_INSTANCE_X_WIDGET_ID (ii), al, ac);
2460 /* because the EmacsManager is the widgets parent we have to 2461 /* because the EmacsManager is the widgets parent we have to
2461 offset the redisplay of the widget by the amount the text 2462 offset the redisplay of the widget by the amount the text
2462 widget is inside the manager. */ 2463 widget is inside the manager. */
2483 widget_value* wv = lw_get_all_values (IMAGE_INSTANCE_X_WIDGET_LWID (ii)); 2484 widget_value* wv = lw_get_all_values (IMAGE_INSTANCE_X_WIDGET_LWID (ii));
2484 CHECK_STRING (val); 2485 CHECK_STRING (val);
2485 GET_C_STRING_OS_DATA_ALLOCA (val, str); 2486 GET_C_STRING_OS_DATA_ALLOCA (val, str);
2486 wv->value = str; 2487 wv->value = str;
2487 lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (ii), wv, False); 2488 lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (ii), wv, False);
2488 return Qt;
2489 } 2489 }
2490 2490
2491 /* Modify the text properties of the widget */ 2491 /* Modify the text properties of the widget */
2492 else if (EQ (prop, Q_face)) 2492 else if (EQ (prop, Q_face))
2493 { 2493 {
2494 widget_value* wv = lw_get_all_values (IMAGE_INSTANCE_X_WIDGET_LWID (ii)); 2494 widget_value* wv = lw_get_all_values (IMAGE_INSTANCE_X_WIDGET_LWID (ii));
2495 update_widget_face (wv, ii, IMAGE_INSTANCE_SUBWINDOW_FRAME (ii)); 2495 update_widget_face (wv, ii, IMAGE_INSTANCE_SUBWINDOW_FRAME (ii));
2496 lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (ii), wv, False); 2496 lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (ii), wv, False);
2497 return Qt;
2498 } 2497 }
2499 return Qunbound; 2498 return Qunbound;
2500 } 2499 }
2501 2500
2502 /* get properties of a control */ 2501 /* get properties of a control */
2614 int dest_mask, Lisp_Object domain) 2613 int dest_mask, Lisp_Object domain)
2615 { 2614 {
2616 struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance); 2615 struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
2617 Lisp_Object gui = IMAGE_INSTANCE_WIDGET_ITEM (ii); 2616 Lisp_Object gui = IMAGE_INSTANCE_WIDGET_ITEM (ii);
2618 widget_value* wv = xmalloc_widget_value (); 2617 widget_value* wv = xmalloc_widget_value ();
2619 2618
2620 button_item_to_widget_value (gui, wv, 1, 1); 2619 button_item_to_widget_value (gui, wv, 1, 1);
2621 2620
2622 x_widget_instantiate (image_instance, instantiator, pointer_fg, 2621 x_widget_instantiate (image_instance, instantiator, pointer_fg,
2623 pointer_bg, dest_mask, domain, "text-field", wv); 2622 pointer_bg, dest_mask, domain, "text-field", wv);
2624 } 2623 }
2625 2624
2626 #if defined (LWLIB_WIDGETS_MOTIF) && XmVERSION > 1 2625 #if defined (LWLIB_WIDGETS_MOTIF) && XmVERSION > 1
2632 { 2631 {
2633 struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance); 2632 struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
2634 widget_value * wv = 0; 2633 widget_value * wv = 0;
2635 /* This is not done generically because of sizing problems under 2634 /* This is not done generically because of sizing problems under
2636 mswindows. */ 2635 mswindows. */
2637 widget_instantiate_1 (image_instance, instantiator, pointer_fg, 2636 widget_instantiate (image_instance, instantiator, pointer_fg,
2638 pointer_bg, dest_mask, domain, 1, 0, 0); 2637 pointer_bg, dest_mask, domain);
2639 2638
2640 wv = gui_items_to_widget_values (IMAGE_INSTANCE_WIDGET_ITEMS (ii)); 2639 wv = gui_items_to_widget_values (IMAGE_INSTANCE_WIDGET_ITEMS (ii));
2641 2640
2642 x_widget_instantiate (image_instance, instantiator, pointer_fg, 2641 x_widget_instantiate (image_instance, instantiator, pointer_fg,
2643 pointer_bg, dest_mask, domain, "combo-box", wv); 2642 pointer_bg, dest_mask, domain, "combo-box", wv);
2644 } 2643 }
2645 #endif 2644 #endif
2646 2645
2648 x_tab_control_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, 2647 x_tab_control_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
2649 Lisp_Object pointer_fg, Lisp_Object pointer_bg, 2648 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
2650 int dest_mask, Lisp_Object domain) 2649 int dest_mask, Lisp_Object domain)
2651 { 2650 {
2652 struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance); 2651 struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
2653 widget_value * wv = 2652 widget_value * wv =
2654 gui_items_to_widget_values (IMAGE_INSTANCE_WIDGET_ITEMS (ii)); 2653 gui_items_to_widget_values (IMAGE_INSTANCE_WIDGET_ITEMS (ii));
2655 2654
2656 update_tab_widget_face (wv, ii, 2655 update_tab_widget_face (wv, ii,
2657 IMAGE_INSTANCE_SUBWINDOW_FRAME (ii)); 2656 IMAGE_INSTANCE_SUBWINDOW_FRAME (ii));
2658 2657
2659 x_widget_instantiate (image_instance, instantiator, pointer_fg, 2658 x_widget_instantiate (image_instance, instantiator, pointer_fg,
2660 pointer_bg, dest_mask, domain, "tab-control", wv); 2659 pointer_bg, dest_mask, domain, "tab-control", wv);
2661 } 2660 }
2664 static Lisp_Object 2663 static Lisp_Object
2665 x_tab_control_set_property (Lisp_Object image_instance, Lisp_Object prop, 2664 x_tab_control_set_property (Lisp_Object image_instance, Lisp_Object prop,
2666 Lisp_Object val) 2665 Lisp_Object val)
2667 { 2666 {
2668 struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance); 2667 struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
2669 2668
2670 if (EQ (prop, Q_items)) 2669 if (EQ (prop, Q_items))
2671 { 2670 {
2672 widget_value * wv = 0; 2671 widget_value * wv = 0;
2673 check_valid_item_list_1 (val); 2672 check_valid_item_list_1 (val);
2674 2673
2675 IMAGE_INSTANCE_WIDGET_ITEMS (ii) = 2674 IMAGE_INSTANCE_WIDGET_ITEMS (ii) =
2676 Fcons (XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)), 2675 Fcons (XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)),
2677 parse_gui_item_tree_children (val)); 2676 parse_gui_item_tree_children (val));
2678 2677
2679 wv = gui_items_to_widget_values (IMAGE_INSTANCE_WIDGET_ITEMS (ii)); 2678 wv = gui_items_to_widget_values (IMAGE_INSTANCE_WIDGET_ITEMS (ii));
2680 2679
2681 update_tab_widget_face (wv, ii, 2680 update_tab_widget_face (wv, ii,
2682 IMAGE_INSTANCE_SUBWINDOW_FRAME (ii)); 2681 IMAGE_INSTANCE_SUBWINDOW_FRAME (ii));
2683 2682
2684 lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (ii), wv, True); 2683 lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (ii), wv, True);
2685 2684
2686 free_widget_value_tree (wv); 2685 free_widget_value_tree (wv);
2697 int dest_mask, Lisp_Object domain) 2696 int dest_mask, Lisp_Object domain)
2698 { 2697 {
2699 struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance); 2698 struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
2700 Lisp_Object gui = IMAGE_INSTANCE_WIDGET_ITEM (ii); 2699 Lisp_Object gui = IMAGE_INSTANCE_WIDGET_ITEM (ii);
2701 widget_value* wv = xmalloc_widget_value (); 2700 widget_value* wv = xmalloc_widget_value ();
2702 2701
2703 button_item_to_widget_value (gui, wv, 1, 1); 2702 button_item_to_widget_value (gui, wv, 1, 1);
2704 2703
2705 x_widget_instantiate (image_instance, instantiator, pointer_fg, 2704 x_widget_instantiate (image_instance, instantiator, pointer_fg,
2706 pointer_bg, dest_mask, domain, "button", wv); 2705 pointer_bg, dest_mask, domain, "button", wv);
2707 } 2706 }
2708 #endif /* HAVE_WIDGETS */ 2707 #endif /* HAVE_WIDGETS */
2709 2708
2753 #ifdef HAVE_JPEG 2752 #ifdef HAVE_JPEG
2754 IIFORMAT_VALID_CONSOLE (x, jpeg); 2753 IIFORMAT_VALID_CONSOLE (x, jpeg);
2755 #endif 2754 #endif
2756 #ifdef HAVE_TIFF 2755 #ifdef HAVE_TIFF
2757 IIFORMAT_VALID_CONSOLE (x, tiff); 2756 IIFORMAT_VALID_CONSOLE (x, tiff);
2758 #endif 2757 #endif
2759 #ifdef HAVE_PNG 2758 #ifdef HAVE_PNG
2760 IIFORMAT_VALID_CONSOLE (x, png); 2759 IIFORMAT_VALID_CONSOLE (x, png);
2761 #endif 2760 #endif
2762 #ifdef HAVE_GIF 2761 #ifdef HAVE_GIF
2763 IIFORMAT_VALID_CONSOLE (x, gif); 2762 IIFORMAT_VALID_CONSOLE (x, gif);
2764 #endif 2763 #endif
2765 INITIALIZE_DEVICE_IIFORMAT (x, xbm); 2764 INITIALIZE_DEVICE_IIFORMAT (x, xbm);
2766 IIFORMAT_HAS_DEVMETHOD (x, xbm, instantiate); 2765 IIFORMAT_HAS_DEVMETHOD (x, xbm, instantiate);
2767 2766
2768 INITIALIZE_DEVICE_IIFORMAT (x, subwindow); 2767 INITIALIZE_DEVICE_IIFORMAT (x, subwindow);
2769 IIFORMAT_HAS_DEVMETHOD (x, subwindow, instantiate); 2768 IIFORMAT_HAS_DEVMETHOD (x, subwindow, instantiate);