Mercurial > hg > xemacs-beta
comparison src/glyphs-x.c @ 408:501cfd01ee6d r21-2-34
Import from CVS: tag r21-2-34
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:18:11 +0200 |
parents | b8cc9ab3f761 |
children | de805c49cfc1 |
comparison
equal
deleted
inserted
replaced
407:ed6218a7d4d3 | 408:501cfd01ee6d |
---|---|
96 | 96 |
97 DECLARE_IMAGE_INSTANTIATOR_FORMAT (nothing); | 97 DECLARE_IMAGE_INSTANTIATOR_FORMAT (nothing); |
98 DECLARE_IMAGE_INSTANTIATOR_FORMAT (string); | 98 DECLARE_IMAGE_INSTANTIATOR_FORMAT (string); |
99 DECLARE_IMAGE_INSTANTIATOR_FORMAT (formatted_string); | 99 DECLARE_IMAGE_INSTANTIATOR_FORMAT (formatted_string); |
100 DECLARE_IMAGE_INSTANTIATOR_FORMAT (inherit); | 100 DECLARE_IMAGE_INSTANTIATOR_FORMAT (inherit); |
101 DECLARE_IMAGE_INSTANTIATOR_FORMAT (layout); | |
102 #ifdef HAVE_JPEG | 101 #ifdef HAVE_JPEG |
103 DECLARE_IMAGE_INSTANTIATOR_FORMAT (jpeg); | 102 DECLARE_IMAGE_INSTANTIATOR_FORMAT (jpeg); |
104 #endif | 103 #endif |
105 #ifdef HAVE_TIFF | 104 #ifdef HAVE_TIFF |
106 DECLARE_IMAGE_INSTANTIATOR_FORMAT (tiff); | 105 DECLARE_IMAGE_INSTANTIATOR_FORMAT (tiff); |
126 DEFINE_IMAGE_INSTANTIATOR_FORMAT (font); | 125 DEFINE_IMAGE_INSTANTIATOR_FORMAT (font); |
127 | 126 |
128 DEFINE_IMAGE_INSTANTIATOR_FORMAT (autodetect); | 127 DEFINE_IMAGE_INSTANTIATOR_FORMAT (autodetect); |
129 | 128 |
130 #ifdef HAVE_WIDGETS | 129 #ifdef HAVE_WIDGETS |
130 DECLARE_IMAGE_INSTANTIATOR_FORMAT (layout); | |
131 DEFINE_DEVICE_IIFORMAT (x, widget); | 131 DEFINE_DEVICE_IIFORMAT (x, widget); |
132 DEFINE_DEVICE_IIFORMAT (x, native_layout); | |
132 DEFINE_DEVICE_IIFORMAT (x, button); | 133 DEFINE_DEVICE_IIFORMAT (x, button); |
133 DEFINE_DEVICE_IIFORMAT (x, progress_gauge); | 134 DEFINE_DEVICE_IIFORMAT (x, progress_gauge); |
134 DEFINE_DEVICE_IIFORMAT (x, edit_field); | 135 DEFINE_DEVICE_IIFORMAT (x, edit_field); |
135 #if defined (LWLIB_WIDGETS_MOTIF) && XmVERSION > 1 | 136 #if defined (LWLIB_WIDGETS_MOTIF) && XmVERSION > 1 |
136 DEFINE_DEVICE_IIFORMAT (x, combo_box); | 137 DEFINE_DEVICE_IIFORMAT (x, combo_box); |
392 x_finalize_image_instance (Lisp_Image_Instance *p) | 393 x_finalize_image_instance (Lisp_Image_Instance *p) |
393 { | 394 { |
394 if (!p->data) | 395 if (!p->data) |
395 return; | 396 return; |
396 | 397 |
397 if (DEVICE_LIVE_P (XDEVICE (p->device))) | 398 if (DEVICE_LIVE_P (XDEVICE (IMAGE_INSTANCE_DEVICE (p)))) |
398 { | 399 { |
399 Display *dpy = DEVICE_X_DISPLAY (XDEVICE (p->device)); | 400 Display *dpy = DEVICE_X_DISPLAY |
400 | 401 (XDEVICE (IMAGE_INSTANCE_DEVICE (p))); |
401 if (IMAGE_INSTANCE_TYPE (p) == IMAGE_WIDGET) | 402 if (0) |
403 ; | |
404 #ifdef HAVE_WIDGETS | |
405 else if (IMAGE_INSTANCE_TYPE (p) == IMAGE_WIDGET) | |
402 { | 406 { |
403 if (IMAGE_INSTANCE_SUBWINDOW_ID (p)) | 407 if (IMAGE_INSTANCE_SUBWINDOW_ID (p)) |
404 { | 408 { |
405 #ifdef DEBUG_WIDGETS | 409 #ifdef DEBUG_WIDGETS |
406 debug_widget_instances--; | 410 debug_widget_instances--; |
407 stderr_out ("widget destroyed, %d left\n", debug_widget_instances); | 411 stderr_out ("widget destroyed, %d left\n", debug_widget_instances); |
408 #endif | 412 #endif |
409 lw_destroy_widget (IMAGE_INSTANCE_X_WIDGET_ID (p)); | 413 lw_destroy_widget (IMAGE_INSTANCE_X_WIDGET_ID (p)); |
410 lw_destroy_widget (IMAGE_INSTANCE_X_CLIPWIDGET (p)); | 414 lw_destroy_widget (IMAGE_INSTANCE_X_CLIPWIDGET (p)); |
415 | |
416 /* We can release the callbacks again. */ | |
417 ungcpro_popup_callbacks (IMAGE_INSTANCE_X_WIDGET_LWID (p)); | |
418 | |
411 IMAGE_INSTANCE_X_WIDGET_ID (p) = 0; | 419 IMAGE_INSTANCE_X_WIDGET_ID (p) = 0; |
412 IMAGE_INSTANCE_X_CLIPWIDGET (p) = 0; | 420 IMAGE_INSTANCE_X_CLIPWIDGET (p) = 0; |
413 } | 421 } |
414 } | 422 } |
423 #endif | |
415 else if (IMAGE_INSTANCE_TYPE (p) == IMAGE_SUBWINDOW) | 424 else if (IMAGE_INSTANCE_TYPE (p) == IMAGE_SUBWINDOW) |
416 { | 425 { |
417 if (IMAGE_INSTANCE_SUBWINDOW_ID (p)) | 426 if (IMAGE_INSTANCE_SUBWINDOW_ID (p)) |
418 XDestroyWindow (dpy, IMAGE_INSTANCE_X_SUBWINDOW_ID (p)); | 427 XDestroyWindow (dpy, IMAGE_INSTANCE_X_SUBWINDOW_ID (p)); |
419 IMAGE_INSTANCE_SUBWINDOW_ID (p) = 0; | 428 IMAGE_INSTANCE_SUBWINDOW_ID (p) = 0; |
2208 return; | 2217 return; |
2209 | 2218 |
2210 /* Possibly update the colors and font */ | 2219 /* Possibly update the colors and font */ |
2211 if (IMAGE_INSTANCE_WIDGET_FACE_CHANGED (p) | 2220 if (IMAGE_INSTANCE_WIDGET_FACE_CHANGED (p) |
2212 || | 2221 || |
2213 XFRAME (IMAGE_INSTANCE_SUBWINDOW_FRAME (p))->faces_changed | 2222 XFRAME (IMAGE_INSTANCE_FRAME (p))->faces_changed |
2214 || | 2223 || |
2215 IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (p)) | 2224 IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (p)) |
2216 { | 2225 { |
2217 update_widget_face (wv, p, IMAGE_INSTANCE_SUBWINDOW_FRAME (p)); | 2226 update_widget_face (wv, p, IMAGE_INSTANCE_FRAME (p)); |
2218 } | 2227 } |
2219 | 2228 |
2220 /* Possibly update the text. */ | 2229 /* Possibly update the text. */ |
2221 if (IMAGE_INSTANCE_TEXT_CHANGED (p)) | 2230 if (IMAGE_INSTANCE_TEXT_CHANGED (p)) |
2222 { | 2231 { |
2265 int dest_mask, Lisp_Object domain) | 2274 int dest_mask, Lisp_Object domain) |
2266 { | 2275 { |
2267 /* This function can GC */ | 2276 /* This function can GC */ |
2268 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance); | 2277 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance); |
2269 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii); | 2278 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii); |
2270 Lisp_Object frame = FW_FRAME (domain); | 2279 Lisp_Object frame = DOMAIN_FRAME (domain); |
2271 struct frame* f = XFRAME (frame); | 2280 struct frame* f = XFRAME (frame); |
2272 Display *dpy; | 2281 Display *dpy; |
2273 Screen *xs; | 2282 Screen *xs; |
2274 Window pw, win; | 2283 Window pw, win; |
2275 XSetWindowAttributes xswa; | 2284 XSetWindowAttributes xswa; |
2276 Mask valueMask = 0; | 2285 Mask valueMask = 0; |
2277 unsigned int w = IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii), | 2286 unsigned int w = IMAGE_INSTANCE_WIDTH (ii), |
2278 h = IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii); | 2287 h = IMAGE_INSTANCE_HEIGHT (ii); |
2279 | 2288 |
2280 if (!DEVICE_X_P (XDEVICE (device))) | 2289 if (!DEVICE_X_P (XDEVICE (device))) |
2281 signal_simple_error ("Not an X device", device); | 2290 signal_simple_error ("Not an X device", device); |
2282 | 2291 |
2283 dpy = DEVICE_X_DISPLAY (XDEVICE (device)); | 2292 dpy = DEVICE_X_DISPLAY (XDEVICE (device)); |
2418 const char* type, widget_value* wv) | 2427 const char* type, widget_value* wv) |
2419 { | 2428 { |
2420 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance); | 2429 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance); |
2421 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii), pixel; | 2430 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii), pixel; |
2422 struct device* d = XDEVICE (device); | 2431 struct device* d = XDEVICE (device); |
2423 Lisp_Object frame = FW_FRAME (domain); | 2432 Lisp_Object frame = DOMAIN_FRAME (domain); |
2424 struct frame* f = XFRAME (frame); | 2433 struct frame* f = XFRAME (frame); |
2425 char* nm=0; | 2434 char* nm=0; |
2426 Widget wid; | 2435 Widget wid; |
2427 Arg al [32]; | 2436 Arg al [32]; |
2428 int ac = 0; | 2437 int ac = 0; |
2476 created so that Motif will fix up the shadow colors | 2485 created so that Motif will fix up the shadow colors |
2477 correctly. Once the widget is created Motif won't do this | 2486 correctly. Once the widget is created Motif won't do this |
2478 anymore...*/ | 2487 anymore...*/ |
2479 pixel = FACE_FOREGROUND | 2488 pixel = FACE_FOREGROUND |
2480 (IMAGE_INSTANCE_WIDGET_FACE (ii), | 2489 (IMAGE_INSTANCE_WIDGET_FACE (ii), |
2481 IMAGE_INSTANCE_SUBWINDOW_FRAME (ii)); | 2490 IMAGE_INSTANCE_FRAME (ii)); |
2482 fcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel)); | 2491 fcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel)); |
2483 | 2492 |
2484 pixel = FACE_BACKGROUND | 2493 pixel = FACE_BACKGROUND |
2485 (IMAGE_INSTANCE_WIDGET_FACE (ii), | 2494 (IMAGE_INSTANCE_WIDGET_FACE (ii), |
2486 IMAGE_INSTANCE_SUBWINDOW_FRAME (ii)); | 2495 IMAGE_INSTANCE_FRAME (ii)); |
2487 bcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel)); | 2496 bcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel)); |
2488 | 2497 |
2489 lw_add_widget_value_arg (wv, XtNbackground, bcolor.pixel); | 2498 lw_add_widget_value_arg (wv, XtNbackground, bcolor.pixel); |
2490 lw_add_widget_value_arg (wv, XtNforeground, fcolor.pixel); | 2499 lw_add_widget_value_arg (wv, XtNforeground, fcolor.pixel); |
2491 /* we cannot allow widgets to resize themselves */ | 2500 /* we cannot allow widgets to resize themselves */ |
2511 XtGetValues (FRAME_X_TEXT_WIDGET (f), al, ac); | 2520 XtGetValues (FRAME_X_TEXT_WIDGET (f), al, ac); |
2512 | 2521 |
2513 XtSetMappedWhenManaged (wid, TRUE); | 2522 XtSetMappedWhenManaged (wid, TRUE); |
2514 | 2523 |
2515 free_widget_value_tree (wv); | 2524 free_widget_value_tree (wv); |
2525 /* A kludgy but simple way to make sure the callback for a widget | |
2526 doesn't get deleted. */ | |
2527 gcpro_popup_callbacks (id); | |
2516 } | 2528 } |
2517 | 2529 |
2518 /* get properties of a control */ | 2530 /* get properties of a control */ |
2519 static Lisp_Object | 2531 static Lisp_Object |
2520 x_widget_property (Lisp_Object image_instance, Lisp_Object prop) | 2532 x_widget_property (Lisp_Object image_instance, Lisp_Object prop) |
2525 { | 2537 { |
2526 widget_value* wv = lw_get_all_values (IMAGE_INSTANCE_X_WIDGET_LWID (ii)); | 2538 widget_value* wv = lw_get_all_values (IMAGE_INSTANCE_X_WIDGET_LWID (ii)); |
2527 return build_ext_string (wv->value, Qnative); | 2539 return build_ext_string (wv->value, Qnative); |
2528 } | 2540 } |
2529 return Qunbound; | 2541 return Qunbound; |
2542 } | |
2543 | |
2544 /* Instantiate a layout control for putting other widgets in. */ | |
2545 static void | |
2546 x_native_layout_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, | |
2547 Lisp_Object pointer_fg, Lisp_Object pointer_bg, | |
2548 int dest_mask, Lisp_Object domain) | |
2549 { | |
2550 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance); | |
2551 | |
2552 x_widget_instantiate (image_instance, instantiator, pointer_fg, | |
2553 pointer_bg, dest_mask, domain, "layout", 0); | |
2530 } | 2554 } |
2531 | 2555 |
2532 /* Instantiate a button widget. Unfortunately instantiated widgets are | 2556 /* Instantiate a button widget. Unfortunately instantiated widgets are |
2533 particular to a frame since they need to have a parent. It's not | 2557 particular to a frame since they need to have a parent. It's not |
2534 like images where you just select the image into the context you | 2558 like images where you just select the image into the context you |
2690 widget_value * wv = | 2714 widget_value * wv = |
2691 gui_items_to_widget_values (image_instance, | 2715 gui_items_to_widget_values (image_instance, |
2692 IMAGE_INSTANCE_WIDGET_ITEMS (ii)); | 2716 IMAGE_INSTANCE_WIDGET_ITEMS (ii)); |
2693 | 2717 |
2694 update_tab_widget_face (wv, ii, | 2718 update_tab_widget_face (wv, ii, |
2695 IMAGE_INSTANCE_SUBWINDOW_FRAME (ii)); | 2719 IMAGE_INSTANCE_FRAME (ii)); |
2696 | 2720 |
2697 x_widget_instantiate (image_instance, instantiator, pointer_fg, | 2721 x_widget_instantiate (image_instance, instantiator, pointer_fg, |
2698 pointer_bg, dest_mask, domain, "tab-control", wv); | 2722 pointer_bg, dest_mask, domain, "tab-control", wv); |
2699 } | 2723 } |
2700 | 2724 |
2705 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance); | 2729 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance); |
2706 | 2730 |
2707 /* Possibly update the face. */ | 2731 /* Possibly update the face. */ |
2708 if (IMAGE_INSTANCE_WIDGET_FACE_CHANGED (ii) | 2732 if (IMAGE_INSTANCE_WIDGET_FACE_CHANGED (ii) |
2709 || | 2733 || |
2710 XFRAME (IMAGE_INSTANCE_SUBWINDOW_FRAME (ii))->faces_changed | 2734 XFRAME (IMAGE_INSTANCE_FRAME (ii))->faces_changed |
2711 || | 2735 || |
2712 IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (ii)) | 2736 IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (ii)) |
2713 { | 2737 { |
2714 widget_value* wv = lw_get_all_values (IMAGE_INSTANCE_X_WIDGET_LWID (ii)); | 2738 widget_value* wv = lw_get_all_values (IMAGE_INSTANCE_X_WIDGET_LWID (ii)); |
2715 | 2739 |
2716 /* #### I don't know why this can occur. */ | 2740 /* #### I don't know why this can occur. */ |
2717 if (!wv) | 2741 if (!wv) |
2718 return; | 2742 return; |
2719 | 2743 |
2720 update_tab_widget_face (wv, ii, | 2744 update_tab_widget_face (wv, ii, |
2721 IMAGE_INSTANCE_SUBWINDOW_FRAME (ii)); | 2745 IMAGE_INSTANCE_FRAME (ii)); |
2722 | 2746 |
2723 lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (ii), wv, True); | 2747 lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (ii), wv, True); |
2724 } | 2748 } |
2725 } | 2749 } |
2726 | 2750 |
2773 void | 2797 void |
2774 image_instantiator_format_create_glyphs_x (void) | 2798 image_instantiator_format_create_glyphs_x (void) |
2775 { | 2799 { |
2776 IIFORMAT_VALID_CONSOLE (x, nothing); | 2800 IIFORMAT_VALID_CONSOLE (x, nothing); |
2777 IIFORMAT_VALID_CONSOLE (x, string); | 2801 IIFORMAT_VALID_CONSOLE (x, string); |
2802 #ifdef HAVE_WIDGETS | |
2778 IIFORMAT_VALID_CONSOLE (x, layout); | 2803 IIFORMAT_VALID_CONSOLE (x, layout); |
2804 #endif | |
2779 IIFORMAT_VALID_CONSOLE (x, formatted_string); | 2805 IIFORMAT_VALID_CONSOLE (x, formatted_string); |
2780 IIFORMAT_VALID_CONSOLE (x, inherit); | 2806 IIFORMAT_VALID_CONSOLE (x, inherit); |
2781 #ifdef HAVE_XPM | 2807 #ifdef HAVE_XPM |
2782 INITIALIZE_DEVICE_IIFORMAT (x, xpm); | 2808 INITIALIZE_DEVICE_IIFORMAT (x, xpm); |
2783 IIFORMAT_HAS_DEVMETHOD (x, xpm, instantiate); | 2809 IIFORMAT_HAS_DEVMETHOD (x, xpm, instantiate); |
2798 IIFORMAT_HAS_DEVMETHOD (x, xbm, instantiate); | 2824 IIFORMAT_HAS_DEVMETHOD (x, xbm, instantiate); |
2799 | 2825 |
2800 INITIALIZE_DEVICE_IIFORMAT (x, subwindow); | 2826 INITIALIZE_DEVICE_IIFORMAT (x, subwindow); |
2801 IIFORMAT_HAS_DEVMETHOD (x, subwindow, instantiate); | 2827 IIFORMAT_HAS_DEVMETHOD (x, subwindow, instantiate); |
2802 #ifdef HAVE_WIDGETS | 2828 #ifdef HAVE_WIDGETS |
2829 /* layout widget */ | |
2830 INITIALIZE_DEVICE_IIFORMAT (x, native_layout); | |
2831 IIFORMAT_HAS_DEVMETHOD (x, native_layout, instantiate); | |
2803 /* button widget */ | 2832 /* button widget */ |
2804 INITIALIZE_DEVICE_IIFORMAT (x, button); | 2833 INITIALIZE_DEVICE_IIFORMAT (x, button); |
2805 IIFORMAT_HAS_DEVMETHOD (x, button, property); | 2834 IIFORMAT_HAS_DEVMETHOD (x, button, property); |
2806 IIFORMAT_HAS_DEVMETHOD (x, button, instantiate); | 2835 IIFORMAT_HAS_DEVMETHOD (x, button, instantiate); |
2807 IIFORMAT_HAS_DEVMETHOD (x, button, update); | 2836 IIFORMAT_HAS_DEVMETHOD (x, button, update); |
2808 | 2837 /* general widget methods. */ |
2809 INITIALIZE_DEVICE_IIFORMAT (x, widget); | 2838 INITIALIZE_DEVICE_IIFORMAT (x, widget); |
2810 IIFORMAT_HAS_DEVMETHOD (x, widget, property); | 2839 IIFORMAT_HAS_DEVMETHOD (x, widget, property); |
2811 /* progress gauge */ | 2840 /* progress gauge */ |
2812 INITIALIZE_DEVICE_IIFORMAT (x, progress_gauge); | 2841 INITIALIZE_DEVICE_IIFORMAT (x, progress_gauge); |
2813 IIFORMAT_HAS_DEVMETHOD (x, progress_gauge, update); | 2842 IIFORMAT_HAS_DEVMETHOD (x, progress_gauge, update); |