comparison src/glyphs-x.c @ 420:41dbb7a9d5f2 r21-2-18

Import from CVS: tag r21-2-18
author cvs
date Mon, 13 Aug 2007 11:24:09 +0200
parents 697ef44129c6
children 95016f13131a
comparison
equal deleted inserted replaced
419:66615b78f1a5 420:41dbb7a9d5f2
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 8
8 This file is part of XEmacs. 9 This file is part of XEmacs.
9 10
10 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
11 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
49 #include "lisp.h" 50 #include "lisp.h"
50 #include "lstream.h" 51 #include "lstream.h"
51 #include "console-x.h" 52 #include "console-x.h"
52 #include "glyphs-x.h" 53 #include "glyphs-x.h"
53 #include "objects-x.h" 54 #include "objects-x.h"
55 #include "gui-x.h"
54 #include "xmu.h" 56 #include "xmu.h"
55 57
56 #include "buffer.h" 58 #include "buffer.h"
57 #include "window.h" 59 #include "window.h"
58 #include "frame.h" 60 #include "frame.h"
59 #include "insdel.h" 61 #include "insdel.h"
60 #include "opaque.h" 62 #include "opaque.h"
63 #include "gui.h"
64 #include "faces.h"
61 65
62 #include "imgproc.h" 66 #include "imgproc.h"
63 67
64 #include "sysfile.h" 68 #include "sysfile.h"
65 69
66 #include <setjmp.h> 70 #include <setjmp.h>
67 71
68 #ifdef FILE_CODING 72 #ifdef FILE_CODING
69 #include "file-coding.h" 73 #include "file-coding.h"
70 #endif 74 #endif
75
76 #ifdef LWLIB_USES_MOTIF
77 #include <Xm/Xm.h>
78 #endif
79 #include <X11/IntrinsicP.h>
71 80
72 #if INTBITS == 32 81 #if INTBITS == 32
73 # define FOUR_BYTE_TYPE unsigned int 82 # define FOUR_BYTE_TYPE unsigned int
74 #elif LONGBITS == 32 83 #elif LONGBITS == 32
75 # define FOUR_BYTE_TYPE unsigned long 84 # define FOUR_BYTE_TYPE unsigned long
79 #error What kind of strange-ass system are we running on? 88 #error What kind of strange-ass system are we running on?
80 #endif 89 #endif
81 90
82 #define LISP_DEVICE_TO_X_SCREEN(dev) XDefaultScreenOfDisplay (DEVICE_X_DISPLAY (XDEVICE (dev))) 91 #define LISP_DEVICE_TO_X_SCREEN(dev) XDefaultScreenOfDisplay (DEVICE_X_DISPLAY (XDEVICE (dev)))
83 92
93 DECLARE_IMAGE_INSTANTIATOR_FORMAT (nothing);
94 DECLARE_IMAGE_INSTANTIATOR_FORMAT (string);
95 DECLARE_IMAGE_INSTANTIATOR_FORMAT (formatted_string);
96 DECLARE_IMAGE_INSTANTIATOR_FORMAT (inherit);
97 #ifdef HAVE_JPEG
98 DECLARE_IMAGE_INSTANTIATOR_FORMAT (jpeg);
99 #endif
100 #ifdef HAVE_TIFF
101 DECLARE_IMAGE_INSTANTIATOR_FORMAT (tiff);
102 #endif
103 #ifdef HAVE_PNG
104 DECLARE_IMAGE_INSTANTIATOR_FORMAT (png);
105 #endif
106 #ifdef HAVE_GIF
107 DECLARE_IMAGE_INSTANTIATOR_FORMAT (gif);
108 #endif
84 #ifdef HAVE_XPM 109 #ifdef HAVE_XPM
85 DEFINE_DEVICE_IIFORMAT (x, xpm); 110 DEFINE_DEVICE_IIFORMAT (x, xpm);
86 #endif 111 #endif
87 DEFINE_DEVICE_IIFORMAT (x, xbm); 112 DEFINE_DEVICE_IIFORMAT (x, xbm);
88 DEFINE_DEVICE_IIFORMAT (x, subwindow); 113 DEFINE_DEVICE_IIFORMAT (x, subwindow);
94 Lisp_Object Qcursor_font; 119 Lisp_Object Qcursor_font;
95 120
96 DEFINE_IMAGE_INSTANTIATOR_FORMAT (font); 121 DEFINE_IMAGE_INSTANTIATOR_FORMAT (font);
97 122
98 DEFINE_IMAGE_INSTANTIATOR_FORMAT (autodetect); 123 DEFINE_IMAGE_INSTANTIATOR_FORMAT (autodetect);
124
125 DEFINE_DEVICE_IIFORMAT (x, widget);
126 DEFINE_DEVICE_IIFORMAT (x, button);
127 DEFINE_DEVICE_IIFORMAT (x, progress_gauge);
128 DEFINE_DEVICE_IIFORMAT (x, edit_field);
129 DEFINE_DEVICE_IIFORMAT (x, combo_box);
99 130
100 static void cursor_font_instantiate (Lisp_Object image_instance, 131 static void cursor_font_instantiate (Lisp_Object image_instance,
101 Lisp_Object instantiator, 132 Lisp_Object instantiator,
102 Lisp_Object pointer_fg, 133 Lisp_Object pointer_fg,
103 Lisp_Object pointer_bg, 134 Lisp_Object pointer_bg,
334 365
335 if (DEVICE_LIVE_P (XDEVICE (p->device))) 366 if (DEVICE_LIVE_P (XDEVICE (p->device)))
336 { 367 {
337 Display *dpy = DEVICE_X_DISPLAY (XDEVICE (p->device)); 368 Display *dpy = DEVICE_X_DISPLAY (XDEVICE (p->device));
338 369
339 if (IMAGE_INSTANCE_TYPE (p) == IMAGE_WIDGET 370 if (IMAGE_INSTANCE_TYPE (p) == IMAGE_WIDGET)
340 || 371 {
341 IMAGE_INSTANCE_TYPE (p) == IMAGE_SUBWINDOW) 372 if (IMAGE_INSTANCE_SUBWINDOW_ID (p))
373 {
374 XtUnmanageChild (IMAGE_INSTANCE_X_WIDGET_ID (p));
375 XtDestroyWidget (IMAGE_INSTANCE_X_WIDGET_ID (p));
376 IMAGE_INSTANCE_SUBWINDOW_ID (p) = 0;
377 }
378 }
379 else if (IMAGE_INSTANCE_TYPE (p) == IMAGE_SUBWINDOW)
342 { 380 {
343 if (IMAGE_INSTANCE_SUBWINDOW_ID (p)) 381 if (IMAGE_INSTANCE_SUBWINDOW_ID (p))
344 XDestroyWindow (dpy, IMAGE_INSTANCE_X_SUBWINDOW_ID (p)); 382 XDestroyWindow (dpy, IMAGE_INSTANCE_X_SUBWINDOW_ID (p));
345 IMAGE_INSTANCE_SUBWINDOW_ID (p) = 0; 383 IMAGE_INSTANCE_SUBWINDOW_ID (p) = 0;
346 } 384 }
1965 /* unmap the image if it is a widget. This is used by redisplay via 2003 /* unmap the image if it is a widget. This is used by redisplay via
1966 redisplay_unmap_subwindows */ 2004 redisplay_unmap_subwindows */
1967 static void 2005 static void
1968 x_unmap_subwindow (struct Lisp_Image_Instance *p) 2006 x_unmap_subwindow (struct Lisp_Image_Instance *p)
1969 { 2007 {
1970 XUnmapWindow (DisplayOfScreen (IMAGE_INSTANCE_X_SUBWINDOW_SCREEN (p)), 2008 if (IMAGE_INSTANCE_TYPE (p) == IMAGE_SUBWINDOW)
1971 IMAGE_INSTANCE_X_SUBWINDOW_ID (p)); 2009 {
2010 XUnmapWindow
2011 (DisplayOfScreen (IMAGE_INSTANCE_X_SUBWINDOW_SCREEN (p)),
2012 IMAGE_INSTANCE_X_SUBWINDOW_ID (p));
2013 }
2014 else /* must be a widget */
2015 {
2016 XtUnmapWidget (IMAGE_INSTANCE_X_WIDGET_ID (p));
2017 }
1972 } 2018 }
1973 2019
1974 /* map the subwindow. This is used by redisplay via 2020 /* map the subwindow. This is used by redisplay via
1975 redisplay_output_subwindow */ 2021 redisplay_output_subwindow */
1976 static void 2022 static void
1977 x_map_subwindow (struct Lisp_Image_Instance *p, int x, int y) 2023 x_map_subwindow (struct Lisp_Image_Instance *p, int x, int y)
1978 { 2024 {
1979 XMapWindow (DisplayOfScreen (IMAGE_INSTANCE_X_SUBWINDOW_SCREEN (p)), 2025 if (IMAGE_INSTANCE_TYPE (p) == IMAGE_SUBWINDOW)
1980 IMAGE_INSTANCE_X_SUBWINDOW_ID (p)); 2026 {
1981 XMoveWindow (DisplayOfScreen (IMAGE_INSTANCE_X_SUBWINDOW_SCREEN (p)), 2027 Window subwindow = IMAGE_INSTANCE_X_SUBWINDOW_ID (p);
1982 IMAGE_INSTANCE_X_SUBWINDOW_ID (p), x, y); 2028 Screen* screen = IMAGE_INSTANCE_X_SUBWINDOW_SCREEN (p);
2029 XMapWindow (DisplayOfScreen (screen), subwindow);
2030 XMoveWindow (DisplayOfScreen (screen), subwindow, x, y);
2031 }
2032 else /* must be a widget */
2033 {
2034 XtMoveWidget (IMAGE_INSTANCE_X_WIDGET_ID (p),
2035 x + IMAGE_INSTANCE_X_WIDGET_XOFFSET (p),
2036 y + IMAGE_INSTANCE_X_WIDGET_YOFFSET (p));
2037 XtMapWidget (IMAGE_INSTANCE_X_WIDGET_ID (p));
2038 }
2039 }
2040
2041 /* when you click on a widget you may activate another widget this
2042 needs to be checked and all appropriate widgets updated */
2043 static void
2044 x_update_subwindow (struct Lisp_Image_Instance *p)
2045 {
2046 if (IMAGE_INSTANCE_TYPE (p) == IMAGE_WIDGET)
2047 {
2048 widget_value* wv = xmalloc_widget_value ();
2049 button_item_to_widget_value (IMAGE_INSTANCE_WIDGET_SINGLE_ITEM (p),
2050 wv, 1, 1);
2051 lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (p),
2052 wv, 1);
2053 }
1983 } 2054 }
1984 2055
1985 /* instantiate and x type subwindow */ 2056 /* instantiate and x type subwindow */
1986 static void 2057 static void
1987 x_subwindow_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, 2058 x_subwindow_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
2005 signal_simple_error ("Not an X device", device); 2076 signal_simple_error ("Not an X device", device);
2006 2077
2007 dpy = DEVICE_X_DISPLAY (XDEVICE (device)); 2078 dpy = DEVICE_X_DISPLAY (XDEVICE (device));
2008 xs = DefaultScreenOfDisplay (dpy); 2079 xs = DefaultScreenOfDisplay (dpy);
2009 2080
2010 if (dest_mask & IMAGE_SUBWINDOW_MASK) 2081 IMAGE_INSTANCE_TYPE (ii) = IMAGE_SUBWINDOW;
2011 IMAGE_INSTANCE_TYPE (ii) = IMAGE_SUBWINDOW;
2012 else
2013 incompatible_image_types (instantiator, dest_mask,
2014 IMAGE_SUBWINDOW_MASK);
2015 2082
2016 pw = XtWindow (FRAME_X_TEXT_WIDGET (f)); 2083 pw = XtWindow (FRAME_X_TEXT_WIDGET (f));
2017 2084
2018 ii->data = xnew_and_zero (struct x_subwindow_data); 2085 ii->data = xnew_and_zero (struct x_subwindow_data);
2019 2086
2068 XResizeWindow (DisplayOfScreen (IMAGE_INSTANCE_X_SUBWINDOW_SCREEN (ii)), 2135 XResizeWindow (DisplayOfScreen (IMAGE_INSTANCE_X_SUBWINDOW_SCREEN (ii)),
2069 IMAGE_INSTANCE_X_SUBWINDOW_ID (ii), 2136 IMAGE_INSTANCE_X_SUBWINDOW_ID (ii),
2070 w, h); 2137 w, h);
2071 } 2138 }
2072 2139
2140 /************************************************************************/
2141 /* widgets */
2142 /************************************************************************/
2143
2144 static void
2145 x_widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
2146 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
2147 int dest_mask, Lisp_Object domain,
2148 CONST char* type, widget_value* wv)
2149 {
2150 struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
2151 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii), pixel;
2152 struct device* d = XDEVICE (device);
2153 Lisp_Object frame = FW_FRAME (domain);
2154 struct frame* f = XFRAME (frame);
2155 XColor fcolor, bcolor;
2156 Extbyte* nm=0;
2157 Widget wid;
2158 Arg al [32];
2159 int ac = 0;
2160 int id = new_lwlib_id ();
2161
2162 if (!DEVICE_X_P (d))
2163 signal_simple_error ("Not an mswindows device", device);
2164
2165 /* have to set the type this late in case there is no device
2166 instantiation for a widget. But we can go ahead and do it without
2167 checking because there is always a generic instantiator. */
2168 IMAGE_INSTANCE_TYPE (ii) = IMAGE_WIDGET;
2169
2170 if (!NILP (IMAGE_INSTANCE_WIDGET_TEXT (ii)))
2171 GET_C_STRING_OS_DATA_ALLOCA (IMAGE_INSTANCE_WIDGET_TEXT (ii), nm);
2172
2173 ii->data = xnew_and_zero (struct x_subwindow_data);
2174
2175 /* copy any args we were given */
2176 if (wv->nargs)
2177 lw_add_value_args_to_args (wv, al, &ac);
2178
2179 /* add our own arguments */
2180 pixel = FACE_FOREGROUND
2181 (IMAGE_INSTANCE_WIDGET_FACE (ii),
2182 IMAGE_INSTANCE_SUBWINDOW_FRAME (ii));
2183 fcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel));
2184 pixel = FACE_BACKGROUND
2185 (IMAGE_INSTANCE_WIDGET_FACE (ii),
2186 IMAGE_INSTANCE_SUBWINDOW_FRAME (ii));
2187 bcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel));
2188
2189 XtSetArg (al [ac], XtNbackground, bcolor.pixel); ac++;
2190 XtSetArg (al [ac], XtNforeground, fcolor.pixel); ac++;
2191 XtSetArg (al [ac], XtNfont, (void*)FONT_INSTANCE_X_FONT
2192 (XFONT_INSTANCE (widget_face_font_info
2193 (domain,
2194 IMAGE_INSTANCE_WIDGET_FACE (ii),
2195 0, 0)))); ac++;
2196
2197 wv->nargs = ac;
2198 wv->args = al;
2199
2200 wid = lw_create_widget (type, wv->name, id, wv, FRAME_X_CONTAINER_WIDGET (f),
2201 False, 0, popup_selection_callback, 0);
2202
2203 IMAGE_INSTANCE_X_WIDGET_LWID (ii) = id;
2204
2205 /* because the EmacsManager is the widgets parent we have to
2206 offset the redisplay of the widget by the amount the text
2207 widget is inside the manager. */
2208 ac = 0;
2209 XtSetArg (al [ac], XtNwidth,
2210 (Dimension)IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii)); ac++;
2211 XtSetArg (al [ac], XtNheight,
2212 (Dimension)IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii)); ac++;
2213 XtSetValues (wid, al, ac);
2214 /* finally get offsets in the frame */
2215 ac = 0;
2216 XtSetArg (al [ac], XtNx, &IMAGE_INSTANCE_X_WIDGET_XOFFSET (ii)); ac++;
2217 XtSetArg (al [ac], XtNy, &IMAGE_INSTANCE_X_WIDGET_YOFFSET (ii)); ac++;
2218 XtGetValues (FRAME_X_TEXT_WIDGET (f), al, ac);
2219
2220 IMAGE_INSTANCE_SUBWINDOW_ID (ii) = (void*)wid;
2221
2222 free_widget_value (wv);
2223 }
2224
2225 static Lisp_Object
2226 x_widget_set_property (Lisp_Object image_instance, Lisp_Object prop,
2227 Lisp_Object val)
2228 {
2229 struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
2230
2231 if (EQ (prop, Q_text))
2232 {
2233 Extbyte* str=0;
2234 widget_value* wv = lw_get_all_values (IMAGE_INSTANCE_X_WIDGET_LWID (ii));
2235 CHECK_STRING (val);
2236 GET_C_STRING_OS_DATA_ALLOCA (val, str);
2237 wv->value = str;
2238 lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (ii), wv, False);
2239 return Qt;
2240 }
2241 return Qunbound;
2242 }
2243
2244 /* get properties of a control */
2245 static Lisp_Object
2246 x_widget_property (Lisp_Object image_instance, Lisp_Object prop)
2247 {
2248 struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
2249 /* get the text from a control */
2250 if (EQ (prop, Q_text))
2251 {
2252 widget_value* wv = lw_get_all_values (IMAGE_INSTANCE_X_WIDGET_LWID (ii));
2253 return build_ext_string (wv->value, FORMAT_OS);
2254 }
2255 return Qunbound;
2256 }
2257
2258 /* Instantiate a button widget. Unfortunately instantiated widgets are
2259 particular to a frame since they need to have a parent. It's not
2260 like images where you just select the image into the context you
2261 want to display it in and BitBlt it. So images instances can have a
2262 many-to-one relationship with things you see, whereas widgets can
2263 only be one-to-one (i.e. per frame) */
2264 static void
2265 x_button_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
2266 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
2267 int dest_mask, Lisp_Object domain)
2268 {
2269 struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
2270 Lisp_Object gui = IMAGE_INSTANCE_WIDGET_ITEM (ii);
2271 Lisp_Object glyph = find_keyword_in_vector (instantiator, Q_image);
2272 widget_value* wv = xmalloc_widget_value ();
2273
2274 button_item_to_widget_value (gui, wv, 1, 1);
2275
2276 if (!NILP (glyph))
2277 {
2278 if (!IMAGE_INSTANCEP (glyph))
2279 glyph = glyph_image_instance (glyph, domain, ERROR_ME, 1);
2280 }
2281
2282 x_widget_instantiate (image_instance, instantiator, pointer_fg,
2283 pointer_bg, dest_mask, domain, "button", wv);
2284
2285 /* add the image if one was given */
2286 if (!NILP (glyph) && IMAGE_INSTANCEP (glyph))
2287 {
2288 Arg al [2];
2289 int ac =0;
2290 #ifdef LWLIB_USES_MOTIF
2291 XtSetArg (al [ac], XmNlabelType, XmPIXMAP); ac++;
2292 XtSetArg (al [ac], XmNlabelPixmap, XIMAGE_INSTANCE_X_PIXMAP (glyph));ac++;
2293 #else
2294 XtSetArg (al [ac], XtNpixmap, XIMAGE_INSTANCE_X_PIXMAP (glyph)); ac++;
2295 #endif
2296 XtSetValues (IMAGE_INSTANCE_X_WIDGET_ID (ii), al, ac);
2297 }
2298 }
2299
2300 /* get properties of a button */
2301 static Lisp_Object
2302 x_button_property (Lisp_Object image_instance, Lisp_Object prop)
2303 {
2304 struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
2305 /* check the state of a button */
2306 if (EQ (prop, Q_selected))
2307 {
2308 widget_value* wv = lw_get_all_values (IMAGE_INSTANCE_X_WIDGET_LWID (ii));
2309
2310 if (wv->selected)
2311 return Qt;
2312 else
2313 return Qnil;
2314 }
2315 return Qunbound;
2316 }
2317
2318 /* instantiate a progress gauge */
2319 static void
2320 x_progress_gauge_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
2321 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
2322 int dest_mask, Lisp_Object domain)
2323 {
2324 struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
2325 Lisp_Object gui = IMAGE_INSTANCE_WIDGET_ITEM (ii);
2326 widget_value* wv = xmalloc_widget_value ();
2327
2328 button_item_to_widget_value (gui, wv, 1, 1);
2329
2330 x_widget_instantiate (image_instance, instantiator, pointer_fg,
2331 pointer_bg, dest_mask, domain, "progress", wv);
2332 }
2333
2334 /* set the properties of a progres guage */
2335 static Lisp_Object
2336 x_progress_gauge_set_property (Lisp_Object image_instance, Lisp_Object prop,
2337 Lisp_Object val)
2338 {
2339 struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
2340
2341 if (EQ (prop, Q_percent))
2342 {
2343 Arg al [1];
2344 CHECK_INT (val);
2345 XtSetArg (al[0], XtNvalue, XINT (val));
2346 XtSetValues (IMAGE_INSTANCE_X_WIDGET_ID (ii), al, 1);
2347 return Qt;
2348 }
2349 return Qunbound;
2350 }
2351
2352 /* instantiate an edit control */
2353 static void
2354 x_edit_field_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
2355 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
2356 int dest_mask, Lisp_Object domain)
2357 {
2358 struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
2359 Lisp_Object gui = IMAGE_INSTANCE_WIDGET_ITEM (ii);
2360 widget_value* wv = xmalloc_widget_value ();
2361
2362 button_item_to_widget_value (gui, wv, 1, 1);
2363
2364 x_widget_instantiate (image_instance, instantiator, pointer_fg,
2365 pointer_bg, dest_mask, domain, "text-field", wv);
2366 }
2367
2368 /* instantiate a combo control */
2369 static void
2370 x_combo_box_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
2371 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
2372 int dest_mask, Lisp_Object domain)
2373 {
2374 struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
2375 Lisp_Object rest;
2376 Lisp_Object gui = IMAGE_INSTANCE_WIDGET_ITEM (ii);
2377 widget_value* wv = xmalloc_widget_value ();
2378
2379 button_item_to_widget_value (gui, wv, 1, 1);
2380
2381 x_widget_instantiate (image_instance, instantiator, pointer_fg,
2382 pointer_bg, dest_mask, domain, "combo-box", wv);
2383 /* add items to the combo box */
2384 LIST_LOOP (rest, Fplist_get (IMAGE_INSTANCE_WIDGET_PROPS (ii), Q_items, Qnil))
2385 {
2386 #if 0
2387 Extbyte* str;
2388 XmString xmstr;
2389 GET_C_STRING_OS_DATA_ALLOCA (XCAR (rest), str);
2390 xmstr = XmStringCreate (str, XmSTRING_DEFAULT_CHARSET);
2391 XmListAddItem (IMAGE_INSTANCE_X_WIDGET_ID (ii), xmstr, 0);
2392 XmStringFree (xmstr);
2393 #endif
2394 }
2395 }
2396
2073 2397
2074 /************************************************************************/ 2398 /************************************************************************/
2075 /* initialization */ 2399 /* initialization */
2076 /************************************************************************/ 2400 /************************************************************************/
2077 2401
2096 CONSOLE_HAS_METHOD (x, init_image_instance_from_eimage); 2420 CONSOLE_HAS_METHOD (x, init_image_instance_from_eimage);
2097 CONSOLE_HAS_METHOD (x, locate_pixmap_file); 2421 CONSOLE_HAS_METHOD (x, locate_pixmap_file);
2098 CONSOLE_HAS_METHOD (x, unmap_subwindow); 2422 CONSOLE_HAS_METHOD (x, unmap_subwindow);
2099 CONSOLE_HAS_METHOD (x, map_subwindow); 2423 CONSOLE_HAS_METHOD (x, map_subwindow);
2100 CONSOLE_HAS_METHOD (x, resize_subwindow); 2424 CONSOLE_HAS_METHOD (x, resize_subwindow);
2425 CONSOLE_HAS_METHOD (x, update_subwindow);
2101 } 2426 }
2102 2427
2103 void 2428 void
2104 image_instantiator_format_create_glyphs_x (void) 2429 image_instantiator_format_create_glyphs_x (void)
2105 { 2430 {
2431 IIFORMAT_VALID_CONSOLE (x, nothing);
2432 IIFORMAT_VALID_CONSOLE (x, string);
2433 IIFORMAT_VALID_CONSOLE (x, formatted_string);
2434 IIFORMAT_VALID_CONSOLE (x, inherit);
2106 #ifdef HAVE_XPM 2435 #ifdef HAVE_XPM
2107 INITIALIZE_DEVICE_IIFORMAT (x, xpm); 2436 INITIALIZE_DEVICE_IIFORMAT (x, xpm);
2108 IIFORMAT_HAS_DEVMETHOD (x, xpm, instantiate); 2437 IIFORMAT_HAS_DEVMETHOD (x, xpm, instantiate);
2109 #endif 2438 #endif
2439 #ifdef HAVE_JPEG
2440 IIFORMAT_VALID_CONSOLE (x, jpeg);
2441 #endif
2442 #ifdef HAVE_TIFF
2443 IIFORMAT_VALID_CONSOLE (x, tiff);
2444 #endif
2445 #ifdef HAVE_PNG
2446 IIFORMAT_VALID_CONSOLE (x, png);
2447 #endif
2448 #ifdef HAVE_GIF
2449 IIFORMAT_VALID_CONSOLE (x, gif);
2450 #endif
2110 INITIALIZE_DEVICE_IIFORMAT (x, xbm); 2451 INITIALIZE_DEVICE_IIFORMAT (x, xbm);
2111 IIFORMAT_HAS_DEVMETHOD (x, xbm, instantiate); 2452 IIFORMAT_HAS_DEVMETHOD (x, xbm, instantiate);
2112 2453
2113 INITIALIZE_DEVICE_IIFORMAT (x, subwindow); 2454 INITIALIZE_DEVICE_IIFORMAT (x, subwindow);
2114 IIFORMAT_HAS_DEVMETHOD (x, subwindow, instantiate); 2455 IIFORMAT_HAS_DEVMETHOD (x, subwindow, instantiate);
2115 2456
2457 /* button widget */
2458 INITIALIZE_DEVICE_IIFORMAT (x, button);
2459 IIFORMAT_HAS_DEVMETHOD (x, button, property);
2460 IIFORMAT_HAS_DEVMETHOD (x, button, instantiate);
2461
2462 INITIALIZE_DEVICE_IIFORMAT (x, widget);
2463 IIFORMAT_HAS_DEVMETHOD (x, widget, property);
2464 IIFORMAT_HAS_DEVMETHOD (x, widget, set_property);
2465 /* progress gauge */
2466 INITIALIZE_DEVICE_IIFORMAT (x, progress_gauge);
2467 IIFORMAT_HAS_DEVMETHOD (x, progress_gauge, set_property);
2468 IIFORMAT_HAS_DEVMETHOD (x, progress_gauge, instantiate);
2469 /* text field */
2470 INITIALIZE_DEVICE_IIFORMAT (x, edit_field);
2471 IIFORMAT_HAS_DEVMETHOD (x, edit_field, instantiate);
2472 /* combo box */
2473 INITIALIZE_DEVICE_IIFORMAT (x, combo_box);
2474 IIFORMAT_HAS_DEVMETHOD (x, combo_box, instantiate);
2475
2116 INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (cursor_font, "cursor-font"); 2476 INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (cursor_font, "cursor-font");
2477 IIFORMAT_VALID_CONSOLE (x, cursor_font);
2117 2478
2118 IIFORMAT_HAS_METHOD (cursor_font, validate); 2479 IIFORMAT_HAS_METHOD (cursor_font, validate);
2119 IIFORMAT_HAS_METHOD (cursor_font, possible_dest_types); 2480 IIFORMAT_HAS_METHOD (cursor_font, possible_dest_types);
2120 IIFORMAT_HAS_METHOD (cursor_font, instantiate); 2481 IIFORMAT_HAS_METHOD (cursor_font, instantiate);
2121 2482
2126 INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (font, "font"); 2487 INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (font, "font");
2127 2488
2128 IIFORMAT_HAS_METHOD (font, validate); 2489 IIFORMAT_HAS_METHOD (font, validate);
2129 IIFORMAT_HAS_METHOD (font, possible_dest_types); 2490 IIFORMAT_HAS_METHOD (font, possible_dest_types);
2130 IIFORMAT_HAS_METHOD (font, instantiate); 2491 IIFORMAT_HAS_METHOD (font, instantiate);
2492 IIFORMAT_VALID_CONSOLE (x, font);
2131 2493
2132 IIFORMAT_VALID_KEYWORD (font, Q_data, check_valid_string); 2494 IIFORMAT_VALID_KEYWORD (font, Q_data, check_valid_string);
2133 IIFORMAT_VALID_KEYWORD (font, Q_foreground, check_valid_string); 2495 IIFORMAT_VALID_KEYWORD (font, Q_foreground, check_valid_string);
2134 IIFORMAT_VALID_KEYWORD (font, Q_background, check_valid_string); 2496 IIFORMAT_VALID_KEYWORD (font, Q_background, check_valid_string);
2135 2497
2143 2505
2144 IIFORMAT_HAS_METHOD (autodetect, validate); 2506 IIFORMAT_HAS_METHOD (autodetect, validate);
2145 IIFORMAT_HAS_METHOD (autodetect, normalize); 2507 IIFORMAT_HAS_METHOD (autodetect, normalize);
2146 IIFORMAT_HAS_METHOD (autodetect, possible_dest_types); 2508 IIFORMAT_HAS_METHOD (autodetect, possible_dest_types);
2147 IIFORMAT_HAS_METHOD (autodetect, instantiate); 2509 IIFORMAT_HAS_METHOD (autodetect, instantiate);
2510 IIFORMAT_VALID_CONSOLE (x, autodetect);
2148 2511
2149 IIFORMAT_VALID_KEYWORD (autodetect, Q_data, check_valid_string); 2512 IIFORMAT_VALID_KEYWORD (autodetect, Q_data, check_valid_string);
2150 } 2513 }
2151 2514
2152 void 2515 void