Mercurial > hg > xemacs-beta
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); |