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