annotate lisp/glyphs.el @ 2720:6fa9919a9a0b

[xemacs-hg @ 2005-04-08 23:10:01 by crestani] ChangeLog addition: 2005-04-01  Marcus Crestani  <crestani@xemacs.org>         The new allocator.         New configure flag: `MC_ALLOC':         * configure.ac (XE_COMPLEX_ARG_ENABLE): Add `--enable-mc-alloc' as         a new configure flag.         * configure.in (AC_INIT_PARSE_ARGS): Add `--mc-alloc' as a new         configure flag.         * configure.usage: Add description for `mc-alloc'.         DUMP_IN_EXEC:         * Makefile.in.in: Condition the installation of a separate dump         file on !DUMP_ON_EXEC.         * configure.ac (XE_COMPLEX_ARG_ENABLE): Add         `--enable-dump-in-exec' as a new configure flag.         * configure.ac: DUMP_IN_EXEC is define as default for PDUMP but         not default for MC_ALLOC.         * configure.in (AC_INIT_PARSE_ARGS): Add `--dump-in-exec' as a         new configure flag.         * configure.in: DUMP_IN_EXEC is define as default for PDUMP but         not default for MC_ALLOC.         * configure.usage: Add description for `dump-in-exec'. lib-src/ChangeLog addition: 2005-04-01  Marcus Crestani  <crestani@xemacs.org>         The new allocator.         DUMP_IN_EXEC:                  * Makefile.in.in: Only compile insert-data-in-exec if         DUMP_IN_EXEC is defined. lisp/ChangeLog addition: 2005-04-01  Marcus Crestani  <crestani@xemacs.org>         The new allocator.         MEMORY_USAGE_STATS         * diagnose.el: Add new lisp function to pretty print statistics         about the new allocator.         * diagnose.el (show-mc-alloc-memory-usage): New. modules/ChangeLog addition: 2005-04-01  Marcus Crestani  <crestani@xemacs.org>         The new allocator.         Remove Lcrecords:                  * postgresql/postgresql.c (allocate_pgconn): Allocate with new         allocator.         * postgresql/postgresql.c (allocate_pgresult): Allocate PGresult         with new allocator.           * postgresql/postgresql.h (struct Lisp_PGconn): Add         lrecord_header.         * postgresql/postgresql.h (struct Lisp_PGresult): Add         lrecord_header.         * ldap/eldap.c (allocate_ldap): Allocate with new allocator.         * ldap/eldap.h (struct Lisp_LDAP): Add lrecord_header. nt/ChangeLog addition: 2005-04-01  Marcus Crestani  <crestani@xemacs.org>         The new allocator.         New configure flag: `MC_ALLOC':         * config.inc.samp: Add new flag `MC_ALLOC'.         * xemacs.mak: Add flag and configuration output for `MC_ALLOC'.         New files:         * xemacs.dsp: Add source files mc-alloc.c and mc-alloc.h.         * xemacs.mak: Add new object file mc-alloc.obj to dependencies. src/ChangeLog addition: 2005-04-01  Marcus Crestani  <crestani@xemacs.org>         The new allocator.         New configure flag: `MC_ALLOC':         * config.h.in: Add new flag `MC_ALLOC'.         New files:         * Makefile.in.in: Add new object file mc-alloc.o.         * depend: Add new files to dependencies.         * mc-alloc.c: New.         * mc-alloc.h: New.         Running the new allocator from XEmacs:         * alloc.c (deadbeef_memory): Moved to mc-alloc.c.         * emacs.c (main_1): Initialize the new allocator and add         syms_of_mc_alloc.         * symsinit.h: Add syms_of_mc_alloc.         New lrecord allocation and free functions:         * alloc.c (alloc_lrecord): New. Allocates an lrecord, includes         type checking and initializing of the lrecord_header.         * alloc.c (noseeum_alloc_lrecord): Same as above, but increments         the NOSEEUM cons counter.         * alloc.c (free_lrecord): New. Calls the finalizer and frees the         lrecord.         * lrecord.h: Add lrecord allocation prototypes and comments.         Remove old lrecord FROB block allocation:                  * alloc.c (allocate_lisp_storage): Former function to expand         heap. Not needed anymore, remove.         * alloc.c: Completely remove `Fixed-size type macros'         * alloc.c (release_breathing_space): Remove.         * alloc.c (memory_full): Remove release_breathing_space.         * alloc.c (refill_memory_reserve): Remove.         * alloc.c (TYPE_ALLOC_SIZE): Remove.         * alloc.c (DECLARE_FIXED_TYPE_ALLOC): Remove.         * alloc.c (ALLOCATE_FIXED_TYPE_FROM_BLOCK): Remove.         * alloc.c (ALLOCATE_FIXED_TYPE_1): Remove.         * alloc.c (ALLOCATE_FIXED_TYPE): Remove.         * alloc.c (NOSEEUM_ALLOCATE_FIXED_TYPE): Remove.         * alloc.c (struct Lisp_Free): Remove.         * alloc.c (LRECORD_FREE_P): Remove.         * alloc.c (MARK_LRECORD_AS_FREE): Remove.         * alloc.c (MARK_LRECORD_AS_NOT_FREE): Remove.         * alloc.c (PUT_FIXED_TYPE_ON_FREE_LIST): Remove.         * alloc.c (FREE_FIXED_TYPE): Remove.         * alloc.c (FREE_FIXED_TYPE_WHEN_NOT_IN_GC): Remove.         Allocate old lrecords with new allocator:                  * alloc.c: DECLARE_FIXED_TYPE_ALLOC removed for all lrecords         defined in alloc.c.         * alloc.c (Fcons): Allocate with new allocator.         * alloc.c (noseeum_cons): Allocate with new allocator.         * alloc.c (make_float): Allocate with new allocator.         * alloc.c (make_bignum): Allocate with new allocator.         * alloc.c (make_bignum_bg): Allocate with new allocator.         * alloc.c (make_ratio): Allocate with new allocator.         * alloc.c (make_ratio_bg): Allocate with new allocator.         * alloc.c (make_ratio_rt): Allocate with new allocator.         * alloc.c (make_bigfloat): Allocate with new allocator.         * alloc.c (make_bigfloat_bf): Allocate with new allocator.         * alloc.c (make_compiled_function): Allocate with new allocator.         * alloc.c (Fmake_symbol): Allocate with new allocator.         * alloc.c (allocate_extent): Allocate with new allocator.         * alloc.c (allocate_event): Allocate with new allocator.         * alloc.c (make_key_data): Allocate with new allocator.         * alloc.c (make_button_data): Allocate with new allocator.         * alloc.c (make_motion_data): Allocate with new allocator.         * alloc.c (make_process_data): Allocate with new allocator.         * alloc.c (make_timeout_data): Allocate with new allocator.         * alloc.c (make_magic_data): Allocate with new allocator.         * alloc.c (make_magic_eval_data): Allocate with new allocator.         * alloc.c (make_eval_data): Allocate with new allocator.         * alloc.c (make_misc_user_data): Allocate with new allocator.         * alloc.c (Fmake_marker): Allocate with new allocator.         * alloc.c (noseeum_make_marker): Allocate with new allocator.         * alloc.c (make_uninit_string): Allocate with new allocator.         * alloc.c (resize_string): Allocate with new allocator.         * alloc.c (make_string_nocopy): Allocate with new allocator.         Garbage Collection:         * alloc.c (GC_CHECK_NOT_FREE): Remove obsolete assertions.         * alloc.c (SWEEP_FIXED_TYPE_BLOCK): Remove.         * alloc.c (SWEEP_FIXED_TYPE_BLOCK_1): Remove.         * alloc.c (sweep_conses): Remove.         * alloc.c (free_cons): Use new allocator to free.         * alloc.c (sweep_compiled_functions): Remove.         * alloc.c (sweep_floats): Remove.         * alloc.c (sweep_bignums): Remove.         * alloc.c (sweep_ratios): Remove.         * alloc.c (sweep_bigfloats): Remove.         * alloc.c (sweep_symbols): Remove.         * alloc.c (sweep_extents): Remove.         * alloc.c (sweep_events): Remove.         * alloc.c (sweep_key_data): Remove.         * alloc.c (free_key_data): Use new allocator to free.         * alloc.c (sweep_button_data): Remove.         * alloc.c (free_button_data): Use new allocator to free.         * alloc.c (sweep_motion_data): Remove.         * alloc.c (free_motion_data): Use new allocator to free.         * alloc.c (sweep_process_data): Remove.         * alloc.c (free_process_data): Use new allocator to free.         * alloc.c (sweep_timeout_data): Remove.         * alloc.c (free_timeout_data): Use new allocator to free.         * alloc.c (sweep_magic_data): Remove.         * alloc.c (free_magic_data): Use new allocator to free.         * alloc.c (sweep_magic_eval_data): Remove.         * alloc.c (free_magic_eval_data): Use new allocator to free.         * alloc.c (sweep_eval_data): Remove.         * alloc.c (free_eval_data): Use new allocator to free.         * alloc.c (sweep_misc_user_data): Remove.         * alloc.c (free_misc_user_data): Use new allocator to free.         * alloc.c (sweep_markers): Remove.         * alloc.c (free_marker): Use new allocator to free.         * alloc.c (garbage_collect_1): Remove release_breathing_space.         * alloc.c (gc_sweep): Remove all the old lcrecord and lrecord         related stuff. Sweeping now works like this: compact string         chars, finalize, sweep.         * alloc.c (common_init_alloc_early): Remove old lrecord         initializations, remove breathing_space.         * emacs.c (Fdump_emacs): Remove release_breathing_space.         * lisp.h: Remove prototype for release_breathing_space.         * lisp.h: Adjust the special cons mark makros.         Lrecord Finalizer:         * alloc.c: Add finalizer to lrecord definition.         * alloc.c (finalize_string): Add finalizer for string.         * bytecode.c: Add finalizer to lrecord definition.         * bytecode.c (finalize_compiled_function): Add finalizer for         compiled function.         * marker.c: Add finalizer to lrecord definition.         * marker.c (finalize_marker): Add finalizer for marker.         These changes build the interface to mc-alloc:         * lrecord.h (MC_ALLOC_CALL_FINALIZER): Tell mc-alloc how to         finalize lrecords.         * lrecord.h (MC_ALLOC_CALL_FINALIZER_FOR_DISKSAVE): Tell         mc-alloc how to finalize for disksave.         Unify lrecords and lcrecords:         * lisp.h (struct Lisp_String): Adjust string union hack to         new lrecord header.         * lrecord.h: Adjust comments.         * lrecord.h (struct lrecord_header): The new lrecord header         includes type, lisp-readonly, free, and uid.         * lrecord.h (set_lheader_implementation): Adjust to new         lrecord_header.         * lrecord.h (struct lrecord_implementation): The field basic_p         for indication of an old lrecord is not needed anymore, remove.         * lrecord.h (MAKE_LRECORD_IMPLEMENTATION): Remove basic_p.         * lrecord.h (MAKE_EXTERNAL_LRECORD_IMPLEMENTATION): Remove         basic_p.         * lrecord.h (copy_sized_lrecord): Remove distinction between         old lrecords and lcrecords.         * lrecord.h (copy_lrecord): Remove distinction between old         lrecords and lcrecords.         * lrecord.h (zero_sized_lrecord): Remove distinction between         old lrecords and lcrecords.         * lrecord.h (zero_lrecord): Remove distinction between old         lrecords and lcrecords.         Remove lcrecords and lcrecord lists:         * alloc.c (basic_alloc_lcrecord): Not needed anymore, remove.         * alloc.c (very_old_free_lcrecord): Not needed anymore, remove.         * alloc.c (copy_lisp_object): No more distinction between         lrecords and lcrecords.         * alloc.c (all_lcrecords): Not needed anymore, remove.         * alloc.c (make_vector_internal): Allocate as lrecord.         * alloc.c (make_bit_vector_internal): Allocate as lrecord.         * alloc.c: Completely remove `lcrecord lists'.         * alloc.c (free_description): Remove.         * alloc.c (lcrecord_list_description): Remove.         * alloc.c (mark_lcrecord_list): Remove.         * alloc.c (make_lcrecord_list): Remove.         * alloc.c (alloc_managed_lcrecord): Remove.         * alloc.c (free_managed_lcrecord): Remove.         * alloc.c (alloc_automanaged_lcrecord): Remove.         * alloc.c (free_lcrecord): Remove.         * alloc.c (lcrecord_stats): Remove.         * alloc.c (tick_lcrecord_stats): Remove.         * alloc.c (disksave_object_finalization_1): Add call to         mc_finalize_for_disksave. Remove the lcrecord way to visit all         objects.         * alloc.c (kkcc_marking): Remove XD_FLAG_FREE_LISP_OBJECT         * alloc.c (sweep_lcrecords_1): Remove.         * alloc.c (common_init_alloc_early): Remove everything related         to lcrecords, remove old lrecord initializations,         * alloc.c (init_lcrecord_lists): Not needed anymore, remove.         * alloc.c (reinit_alloc_early): Remove everything related to         lcrecords.         * alloc.c (init_alloc_once_early): Remove everything related to         lcrecords.         * buffer.c (allocate_buffer): Allocate as lrecord.         * buffer.c (nuke_all_buffer_slots): Use lrecord functions.         * buffer.c (common_init_complex_vars_of_buffer): Allocate as         lrecord.         * buffer.h (struct buffer): Add lrecord_header.         * casetab.c (allocate_case_table): Allocate as lrecord.         * casetab.h (struct Lisp_Case_Table): Add lrecord_header.         * charset.h (struct Lisp_Charset): Add lrecord_header.         * chartab.c (fill_char_table): Use lrecord functions.         * chartab.c (Fmake_char_table): Allocate as lrecord.         * chartab.c (make_char_table_entry): Allocate as lrecord.         * chartab.c (copy_char_table_entry): Allocate as lrecord.         * chartab.c (Fcopy_char_table): Allocate as lrecord.         * chartab.c (put_char_table): Use lrecord functions.         * chartab.h (struct Lisp_Char_Table_Entry): Add lrecord_header.         * chartab.h (struct Lisp_Char_Table): Add lrecord_header.         * console-impl.h (struct console): Add lrecord_header.         * console-msw-impl.h (struct Lisp_Devmode): Add lrecord_header.         * console-msw-impl.h (struct mswindows_dialog_id): Add         lrecord_header.         * console.c (allocate_console): Allocate as lrecord.         * console.c (nuke_all_console_slots): Use lrecord functions.         * console.c (common_init_complex_vars_of_console): Allocate as         lrecord.         * data.c (make_weak_list): Allocate as lrecord.         * data.c (make_weak_box): Allocate as lrecord.         * data.c (make_ephemeron): Allocate as lrecord.         * database.c (struct Lisp_Database): Add lrecord_header.         * database.c (allocate_database): Allocate as lrecord.         * device-impl.h (struct device): Add lrecord_header.         * device-msw.c (allocate_devmode): Allocate as lrecord.         * device.c (nuke_all_device_slots): Use lrecord functions.         * device.c (allocate_device): Allocate as lrecord.         * dialog-msw.c (handle_question_dialog_box): Allocate as lrecord.         * elhash.c (struct Lisp_Hash_Table): Add lrecord_header.         * elhash.c (make_general_lisp_hash_table): Allocate as lrecord.         * elhash.c (Fcopy_hash_table): Allocate as lrecord.         * event-stream.c: Lcrecord lists Vcommand_builder_free_list and         Vtimeout_free_list are no longer needed. Remove.         * event-stream.c (allocate_command_builder): Allocate as lrecord.         * event-stream.c (free_command_builder): Use lrecord functions.         * event-stream.c (event_stream_generate_wakeup): Allocate as         lrecord.         * event-stream.c (event_stream_resignal_wakeup): Use lrecord         functions.         * event-stream.c (event_stream_disable_wakeup): Use lrecord         functions.         * event-stream.c (reinit_vars_of_event_stream): Lcrecord lists         remove.         * events.h (struct Lisp_Timeout): Add lrecord_header.         * events.h (struct command_builder): Add lrecord_header.         * extents-impl.h (struct extent_auxiliary): Add lrecord_header.         * extents-impl.h (struct extent_info): Add lrecord_header.         * extents.c (allocate_extent_auxiliary): Allocate as lrecord.         * extents.c (allocate_extent_info): Allocate as lrecord.         * extents.c (copy_extent): Allocate as lrecord.         * faces.c (allocate_face): Allocate as lrecord.         * faces.h (struct Lisp_Face): Add lrecord_header.         * file-coding.c (allocate_coding_system): Allocate as lrecord.         * file-coding.c (Fcopy_coding_system): Allocate as lrecord.         * file-coding.h (struct Lisp_Coding_System): Add lrecord_header.         * fns.c (Ffillarray): Allocate as lrecord.         * frame-impl.h (struct frame): Add lrecord_header.         * frame.c (nuke_all_frame_slots): Use lrecord functions.         * frame.c (allocate_frame_core): Allocate as lrecord.         * glyphs.c (allocate_image_instance): Allocate as lrecord.         * glyphs.c (Fcolorize_image_instance): Allocate as lrecord.         * glyphs.c (allocate_glyph): Allocate as lrecord.         * glyphs.h (struct Lisp_Image_Instance): Add lrecord_header.         * glyphs.h (struct Lisp_Glyph): Add lrecord_header.         * gui.c (allocate_gui_item): Allocate as lrecord.         * gui.h (struct Lisp_Gui_Item): Add lrecord_header.         * keymap.c (struct Lisp_Keymap): Add lrecord_header.         * keymap.c (make_keymap): Allocate as lrecord.         * lisp.h (struct Lisp_Vector): Add lrecord_header.         * lisp.h (struct Lisp_Bit_Vector): Add lrecord_header.         * lisp.h (struct weak_box): Add lrecord_header.         * lisp.h (struct ephemeron): Add lrecord_header.         * lisp.h (struct weak_list): Add lrecord_header.         * lrecord.h (struct lcrecord_header): Not used, remove.         * lrecord.h (struct free_lcrecord_header): Not used, remove.         * lrecord.h (struct lcrecord_list): Not needed anymore, remove.         * lrecord.h (lcrecord_list): Not needed anymore, remove.         * lrecord.h: (enum data_description_entry_flags): Remove         XD_FLAG_FREE_LISP_OBJECT.         * lstream.c: Lrecord list Vlstream_free_list remove.         * lstream.c (Lstream_new): Allocate as lrecord.         * lstream.c (Lstream_delete): Use lrecod functions.         * lstream.c (reinit_vars_of_lstream): Vlstream_free_list         initialization remove.           * lstream.h (struct lstream): Add lrecord_header.         * emacs.c (main_1): Remove lstream initialization.         * mule-charset.c (make_charset): Allocate as lrecord.         * objects-impl.h (struct Lisp_Color_Instance): Add         lrecord_header.         * objects-impl.h (struct Lisp_Font_Instance): Add lrecord_header.         * objects.c (Fmake_color_instance): Allocate as lrecord.         * objects.c (Fmake_font_instance): Allocate as lrecord.         * objects.c (reinit_vars_of_objects): Allocate as lrecord.         * opaque.c: Lcreord list Vopaque_ptr_list remove.         * opaque.c (make_opaque): Allocate as lrecord.         * opaque.c (make_opaque_ptr): Allocate as lrecord.         * opaque.c (free_opaque_ptr): Use lrecord functions.         * opaque.c (reinit_opaque_early):         * opaque.c (init_opaque_once_early): Vopaque_ptr_list         initialization remove.         * opaque.h (Lisp_Opaque): Add lrecord_header.         * opaque.h (Lisp_Opaque_Ptr): Add lrecord_header.         * emacs.c (main_1): Remove opaque variable initialization.         * print.c (default_object_printer): Use new lrecord_header.         * print.c (print_internal): Use new lrecord_header.         * print.c (debug_p4): Use new lrecord_header.         * process.c (make_process_internal): Allocate as lrecord.         * procimpl.h (struct Lisp_Process): Add lrecord_header.         * rangetab.c (Fmake_range_table): Allocate as lrecord.         * rangetab.c (Fcopy_range_table): Allocate as lrecord.         * rangetab.h (struct Lisp_Range_Table): Add lrecord_header.         * scrollbar.c (create_scrollbar_instance): Allocate as lrecord.         * scrollbar.h (struct scrollbar_instance): Add lrecord_header.         * specifier.c (make_specifier_internal): Allocate as lrecord.         * specifier.h (struct Lisp_Specifier): Add lrecord_header.         * symbols.c:         * symbols.c (Fmake_variable_buffer_local): Allocate as lrecord.         * symbols.c (Fdontusethis_set_symbol_value_handler): Allocate         as lrecord.         * symbols.c (Fdefvaralias): Allocate as lrecord.         * symeval.h (struct symbol_value_magic): Add lrecord_header.         * toolbar.c (update_toolbar_button): Allocate as lrecord.         * toolbar.h (struct toolbar_button): Add lrecord_header.         * tooltalk.c (struct Lisp_Tooltalk_Message): Add lrecord_header.         * tooltalk.c (make_tooltalk_message): Allocate as lrecord.         * tooltalk.c (struct Lisp_Tooltalk_Pattern): Add lrecord_header.         * tooltalk.c (make_tooltalk_pattern): Allocate as lrecord.         * ui-gtk.c (allocate_ffi_data): Allocate as lrecord.         * ui-gtk.c (allocate_emacs_gtk_object_data): Allocate as lrecord.         * ui-gtk.c (allocate_emacs_gtk_boxed_data): Allocate as lrecord.         * ui-gtk.h (structs): Add lrecord_header.         * window-impl.h (struct window): Add lrecord_header.         * window-impl.h (struct window_mirror): Add lrecord_header.         * window.c (allocate_window): Allocate as lrecord.         * window.c (new_window_mirror): Allocate as lrecord.         * window.c (make_dummy_parent): Allocate as lrecord.         MEMORY_USAGE_STATS         * alloc.c (fixed_type_block_overhead): Not used anymore, remove.         * buffer.c (compute_buffer_usage): Get storage size from new         allocator.         * marker.c (compute_buffer_marker_usage): Get storage size from         new allocator.         * mule-charset.c (compute_charset_usage): Get storage size from         new allocator.         * scrollbar-gtk.c (gtk_compute_scrollbar_instance_usage): Get         storage size from new allocator.         * scrollbar-msw.c (mswindows_compute_scrollbar_instance_usage):         Get storage size from new allocator.         * scrollbar-x.c (x_compute_scrollbar_instance_usage): Get         storage size from new allocator.         * scrollbar.c (compute_scrollbar_instance_usage): Get storage         size from new allocator.         * unicode.c (compute_from_unicode_table_size_1): Get storage         size from new allocator.         * unicode.c (compute_to_unicode_table_size_1): Get storage size         from new allocator.         * window.c (compute_window_mirror_usage): Get storage size from         new allocator.         * window.c (compute_window_usage): Get storage size from new         allocator.         MC_ALLOC_TYPE_STATS:         * alloc.c (alloc_lrecord): Bump lrecord count.         * alloc.c (noseeum_alloc_lrecord): Bump lrecord count.         * alloc.c (struct lrecord_stats): Storage for counts.         * alloc.c (init_lrecord_stats): Zero statistics.         * alloc.c (inc_lrecord_stats): Increase the statistic.         * alloc.c (dec_lrecord_stats): Decrease the statistic.         * alloc.c (gc_plist_hack): Used to print the information.         * alloc.c (Fgarbage_collect): Return the collected information.         * mc-alloc.c (remove_cell): Decrease lrecord count.         * mc-alloc.h: Set flag MC_ALLOC_TYPE_STATS.         * emacs.c (main_1): Init lrecord statistics.         * lrecord.h: Add prototypes for *_lrecord_stats.         Strings:         * alloc.c (Fmake_string): Initialize ascii_begin to zero.         * alloc.c (gc_count_num_short_string_in_use): Remove.         * alloc.c (gc_count_string_total_size): Remove.         * alloc.c (gc_count_short_string_total_size): Remove.         * alloc.c (debug_string_purity): Remove.         * alloc.c (debug_string_purity_print): Remove.         * alloc.c (sweep_strings): Remove.                  Remove static C-readonly Lisp objects:         * alloc.c (c_readonly): Not needed anymore, remove.         * alloc.c (GC_CHECK_LHEADER_INVARIANTS): Remove some obsolete         lheader invariants assertions.         * buffer.c (DEFVAR_BUFFER_LOCAL_1): Allocate dynamically.         * console.c (DEFVAR_CONSOLE_LOCAL_1): Allocate dynamically.         * gpmevent.c: Indirection via MC_ALLOC_Freceive_gpm_event.         * gpmevent.c (Fgpm_enable): Allocate dynamically.         * gpmevent.c (syms_of_gpmevent): Allocate dynamically.         * lisp.h (C_READONLY): Not needed anymore, remove.         * lisp.h (DEFUN): Allocate dynamically.         * lrecord.h (C_READONLY_RECORD_HEADER_P): Not needed anymore,         remove.         * lrecord.h (SET_C_READONLY_RECORD_HEADER): Not needed anymore,         remove.         * symbols.c (guts_of_unbound_marker):         * symeval.h (defsubr): Allocate dynamically.         * symeval.h (DEFSUBR_MACRO): Allocate dynamically.         * symeval.h (DEFVAR_ SYMVAL_FWD): Allocate dynamically.         * tests.c (TESTS_DEFSUBR): Allocate dynamically.         Definition of mcpro:         * lisp.h: Add mcpro prototypes.         * alloc.c (common_init_alloc_early): Add initialization for         mcpros.         * alloc.c (mcpro_description_1): New.         * alloc.c (mcpro_description): New.         * alloc.c (mcpros_description_1): New.         * alloc.c (mcpros_description): New.         * alloc.c (mcpro_one_name_description_1): New.         * alloc.c (mcpro_one_name_description): New.         * alloc.c (mcpro_names_description_1): New.         * alloc.c (mcpro_names_description): New.         * alloc.c (mcpros): New.         * alloc.c (mcpro_names): New.         * alloc.c (mcpro_1): New.         * alloc.c (mc_pro): New.         * alloc.c (garbage_collect_1): Add mcpros to root set.         Usage of mcpro:         * alloc.c (make_string_nocopy): Add string to root set.         * symbols.c (init_symbols_once_early): Add Qunbound to root set.         Changes to the Portable Dumper:                  * alloc.c (FREE_OR_REALLOC_BEGIN): Since dumped objects can be         freed with the new allocator, remove assertion for !DUMPEDP.         * dumper.c: Adjust comments, increase PDUMP_HASHSIZE.         * dumper.c (pdump_make_hash): Shift address only 2 bytes, to         avoid collisions.         * dumper.c (pdump_objects_unmark): No more mark bits within         the object, remove.         * dumper.c (mc_addr_elt): New. Element data structure for mc         hash table.         * dumper.c (pdump_mc_hash): New hash table: `lookup table'.         * dumper.c (pdump_get_mc_addr): New. Lookup for hash table.         * dumper.c (pdump_get_indirect_mc_addr): New. Lookup for         convertibles.         * dumper.c (pdump_put_mc_addr): New. Putter for hash table.         * dumper.c (pdump_dump_mc_data): New. Writes the table for         relocation at load time to the dump file.         * dumper.c (pdump_scan_lisp_objects_by_alignment): New.         Visits all dumped Lisp objects.         * dumper.c (pdump_scan_non_lisp_objects_by_alignment): New.         Visits all other dumped objects.         * dumper.c (pdump_reloc_one_mc): New. Updates all pointers         of an object by using the hash table pdump_mc_hash.         * dumper.c (pdump_reloc_one): Replaced by pdump_reloc_one_mc.         * dumper.c (pdump): Change the structure of the dump file, add         the mc post dump relocation table to dump file.         * dumper.c (pdump_load_finish): Hand all dumped objects to the         new allocator and use the mc post dump relocation table for         relocating the dumped objects at dump file load time, free not         longer used data structures.         * dumper.c (pdump_load): Free the dump file.         * dumper.h: Remove pdump_objects_unmark.         * lrecord.h (DUMPEDP): Dumped objects can be freed, remove.              DUMP_IN_EXEC:         * Makefile.in.in: Linking for and with dump in executable only if         DUMP_IN_EXEC is defined.         * config.h.in: Add new flag `DUMP_IN_EXEC'         * emacs.c: Condition dump-data.h on DUMP_IN_EXEC.         * emacs.c (main_1): Flag `-si' only works if dump image is         written into executable.         Miscellanious         * lrecord.h (enum lrecord_type): Added numbers to all types,         very handy for debugging.         * xemacs.def.in.in: Add mc-alloc functions to make them visible         to the modules.
author crestani
date Fri, 08 Apr 2005 23:11:35 +0000
parents f8db302d6298
children fd1acd2f457a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 ;;; glyphs.el --- Lisp interface to C glyphs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 ;; Copyright (C) 1994, 1997 Free Software Foundation, Inc.
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
4 ;; Copyright (C) 1995, 1996, 2000, 2005 Ben Wing.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 ;; Author: Chuck Thompson <cthomp@cs.uiuc.edu>, Ben Wing <ben@xemacs.org>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 ;; Maintainer: XEmacs Development Team
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 ;; Keywords: extensions, internal, dumped
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 ;; This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 ;; XEmacs is free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 ;; under the terms of the GNU General Public License as published by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 ;; the Free Software Foundation; either version 2, or (at your option)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 ;; any later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 ;; XEmacs is distributed in the hope that it will be useful, but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 ;; General Public License for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23 ;; along with XEmacs; see the file COPYING. If not, write to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24 ;; Free Software Foundation, 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 ;; Boston, MA 02111-1307, USA.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 ;;; Synched up with: Not in FSF.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
29 ;;; Authorship:
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
30
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
31 ;; Prototype created 1995 by Chuck Thompson.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
32 ;; Completely rewritten by Ben Wing, 1995.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
33 ;; Various cleanups (esp. doc strings) by Ben Wing, May 2000.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
34
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 ;;; Commentary:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 ;; This file is dumped with XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 ;;; Code:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
41 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; image specifiers
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 (defun make-image-specifier (spec-list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 "Return a new `image' specifier object with the specification list SPEC-LIST.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 SPEC-LIST can be a list of specifications (each of which is a cons of a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 locale and a list of instantiators), a single instantiator, or a list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 of instantiators. See `make-specifier' for more information about
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
48 specifiers.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
49
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
50 The main purpose of this doc string is to describe the possible formats for
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
51 image instantiators, as given as an argument to `make-glyph' or
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
52 `set-glyph-image'.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
53
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
54 An image instantiator should be a string or a vector of the form
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
55
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
56 [FORMAT :KEYWORD VALUE ...]
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
57
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
58 i.e. a format symbol followed by zero or more alternating keyword-value
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
59 pairs. The vector form of an image instantiator explicitly specifies the
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
60 format of the image and other relevant properties. The string form
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
61 specifies only a filename or gives inline data of an unspecified format,
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
62 and XEmacs must guess the actual format. Once it has done this, it
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
63 internally converts the instantiator into the vector format. This is
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
64 described in more detail below.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
65
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
66 Following is a list of the possible values for FORMAT. After each
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
67 description, the allowable keywords for the format are listed in brackets,
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
68 followed by the possible image instance types that can be generated from
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
69 this format. (Image instance types will be discussed below.)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
70
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
71 `nothing'
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
72 Don't display anything; no keywords are valid for this.
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
73 [] (nothing)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
74 `string'
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
75 Display this image as a text string. Support for instantiating as
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
76 `mono-pixmap' and `color-pixmap' should probably be added.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
77 [:data] (text)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
78 `formatted-string'
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
79 Display this image as a text string, with replaceable fields.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
80 Not currently implemented -- it's treated like `string'.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
81 [:data] (text)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
82 `gif'
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
83 A GIF87 or GIF89 image; only if GIF support was compiled into this
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
84 XEmacs. NOTE: Only the first frame of animated gifs will be displayed.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
85 [:data, :file] (color-pixmap, pointer)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
86 `jpeg'
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
87 A JPEG image; only if JPEG support was compiled into this XEmacs.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
88 [:data, :file] (color-pixmap, pointer)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
89 `png'
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
90 A PNG image; only if PNG support was compiled into this XEmacs.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
91 [:data, :file] (color-pixmap, pointer)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
92 `tiff'
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
93 A TIFF image; only if TIFF support was compiled into this XEmacs.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
94 [:data, :file] (color-pixmap, pointer)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
95 `bmp'
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
96 A MS Windows BMP image; only if MS Windows support was compiled into
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
97 this XEmacs.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
98 [:data, :file] (color-pixmap, pointer)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
99 `xbm'
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
100 An X bitmap; exists if any window-system support was compiled into this
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
101 XEmacs.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
102 [:data, :file, :foreground, :background, :mask-data, :mask-file,
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
103 :hotspot-x, :hotspot-y] (mono-pixmap, color-pixmap, pointer)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
104 `xpm'
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
105 An XPM pixmap; only if XPM support was compiled into this XEmacs.
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
106 [:data, :file, :color-symbols] (mono-pixmap, color-pixmap, pointer)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
107 `xface'
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
108 An X-Face bitmap, used to encode people's faces in e-mail messages;
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
109 only if X-Face support was compiled into this XEmacs.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
110 [:data, :file, :foreground, :background, :mask-data, :mask-file,
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
111 :hotspot-x, :hotspot-y] (mono-pixmap, color-pixmap, pointer)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
112 `cursor-font'
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
113 X and GTK only. One of the standard cursor-font names, such as \"watch\"
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
114 or \"right_ptr\" under X. Under X, this is, more specifically, any
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
115 of the standard cursor names from appendix B of the Xlib manual
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
116 [also known as the file <X11/cursorfont.h>] minus the XC_ prefix.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
117 On other window systems, the valid names will be specific to the
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
118 type of window system.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
119 [:data, :foreground, :background] (pointer)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
120 `mswindows-resource'
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
121 An MS Windows pointer resource. Specifies a resource to retrieve
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
122 directly from the system (an OEM resource) or from a file, particularly
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
123 an executable file. If the resource is to be retrieved from a file, use
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
124 :file and optionally :resource-id. Otherwise use :resource-id. Always
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
125 specify :resource-type to specify the type (cursor, bitmap or icon) of
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
126 the resource. Possible values for :resource-id are listed below.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
127 [:file, :resource-type, :resource-id] (pointer, color-pixmap)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
128 `font'
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
129 A glyph from a font; i.e. the name of a font, and glyph index into it
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
130 of the form \"FONT fontname index [[mask-font] mask-index]\".
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
131 Currently can only be instantiated as `pointer', although this should
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
132 probably be fixed.
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
133 [:data, :foreground, :background] (pointer)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
134 `subwindow'
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
135 An embedded windowing system window.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
136 [:pixel-width, :pixel-height] (subwindow)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
137 `button'
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
138 A button widget; either a push button, radio button or toggle button.
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
139 [WIDGET-KEYWORDS, GUI-KEYWORDS, :image] (widget)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
140 `combo-box'
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
141 A drop list of selectable items in a widget, for editing text.
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
142 [GUI-KEYWORDS, :width, :height, :pixel-width, :face, :items] (widget)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
143 `edit-field'
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
144 A text editing widget.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
145 [WIDGET-KEYWORDS, GUI-KEYWORDS] (widget)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
146 `label'
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
147 A static, text-only, widget; for displaying text.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
148 [WIDGET-KEYWORDS, :descriptor] (widget)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
149 `layout'
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
150 A widget for controlling the positioning of children underneath it.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
151 Through the use of nested layouts, a widget hierarchy can be created
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
152 which can have the appearance of any standard dialog box or similar
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
153 arrangement; all of this is counted as one \"glyph\" and could appear
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
154 in many of the places that expect a single glyph.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
155 [WIDGET-KEYWORDS, GUI-KEYWORDS, :orientation, :justify, :vertically-justify,
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
156 :horizontally-justify, :border, :margin-width, :items] (widget)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
157 `native-layout'
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
158 The native version of a layout widget. #### Document me better!
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
159 [WIDGET-KEYWORDS, GUI-KEYWORDS] (widget)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
160 `progress-gauge'
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
161 A sliding widget, for showing progress.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
162 [WIDGET-KEYWORDS, GUI-KEYWORDS, :value] (widget)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
163 `tab-control'
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
164 A tab widget; a series of user selectable tabs.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
165 [WIDGET-KEYWORDS, GUI-KEYWORDS, :orientation, :items] (widget)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
166 `tree-view'
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
167 A folding widget.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
168 [WIDGET-KEYWORDS, GUI-KEYWORDS, :items] (widget)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
169 `scrollbar'
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
170 A scrollbar widget.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
171 [GUI-KEYWORDS, :pixel-width, :face, :items] (widget)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
172 `autodetect'
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
173 XEmacs tries to guess what format the data is in. If X support
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
174 exists, the data string will be checked to see if it names a filename.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
175 If so, and this filename contains XBM or XPM data, the appropriate
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
176 sort of pixmap or pointer will be created. [This includes picking up
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
177 any specified hotspot or associated mask file.] Otherwise, if `pointer'
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
178 is one of the allowable image-instance types and the string names a
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
179 valid cursor-font name, the image will be created as a pointer.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
180 Otherwise, the image will be displayed as text. If no X support
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
181 exists, the image will always be displayed as text.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
182 [:data] (mono-pixmap, color-pixmap, pointer, text)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
183 `inherit'
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
184 Inherit from the background-pixmap property of a face.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
185 [:face] (mono-pixmap)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
186
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
187 The valid keywords are:
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
188
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
189 :data
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
190 Inline data. For most formats above, this should be a string. For
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
191 XBM images, this should be a list of three elements: width, height, and
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
192 a string of bit data. This keyword is valid for all of the bitmap/pixmap
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
193 formats, as well as `string', `formatted-string', `font', `cursor-font',
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
194 and `autodetect'.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
195 :file
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
196 Data is contained in a file. The value is the name of this file.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
197 If both :data and :file are specified, the image is created from
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
198 what is specified in :data and the string in :file becomes the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
199 value of the `image-instance-file-name' function when applied to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
200 the resulting image-instance. This keyword is valid for all of the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
201 bitmap/pixmap formats as well as `mswindows-resource'.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
202 :foreground
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
203 :background
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
204 For `xbm', `xface', `cursor-font', `widget' and `font'. These keywords
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
205 allow you to explicitly specify foreground and background colors.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
206 The argument should be anything acceptable to `make-color-instance'.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
207 This will cause what would be a `mono-pixmap' to instead be colorized
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
208 as a two-color color-pixmap, and specifies the foreground and/or
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
209 background colors for a pointer instead of black and white.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
210 :mask-data
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
211 For `xbm' and `xface'. This specifies a mask to be used with the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
212 bitmap. The format is a list of width, height, and bits, like for
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
213 :data.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
214 :mask-file
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
215 For `xbm' and `xface'. This specifies a file containing the mask data.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
216 If neither a mask file nor inline mask data is given for an XBM image,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
217 and the XBM image comes from a file, XEmacs will look for a mask file
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
218 with the same name as the image file but with \"Mask\" or \"msk\"
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
219 appended. For example, if you specify the XBM file \"left_ptr\"
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
220 [usually located in \"/usr/include/X11/bitmaps\"], the associated
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
221 mask file \"left_ptrmsk\" will automatically be picked up.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
222 :hotspot-x
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
223 :hotspot-y
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
224 For `xbm' and `xface'. These keywords specify a hotspot if the image
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
225 is instantiated as a `pointer'. Note that if the XBM image file
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
226 specifies a hotspot, it will automatically be picked up if no
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
227 explicit hotspot is given.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
228 :color-symbols
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
229 Only for `xpm'. This specifies an alist that maps strings
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
230 that specify symbolic color names to the actual color to be used
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
231 for that symbolic color (in the form of a string or a color-specifier
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
232 object). If this is not specified, the contents of `xpm-color-symbols'
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
233 are used to generate the alist.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
234 :resource-id
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
235 Only for `mswindows-resource'. This must be either an integer (which
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
236 directly specifies a resource number) or a string. Valid strings are
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
237
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
238 -- For bitmaps:
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
239
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
240 \"close\", \"uparrow\", \"dnarrow\", \"rgarrow\", \"lfarrow\",
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
241 \"reduce\", \"zoom\", \"restore\", \"reduced\", \"zoomd\",
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
242 \"restored\", \"uparrowd\", \"dnarrowd\", \"rgarrowd\", \"lfarrowd\",
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
243 \"mnarrow\", \"combo\", \"uparrowi\", \"dnarrowi\", \"rgarrowi\",
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
244 \"lfarrowi\", \"size\", \"btsize\", \"check\", \"checkboxes\", and
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
245 \"btncorners\".
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
246
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
247 -- For pointers:
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
248
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
249 \"normal\", \"ibeam\", \"wait\", \"cross\", \"up\", \"sizenwse\",
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
250 \"sizenesw\", \"sizewe\", \"sizens\", \"sizeall\", and \"no\".
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
251
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
252 -- For icons:
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
253
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
254 \"sample\", \"hand\", \"ques\", \"bang\", \"note\", and \"winlogo\".
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
255 :resource-type
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
256 Only for `mswindows-resource'. This must be a symbol, either `cursor'
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
257 (i.e. pointer), `icon', or `bitmap', specifying the type of resource to
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
258 be retrieved.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
259 :face
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
260 Only for `inherit'. This specifies the face to inherit from.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
261 For widgets this also specifies the face to use for display. It defaults
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
262 to gui-element-face.
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
263 :pixel-width, :pixel-height
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
264 Width and height of element, in pixels. For `subwindow', the values
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
265 must be integers. For widgets, the values can be integers or
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
266 expressions that evaluate to integers.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
267
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
268 \[WIDGET-KEYWORDS] stands for the standard keywords accepted by widgets:
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
269 These are `:selected', `:active', `:suffix', `:keys', `:style',
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
270 `:filter', `:config', `:included', `:key-sequence', `:accelerator',
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
271 `:label', `:callback', `:initial-focus', and `:descriptor'.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
272 #### Document me.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
273
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
274 \[GUI-KEYWORDS] stands for keywords accepted by many widgets.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
275 These are `:width', `:height', `:pixel-width', `:pixel-height', and `:face'.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
276 #### Document me.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
277
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
278 If instead of a vector, the instantiator is a string, it will be
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
279 converted into a vector by looking it up according to the specs in the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
280 `console-type-image-conversion-list' (q.v.) for the console type of
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
281 the domain (usually a window; sometimes a frame or device) over which
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
282 the image is being instantiated.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
283
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
284 If the instantiator specifies data from a file, the data will be read
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
285 in at the time that the instantiator is added to the image (which may
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
286 be well before when the image is actually displayed), and the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
287 instantiator will be converted into one of the inline-data forms, with
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
288 the filename retained using a :file keyword. This implies that the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
289 file must exist when the instantiator is added to the image, but does
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
290 not need to exist at any other time (e.g. it may safely be a temporary
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
291 file).
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
292
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
293 NOTE: In practice, you rarely, if ever, need to actually
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
294 create an image specifier! (The function `make-image-specifier' exists
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
295 mainly for completeness.) Pretty much the only use for image specifiers is
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
296 to control how glyphs are displayed, and the image specifier associated
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
297 with a glyph (the `image' property of a glyph) is created automatically
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
298 when a glyph is created (see `make-glyph') and need not \(and cannot, for
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
299 that matter) ever be changed. In fact, the design decision to create a
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
300 separate image specifier type, rather than make glyphs themselves be
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
301 specifiers, is debatable -- the other properties of glyphs are rarely used
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
302 and could conceivably have been incorporated into the glyph's instantiator.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
303 The rarely used glyph types (buffer, pointer, icon) could also have been
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
304 incorporated into the instantiator.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
305
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
306 An image specifier is used for images (pixmaps, widgets and the like). It
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
307 is used to describe the actual image in a glyph. It is instantiated \(see
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
308 `specifier-instance') as an image-instance. Note that \"image\" as used in
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
309 XEmacs does not actually refer to what the term \"image\" normally means (a
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
310 picture, e.g. in .GIF or .JPG format, and called a \"pixmap\" in XEmacs),
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
311 but includes all types of graphical elements, including pixmaps, widgets
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
312 \(buttons, sliders, text fields, etc.) and even strings of text.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
313
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
314 There is an important distinction to be made between image instantiators
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
315 and image instances, and \"image instantiator formats\" and \"image
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
316 instance types\", analogous to the distinction between source and
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
317 destination. An image instantiator describes the source data for an image.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
318 An image instance encapsulates the resulting window-system object used to
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
319 display the image. Image instantiator formats are the formats of the
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
320 source: This includes familiar and less-familiar graphics formats such as
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
321 `gif', `jpeg', `png' and `xpm'; widget types such as `button', `edit-field'
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
322 and `combo-box'; and other beasts such as `string' (plain text, which could
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
323 potentially behave like text when placed in a buffer, such as wrapping),
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
324 `font' (a single character from a particular font, specified by the index
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
325 into the font), etc. Image instance types are the (destination) types of
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
326 the resulting image instance. Different image instance types correspond to
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
327 fundamentally different appearance and behaviors for the resulting image,
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
328 specifically:
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
329
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
330 -- `color-pixmap' (a color image);
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
331 -- `mono-pixmap' (a \"monochrome\" image, technically a two-color image
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
332 that comes in two unspecified shades \"foreground\" and \"background\",
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
333 determined from the face [see `make-face'] of the glyph or surrounding
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
334 text);
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
335 -- `text' (a string of text appearing somewhere in a buffer's text or
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
336 margins, which has an unspecified foreground, background, and font
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
337 derived from the surrounding text or other external property and which
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
338 behaves in many respects like an image but can wrap across the end of a
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
339 line to the beginning of the next);
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
340 -- `pointer' (the mouse pointer for a window; this is a combination of a
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
341 rectangular pixmap image, a monochrome mask that specifies the
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
342 transparency of the image [i.e. in which places the underlying screen
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
343 image can show through, and how much of it], and a \"hotspot\" that
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
344 indicates which pixel in the pointer's image is considered the actual
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
345 pointer location -- for example, this will be located near the tip of
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
346 an arrow, in the middle of a crosshairs, somewhere along an i-beam, etc.);
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
347 -- `widget' (a window-system object or \"widget\" that interacts with the
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
348 user, such as a button, edit-field or combo-box);
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
349 -- `subwindow' (a rectangular area that another program can draw into);
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
350 -- `nothing' (no display).
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
351
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
352 There is not a one-to-one mapping between source (image instantiator)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
353 formats and destination (image instance) types. For example, the source
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
354 format `xpm' can generate the image instance types `color-pixmap',
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
355 `mono-pixmap', or `pointer', and the image instance type `color-pixmap' can
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
356 be generated by any of `gif', `jpeg', `png', `tiff', `xpm', `xbm' and
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
357 `xface'.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
358
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
359 In general, the user or programmer specifies the image instantiator format,
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
360 while the appropriate image instance type is determined automatically by
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
361 XEmacs from the image instantiator format, from the data in the
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
362 instantiator and from the particular situation the image (and the glyph
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
363 that holds it) is being used in. (However, it's possible to explicitly
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
364 create image instances and control their types; see `make-image-instance'.)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
365 For example, a glyph used to specify the shape of a mouse pointer can only
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
366 result in `pointer'-type image instances, and a glyph used for an icon can
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
367 only result in `color-pixmap' image instances. A glyph used in a buffer
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
368 can potentially result in any image instance type except for `pointer', but
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
369 particular instantiator formats have only a limited set of image instance
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
370 types they will support. Here is an example of how the image instance type
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
371 for an `xpm' instantiator (which can potentially support `color-pixmap',
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
372 `mono-pixmap', or `pointer') is determined:
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
373
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
374 1. If the glyph is being used for a mouse pointer (hence its `glyph-type'
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
375 is `pointer'), it can be instantiated only a `pointer'-type image instance.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
376 2. If the glyph is being used for an icon (hence its `glyph-type' is `icon'),
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
377 it can be instantiated only a `color-pixmap'-type image instance.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
378 3. Otherwise, the glyph is being used somewhere inside a frame (`glyph-type'
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
379 of `buffer') and any image instance type except `pointer' can be
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
380 supported. In this case, this means `color-pixmap' or `mono-pixmap'.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
381 Which one will result depends on the particular data being processed,
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
382 since XPM images can specify whether they are color or mono.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
383
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
384 Note again that \"mono\" does *NOT* simply mean \"an image with two
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
385 colors\". The latter image has two prespecified colors, e.g. red and blue
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
386 or black and white, and will always appear with those colors, no matter
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
387 what the context. A mono image has two *unspecified* colors, symbolically
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
388 named \"foreground\" and \"background\", and the actual values for those
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
389 colors depends on context. A mono pixmap displayed among text will take
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
390 its foreground and background from that of the text and hence blend in
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
391 nicely; a two-color color pixmap won't do that.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
392
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
393 Note also that `color-pixmap' image instances can be generated from the
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
394 supported pixmap formats that are inherently mono (i.e. `xbm' and `xface')
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
395 by specifying :foreground and :background values.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
396
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
397 A table of the various image instantiator formats and the possible
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
398 destination (image instance) types that can be generated from them is as
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
399 follows:
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
400
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
401
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
402 color-pixmap mono-pixmap text pointer widget subwindow noth.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
403 -------------------------------------------------------------------------------
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
404 nothing +
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
405 string +
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
406 formatted-string +
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
407 xbm + + +
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
408 xpm + + +
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
409 xface + + +
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
410 gif + +
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
411 jpeg + +
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
412 png + +
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
413 tiff + +
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
414 bmp + +
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
415 cursor-font +
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
416 mswindows-resource + +
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
417 font +
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
418 subwindow +
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
419 button +
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
420 combo-box +
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
421 edit-field +
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
422 label +
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
423 layout +
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
424 native-layout +
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
425 progress-gauge +
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
426 tab-control +
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
427 tree-view +
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
428 scrollbar +
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
429 autodetect + + + +
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
430 inherit +
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
431
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
432 See `make-image-instance' for a more detailed discussion of image
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
433 instance types."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434 (make-specifier-and-init 'image spec-list))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
435
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
436 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; glyphs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438 (defconst built-in-glyph-specifiers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439 '(image contrib-p baseline)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
440 "A list of the built-in glyph properties that are specifiers.")
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 (defun glyph-property (glyph property &optional locale)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443 "Return GLYPH's value of PROPERTY in LOCALE.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 If LOCALE is omitted, the GLYPH's actual value for PROPERTY will be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 returned. For built-in properties, this will be a specifier object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
447 of a type appropriate to the property (e.g. a font or color
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448 specifier). For other properties, this could be anything.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450 If LOCALE is supplied, then instead of returning the actual value,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
451 the specification(s) for the given locale or locale type will
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452 be returned. This will only work if the actual value of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453 PROPERTY is a specifier (this will always be the case for built-in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 properties, but not or not may apply to user-defined properties).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455 If the actual value of PROPERTY is not a specifier, this value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456 will simply be returned regardless of LOCALE.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 The return value will be a list of instantiators (e.g. strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459 specifying a font or color name), or a list of specifications, each
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
460 of which is a cons of a locale and a list of instantiators.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461 Specifically, if LOCALE is a particular locale (a buffer, window,
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
462 frame, device, or `global'), a list of instantiators for that locale
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463 will be returned. Otherwise, if LOCALE is a locale type (one of
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
464 the symbols `buffer', `window', `frame', `device', `device-class', or
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
465 `device-type'), the specifications for all locales of that type will
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
466 be returned. Finally, if LOCALE is `all', the specifications for all
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467 locales of all types will be returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469 The specifications in a specifier determine what the value of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470 PROPERTY will be in a particular \"domain\" or set of circumstances,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471 which is typically a particular Emacs window along with the buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472 it contains and the frame and device it lies within. The value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473 is derived from the instantiator associated with the most specific
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
474 locale (in the order buffer, window, frame, device, and `global')
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 that matches the domain in question. In other words, given a domain
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476 (i.e. an Emacs window, usually), the specifier for PROPERTY will first
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
477 be searched for a specification whose locale is the buffer contained
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
478 within that window; then for a specification whose locale is the window
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
479 itself; then for a specification whose locale is the frame that the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480 window is contained within; etc. The first instantiator that is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481 valid for the domain (usually this means that the instantiator is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482 recognized by the device [i.e. the X server or TTY device] that the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483 domain is on. The function `glyph-property-instance' actually does
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484 all this, and is used to determine how to display the glyph.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486 See `set-glyph-property' for the built-in property-names."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487 (check-argument-type 'glyphp glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488 (let ((value (get glyph property)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 (if (and locale
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 (or (memq property built-in-glyph-specifiers)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491 (specifierp value)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
492 (setq value (specifier-specs value locale)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493 value))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495 (defun convert-glyph-property-into-specifier (glyph property)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496 "Convert PROPERTY on GLYPH into a specifier, if it's not already."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497 (check-argument-type 'glyphp glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498 (let ((specifier (get glyph property)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499 ;; if a user-property does not have a specifier but a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500 ;; locale was specified, put a specifier there.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501 ;; If there was already a value there, convert it to a
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
502 ;; specifier with the value as its `global' instantiator.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
503 (if (not (specifierp specifier))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
504 (let ((new-specifier (make-specifier 'generic)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
505 (if (or (not (null specifier))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
506 ;; make sure the nil returned from `get' wasn't
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
507 ;; actually the value of the property
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
508 (null (get glyph property t)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 (add-spec-to-specifier new-specifier specifier))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510 (setq specifier new-specifier)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
511 (put glyph property specifier)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513 (defun glyph-property-instance (glyph property
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514 &optional domain default no-fallback)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515 "Return the instance of GLYPH's PROPERTY in the specified DOMAIN.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517 Under most circumstances, DOMAIN will be a particular window,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
518 and the returned instance describes how the specified property
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
519 actually is displayed for that window and the particular buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
520 in it. Note that this may not be the same as how the property
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
521 appears when the buffer is displayed in a different window or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
522 frame, or how the property appears in the same window if you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
523 switch to another buffer in that window; and in those cases,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
524 the returned instance would be different.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
525
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
526 DOMAIN defaults to the selected window if omitted.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
527
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
528 DOMAIN can be a frame or device, instead of a window. The value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
529 returned for a such a domain is used in special circumstances
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
530 when a more specific domain does not apply; for example, a frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
531 value might be used for coloring a toolbar, which is conceptually
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
532 attached to a frame rather than a particular window. The value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
533 is also useful in determining what the value would be for a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
534 particular window within the frame or device, if it is not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
535 overridden by a more specific specification.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
536
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
537 If PROPERTY does not name a built-in property, its value will
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
538 simply be returned unless it is a specifier object, in which case
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
539 it will be instanced using `specifier-instance'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
540
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
541 Optional arguments DEFAULT and NO-FALLBACK are the same as in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
542 `specifier-instance'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
543 (check-argument-type 'glyphp glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
544 (let ((value (get glyph property)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
545 (if (specifierp value)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
546 (setq value (specifier-instance value domain default no-fallback)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
547 value))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
548
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
549 (defun set-glyph-property (glyph property value &optional locale tag-set
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
550 how-to-add)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
551 "Change a property of a GLYPH.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
552
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
553 NOTE: If you want to remove a property from a glyph, use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
554 `remove-glyph-property' rather than attempting to set a value of nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
555 for the property.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
556
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
557 For built-in properties, the actual value of the property is a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
558 specifier and you cannot change this; but you can change the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
559 specifications within the specifier, and that is what this function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
560 will do. For user-defined properties, you can use this function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
561 to either change the actual value of the property or, if this value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
562 is a specifier, change the specifications within it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
563
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
564 If PROPERTY is a built-in property, the specifications to be added to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
565 this property can be supplied in many different ways:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
566
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
567 -- If VALUE is a simple instantiator (e.g. a string naming a font or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
568 color) or a list of instantiators, then the instantiator(s) will
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
569 be added as a specification of the property for the given LOCALE
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
570 (which defaults to `global' if omitted).
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
571 -- If VALUE is a list of specifications (each of which is a cons of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
572 a locale and a list of instantiators), then LOCALE must be nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
573 (it does not make sense to explicitly specify a locale in this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
574 case), and specifications will be added as given.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
575 -- If VALUE is a specifier (as would be returned by `glyph-property'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
576 if no LOCALE argument is given), then some or all of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
577 specifications in the specifier will be added to the property.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
578 In this case, the function is really equivalent to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
579 `copy-specifier' and LOCALE has the same semantics (if it is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
580 a particular locale, the specification for the locale will be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
581 copied; if a locale type, specifications for all locales of
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
582 that type will be copied; if nil or `all', then all
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
583 specifications will be copied).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
584
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
585 HOW-TO-ADD should be either nil or one of the symbols `prepend',
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
586 `append', `remove-tag-set-prepend', `remove-tag-set-append', `remove-locale',
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
587 `remove-locale-type', or `remove-all.' See `copy-specifier' and
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
588 `add-spec-to-specifier' for a description of what each of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
589 these means. Most of the time, you do not need to worry about
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
590 this argument; the default behavior usually is fine.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
591
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
592 In general, it is OK to pass an instance object (e.g. as returned
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
593 by `glyph-property-instance') as an instantiator in place of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
594 an actual instantiator. In such a case, the instantiator used
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
595 to create that instance object will be used (for example, if
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
596 you set a font-instance object as the value of the `font'
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
597 property, then the font name used to create that object will
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
598 be used instead). If some cases, however, doing this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
599 conversion does not make sense, and this will be noted in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
600 the documentation for particular types of instance objects.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
601
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
602 If PROPERTY is not a built-in property, then this function will
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
603 simply set its value if LOCALE is nil. However, if LOCALE is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
604 given, then this function will attempt to add VALUE as the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
605 instantiator for the given LOCALE, using `add-spec-to-specifier'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
606 If the value of the property is not a specifier, it will
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
607 automatically be converted into a `generic' specifier.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
608
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
609
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
610 The following symbols have predefined meanings:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
611
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
612 image The image used to display the glyph.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
613
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
614 baseline Percent above baseline that glyph is to be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
615 displayed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
616
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
617 contrib-p Whether the glyph contributes to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
618 height of the line it's on.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
619
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
620 face Face of this glyph (*not* a specifier)."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
621 (check-argument-type 'glyphp glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
622 (if (memq property built-in-glyph-specifiers)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
623 (set-specifier (get glyph property) value locale tag-set how-to-add)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
624
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
625 ;; This section adds user defined properties.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
626 (if (not locale)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
627 (put glyph property value)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
628 (convert-glyph-property-into-specifier glyph property)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
629 (add-spec-to-specifier (get glyph property) value locale tag-set
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
630 how-to-add)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
631 value)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
632
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
633 (defun remove-glyph-property (glyph property &optional locale tag-set exact-p)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
634 "Remove a property from a glyph.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
635 For built-in properties, this is analogous to `remove-specifier'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
636 See `remove-specifier' for the meaning of the LOCALE, TAG-SET, and EXACT-P
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
637 arguments."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
638 (or locale (setq locale 'all))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
639 (if (memq property built-in-glyph-specifiers)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
640 (remove-specifier (glyph-property glyph property) locale tag-set exact-p)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
641 (if (eq locale 'all)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
642 (remprop glyph property)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
643 (convert-glyph-property-into-specifier glyph property)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
644 (remove-specifier (glyph-property glyph property) locale tag-set
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
645 exact-p))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
646
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
647 (defun glyph-face (glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
648 "Return the face of GLYPH."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
649 (glyph-property glyph 'face))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
650
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
651 (defun set-glyph-face (glyph face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
652 "Change the face of GLYPH to FACE."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
653 ; (interactive (glyph-interactive "face"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
654 (set-glyph-property glyph 'face face))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
655
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
656 (defun glyph-image (glyph &optional locale)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
657 "Return the image of GLYPH in LOCALE, or nil if it is unspecified.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
658
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
659 LOCALE may be a locale (the instantiators for that particular locale
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
660 will be returned), a locale type (the specifications for all locales
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
661 of that type will be returned), `all' (all specifications will be
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
662 returned), or nil (the actual specifier object will be returned).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
663
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
664 See `glyph-property' for more information."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
665 (glyph-property glyph 'image locale))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
666
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
667 (defun glyph-image-instance (glyph &optional domain default no-fallback)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
668 "Return the instance of GLYPH's image in DOMAIN.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
669
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
670 Normally DOMAIN will be a window or nil (meaning the selected window),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
671 and an instance object describing how the image appears in that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
672 particular window and buffer will be returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
673
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
674 See `glyph-property-instance' for more information."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
675 (glyph-property-instance glyph 'image domain default no-fallback))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
676
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
677 (defun glyph-image-property (glyph prop &optional domain default no-fallback)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
678 "Return property PROP of the instance of GLYPH's image in DOMAIN.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
679
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
680 Normally DOMAIN will be a window or nil (meaning the selected window).
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
681 The value returned is dependent on the image instance type."
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
682 (image-instance-property
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
683 (glyph-image-instance glyph domain default no-fallback) prop))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
684
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
685 (defun set-glyph-image (glyph spec &optional locale tag-set how-to-add)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
686 "Change the image of GLYPH in LOCALE.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
687
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
688 SPEC should be an instantiator (a string or vector; see
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
689 `make-image-specifier' for a description of possible values here),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
690 a list of (possibly tagged) instantiators, an alist of specifications
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
691 (each mapping a locale to an instantiator list), or an image specifier
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
692 object.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
693
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
694 If SPEC is an alist, LOCALE must be omitted. If SPEC is a
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
695 specifier object, LOCALE can be a locale, a locale type, `all',
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
696 or nil; see `copy-specifier' for its semantics. Otherwise LOCALE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
697 specifies the locale under which the specified instantiator(s)
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
698 will be added, and defaults to `global.'
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
699
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
700 See `set-glyph-property' for more information."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
701 ; (interactive (glyph-interactive "image"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
702 (set-glyph-property glyph 'image spec locale tag-set how-to-add))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
703
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
704 (defun glyph-contrib-p (glyph &optional locale)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
705 "Return whether GLYPH contributes to its line height.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
706
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
707 LOCALE may be a locale (the instantiators for that particular locale
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
708 will be returned), a locale type (the specifications for all locales
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
709 of that type will be returned), `all' (all specifications will be
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
710 returned), or nil (the actual specifier object will be returned).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
711
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
712 See `glyph-property' for more information."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
713 (glyph-property glyph 'contrib-p locale))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
714
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
715 (defun glyph-contrib-p-instance (glyph &optional domain default no-fallback)
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
716 "Return the instance of GLYPH's `contrib-p' property in DOMAIN.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
717
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
718 Normally DOMAIN will be a window or nil (meaning the selected window),
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
719 and an instance object describing what the `contrib-p' property is in
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
720 that particular window and buffer will be returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
721
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
722 See `glyph-property-instance' for more information."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
723 (glyph-property-instance glyph 'contrib-p domain default no-fallback))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
724
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
725 (defun set-glyph-contrib-p (glyph spec &optional locale tag-set how-to-add)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
726 "Change the contrib-p property of GLYPH in LOCALE.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
727
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
728 SPEC should be an instantiator (t or nil), a list of (possibly
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
729 tagged) instantiators, an alist of specifications (each mapping a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
730 locale to an instantiator list), or a boolean specifier object.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
731
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
732 If SPEC is an alist, LOCALE must be omitted. If SPEC is a
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
733 specifier object, LOCALE can be a locale, a locale type, `all',
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
734 or nil; see `copy-specifier' for its semantics. Otherwise LOCALE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
735 specifies the locale under which the specified instantiator(s)
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
736 will be added, and defaults to `global.'
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
737
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
738 See `set-glyph-property' for more information."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
739 ; (interactive (glyph-interactive "contrib-p"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
740 (set-glyph-property glyph 'contrib-p spec locale tag-set how-to-add))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
741
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
742 (defun glyph-baseline (glyph &optional locale)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
743 "Return the baseline of GLYPH in LOCALE, or nil if it is unspecified.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
744
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
745 LOCALE may be a locale (the instantiators for that particular locale
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
746 will be returned), a locale type (the specifications for all locales
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
747 of that type will be returned), `all' (all specifications will be
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
748 returned), or nil (the actual specifier object will be returned).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
749
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
750 See `glyph-property' for more information."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
751 (glyph-property glyph 'baseline locale))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
752
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
753 (defun glyph-baseline-instance (glyph &optional domain default no-fallback)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
754 "Return the instance of GLYPH's baseline in DOMAIN.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
755
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
756 Normally DOMAIN will be a window or nil (meaning the selected window),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
757 and an integer or nil (specifying the baseline in that particular
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
758 window and buffer) will be returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
759
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
760 See `glyph-property-instance' for more information."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
761 (glyph-property-instance glyph 'baseline domain default no-fallback))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
762
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
763 (defun set-glyph-baseline (glyph spec &optional locale tag-set how-to-add)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
764 "Change the baseline of GLYPH to SPEC in LOCALE.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
765
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
766 SPEC should be an instantiator (an integer [a percentage above the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
767 baseline of the line the glyph is on] or nil), a list of (possibly
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
768 tagged) instantiators, an alist of specifications (each mapping a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
769 locale to an instantiator list), or a generic specifier object.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
770
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
771 If SPEC is an alist, LOCALE must be omitted. If SPEC is a
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
772 specifier object, LOCALE can be a locale, a locale type, `all',
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
773 or nil; see `copy-specifier' for its semantics. Otherwise LOCALE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
774 specifies the locale under which the specified instantiator(s)
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
775 will be added, and defaults to `global.'
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
776
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
777 See `set-glyph-property' for more information."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
778 ; (interactive (glyph-interactive "baseline"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
779 (set-glyph-property glyph 'baseline spec locale tag-set how-to-add))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
780
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
781 (defun make-glyph (&optional spec-list type)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
782 "Create a new glyph of type TYPE.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
783
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
784 A glyph in XEmacs does NOT refer to a single unit of textual display (the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
785 XEmacs term for this is \"rune\"), but rather is an object encapsulating
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
786 a graphical element, such as an image or widget (an element such as a
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
787 button or text field; \"widget\" is the term for this under X Windows,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
788 and it's called a \"control\" under MS Windows). This graphical element
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
789 could appear in a buffer, a margin, a gutter, or a toolbar, or as a mouse
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
790 pointer or an icon, for example.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
791
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
792 Creating a glyph using `make-glyph' does not specify *where* the glyph
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
793 will be used, but it does specify *what* the glyph will look like. In
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
794 particular, SPEC-LIST is used to specify this, and it's used to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
795 initialize the glyph's `image' property, which is an image
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
796 specifier. (Note that \"image\" as used in the context of a glyph's
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
797 `image' property or in the terms \"image specifier\", \"image
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
798 instantiator\", or \"image instance\" does not refer to what people
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
799 normally think of as an image (which in XEmacs is called a
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
800 \"pixmap\"), but to any graphical element -- a pixmap, a widget, or
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
801 even a block of text, when used in the places that call for a glyph.)
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
802
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
803 SPEC-LIST is typically an image instantiator, describing the source for the
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
804 image data. This is either a vector of the form [FORMAT :KEYWORD DATA ...],
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
805 for example
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
806
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
807 [jpeg :file \"/user/john/images/myimage.jpg\"]
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
808
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
809 or
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
810
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
811 [xbm :data \"/* XPM */\nstatic char * copy[] = {\n...\"]
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
812
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
813 or it is a string, either giving a file name or directly specifying inline
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
814 data. See `make-image-specifier' for a detailed description of valid image
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
815 instantiators. If the instantiator is a string, XEmacs will convert it
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
816 into vector form by trying to guess whether a file name or inline data is
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
817 intended, and what kind of data is inline or in the file. Usually it does
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
818 a pretty good job. See `console-type-image-conversion-list' for details of
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
819 how this works.
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
820
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
821 If the instantiator specifies data from a file, the data will be read in
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
822 when `make-glyph' is called and substituted inline into the instantiator,
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
823 using the :data keyword. This means that the file must exist when the
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
824 glyph is created, but does not need to exist afterwards (e.g. it may safely
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
825 be a temporary file).
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
826
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
827 When errors occur in the process of reading image data from a file
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
828 \(e.g. the file does not exist or the data is of the wrong format or
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
829 corrupted), no Lisp error will currently be signalled. Instead, the
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
830 instantiator is skipped and warnings will be issued at level `debug'. \(A
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
831 glyph with no instantiators in it cannot be displayed.) Normally, such
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
832 warnings are ignored entirely, but you can change this by setting
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
833 `log-warning-minimum-level'. This is useful if you're trying to debug why
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
834 particular instantiators are not being processed. (#### We should probably
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
835 provide a way of getting errors in such circumstances, or even make this
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
836 the default behavior.)
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
837
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
838 Technically, SPEC-LIST can also be a list of image instantiators (each one
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
839 in turn is tried until an image is successfully produced), a cons of a
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
840 locale (frame, buffer, etc.) and an instantiator, a list of such conses,
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
841 or any other form accepted by `canonicalize-spec-list'.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
842
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
843 If you're not familiar with specifiers, you should be in order to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
844 understand how glyphs work. The clearest introduction to specifiers
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
845 is in the Lispref manual, available under Info. (Choose
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
846 Help->Info->Info Contents on the menubar or type \\[info].) You can
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
847 also see `make-specifier' for a capsule summary. What's important to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
848 keep in mind is that a specifier lets you set a different value for
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
849 any particular buffer, window, frame, device, or console. This allows
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
850 for a great deal of flexibility; in particular, only one global glyph
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
851 needs to exist for a particular purpose (e.g. the icon used to represent
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
852 an iconified frame, the mouse pointer used over particular areas of a
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
853 frame, etc.), and in these cases you do not create your own glyph, but
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
854 rather modify the existing one.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
855
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
856 As well as using SPEC-LIST to initialize the glyph, you can set
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
857 specifications using `set-glyph-image'. Note that, due to a possibly
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
858 questionable historical design decision, a glyph itself is not
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
859 actually a specifier, but rather is an object containing an image
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
860 specifier (as well as other, seldom-used properties). Therefore, you
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
861 cannot set or access specifications for the glyph's image by directly
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
862 using `set-specifier', `specifier-instance' or the like on the glyph;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
863 instead use them on `(glyph-image GLYPH)' or use the convenience
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
864 functions `set-glyph-image', `glyph-image-instance', and
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
865 `glyph-image'.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
866
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
867 Once you have created a glyph, you specify where it will be used as follows:
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
868
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
869 -- To insert a glyph into a buffer, create an extent in the buffer and then
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
870 use `set-extent-begin-glyph' or `set-extent-end-glyph' to set a glyph
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
871 to be displayed at the corresponding edge of the extent. (It is common
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
872 to create zero-width extents for this purpose.)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
873
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
874 -- To insert a glyph into the left or right margin of a buffer, first
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
875 make sure the margin is visible by setting a value for the specifiers
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
876 `left-margin-width' or `right-margin-width'. (Not strictly necessary
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
877 when using margin glyphs with layout policy `whitespace'.) Then follow
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
878 the same procedure above for inserting a glyph in a buffer, and then
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
879 set a non-default layout policy for the glyph using
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
880 `set-extent-begin-glyph-layout' or `set-extent-end-glyph-layout'.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
881 Alternatively, use the high-level annotations API (see
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
882 `make-annotation'). (In point of fact, you can also use the annotations
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
883 API for glyphs in a buffer, by setting a layout policy of `text'.)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
884
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
885 -- To insert a glyph into the modeline, just put the glyph directly as
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
886 one of the modeline elements. (Unfortunately you can't currently
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
887 put a begin glyph or end glyph on one of the modeline extents --
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
888 they're ignored.)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
889
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
890 -- To insert a glyph into a toolbar, specify it as part of a toolbar
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
891 instantiator (typically set on the specifier `default-toolbar').
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
892 See `default-toolbar' for more information. (Note that it is standard
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
893 practice to use a symbol in place of the glyph list in the toolbar
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
894 instantiator; the symbol is evalled to get the glyph list. This
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
895 facilitates both creating the toolbar instantiator and modifying
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
896 individual glyphs in a toolbar later on. For example, you can
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
897 change the way that the Mail toolbar button looks by modifying the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
898 value of the variable `toolbar-mail-icon' (in general, `toolbar-*-icon')
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
899 and then calling `(set-specifier-dirty-flag default-toolbar)'.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
900 (#### Unfortunately this doesn't quite work the way it should; the
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
901 change will appear in new frames, but not existing ones.)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
902
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
903 -- To insert a glyph into a gutter, create or modify a gutter instantiator
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
904 (typically set on the specifier `default-gutter'). Gutter instantiators
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
905 consist of strings or lists of strings, so to insert a glyph, create an
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
906 extent over the string, and use `set-extent-begin-glyph' or
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
907 `set-extent-end-glyph' to set a glyph to be displayed at the corresponding
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
908 edge of the extent, just like for glyphs in a buffer.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
909
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
910 -- To use a glyph as the icon for a frame, you do not actually create a new
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
911 glyph; rather, you change the specifications for the existing glyph
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
912 `frame-icon-glyph'. (Remember that, because of the specifier nature of
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
913 glyphs, you can set different values for any particular buffer or frame.)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
914
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
915 -- To use a glyph as the mouse pointer, in general you do not create a
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
916 new glyph, but rather you change the specifications of various existing
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
917 glyphs, such as `text-pointer-glyph' for the pointer used over text,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
918 `modeline-pointer-glyph' for the pointer used over the modeline, etc.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
919 Do an apropos over `*-pointer-glyph' to find all of them. (Note also
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
920 that you can temporarily set the mouse pointer to some specific shape
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
921 by using `set-frame-pointer', which takes an image instance, as obtained
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
922 from calling `glyph-image-instance' on a glyph of type `pointer' --
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
923 either one of the above-mentioned variables or one you created yourself.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
924 (See below for what it means to create a glyph of type `pointer'.)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
925 This pointer will last only until the next mouse motion event is
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
926 processed or certain other things happen, such as creating or deleting
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
927 a window. (In fact, the above-mentioned pointer glyph variables are
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
928 implemented as part of the default handler for mouse motion events.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
929 If you want to customize this behavior, take a look at `mode-motion-hook',
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
930 or `mouse-motion-handler' if you really want to get low-level.)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
931
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
932 -- To use a glyph to control the shape of miscellaneous redisplay effects
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
933 such as the truncation and continuation markers, set the appropriate
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
934 existing glyph variables, as for icons and pointers above. See
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
935 `continuation-glyph', `control-arrow-glyph', `hscroll-glyph',
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
936 `invisible-text-glyph', `octal-escape-glyph', and `truncation-glyph'.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
937 See also `overlay-arrow-string', an odd redisplay leftover which can
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
938 be set to a glyph you created, and will cause the glyph to be displayed
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
939 on top of the text position specified in the marker stored in
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
940 `overlay-arrow-position'.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
941
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
942 -- To use a glyph in a display table (i.e. to control the appearance of
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
943 any individual character), create the appropriate character glyphs
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
944 and then set a specification for the specifier `current-display-table',
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
945 which controls the appearance of characters. You can also set an
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
946 overriding display table for use with text displayed in a particular
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
947 face; see `set-face-display-table' and `make-display-table'.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
948
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
949 -- To use a glyph as the background pixmap of a face: Note that the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
950 background pixmap of a face is actually an image specifier -- probably
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
951 the only place in XEmacs where an image specifier occurs outside of
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
952 a glyph. Similarly to how the glyph's image specifier works, you
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
953 don't create your own image specifier, but rather add specifications
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
954 to the existing one (using `set-face-background-pixmap'). Note that
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
955 the image instance that is generated in order to actually display the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
956 background pixmap is of type `mono-pixmap', meaning that it's a two-color
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
957 image and the foreground and background of the image get filled in with
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
958 the corresponding colors from the face.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
959
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
960 It is extremely rare that you will ever have to specify a value for TYPE,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
961 which should be one of `buffer' (used for glyphs in an extent, the modeline,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
962 the toolbar, or elsewhere in a buffer), `pointer' (used for the mouse-pointer),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
963 or `icon' (used for a frame's icon), and defaults to `buffer'. The only cases
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
964 where it needs to be specified is when creating icon or pointer glyphs, and
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
965 in both cases the necessary glyphs have already been created at startup and
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
966 are accessed through the appropriate variables, e.g. `text-pointer-glyph'
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
967 (or in general, `*-pointer-glyph') and `frame-icon-glyph'."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
968 (let ((glyph (make-glyph-internal type)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
969 (and spec-list (set-glyph-image glyph spec-list))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
970 glyph))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
971
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
972 (defun buffer-glyph-p (object)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
973 "Return t if OBJECT is a glyph of type `buffer'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
974 (and (glyphp object) (eq 'buffer (glyph-type object))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
975
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
976 (defun pointer-glyph-p (object)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
977 "Return t if OBJECT is a glyph of type `pointer'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
978 (and (glyphp object) (eq 'pointer (glyph-type object))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
979
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
980 (defun icon-glyph-p (object)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
981 "Return t if OBJECT is a glyph of type `icon'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
982 (and (glyphp object) (eq 'icon (glyph-type object))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
983
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
984 (defun make-pointer-glyph (&optional spec-list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
985 "Return a new `pointer-glyph' object with the specification list SPEC-LIST.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
986 This is equivalent to calling `make-glyph', specifying a type of `pointer'.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
987 See `make-glyph' for more information.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
988
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
989 It is extremely unlikely that you will ever need to create a pointer glyph.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
990 Instead, you probably want to be calling `set-glyph-image' on an existing
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
991 glyph, e.g. `text-pointer-glyph'."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
992 (make-glyph spec-list 'pointer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
993
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
994 (defun make-icon-glyph (&optional spec-list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
995 "Return a new `icon-glyph' object with the specification list SPEC-LIST.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
996 This is equivalent to calling `make-glyph', specifying a type of `icon'.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
997 See `make-glyph' for more information.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
998
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
999 It is extremely unlikely that you will ever need to create a icon glyph.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
1000 Instead, you probably want to be calling `set-glyph-image' on
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
1001 `frame-icon-glyph'."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1002 (make-glyph spec-list 'icon))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1003
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1004 (defun nothing-image-instance-p (object)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1005 "Return t if OBJECT is an image instance of type `nothing'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1006 (and (image-instance-p object) (eq 'nothing (image-instance-type object))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1007
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1008 (defun text-image-instance-p (object)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1009 "Return t if OBJECT is an image instance of type `text'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1010 (and (image-instance-p object) (eq 'text (image-instance-type object))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1011
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1012 (defun mono-pixmap-image-instance-p (object)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1013 "Return t if OBJECT is an image instance of type `mono-pixmap'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1014 (and (image-instance-p object) (eq 'mono-pixmap
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1015 (image-instance-type object))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1016
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1017 (defun color-pixmap-image-instance-p (object)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1018 "Return t if OBJECT is an image instance of type `color-pixmap'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1019 (and (image-instance-p object) (eq 'color-pixmap
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1020 (image-instance-type object))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1021
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1022 (defun pointer-image-instance-p (object)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1023 "Return t if OBJECT is an image instance of type `pointer'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1024 (and (image-instance-p object) (eq 'pointer (image-instance-type object))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1025
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
1026 (defun widget-image-instance-p (object)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
1027 "Return t if OBJECT is an image instance of type `widget'."
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
1028 (and (image-instance-p object) (eq 'widget (image-instance-type object))))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
1029
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1030 (defun subwindow-image-instance-p (object)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
1031 "Return t if OBJECT is an image instance of type `subwindow'."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1032 (and (image-instance-p object) (eq 'subwindow (image-instance-type object))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1033
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1034 ;;;;;;;;;; the built-in glyphs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1035
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1036 (defvar text-pointer-glyph (make-pointer-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1037 "*The shape of the mouse-pointer when over text.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1038 This is a glyph; use `set-glyph-image' to change it.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1039 (set-glyph-face text-pointer-glyph 'pointer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1040
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1041 (defvar nontext-pointer-glyph (make-pointer-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1042 "*The shape of the mouse-pointer when over a buffer, but not over text.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1043 This is a glyph; use `set-glyph-image' to change it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1044 If unspecified in a particular domain, `text-pointer-glyph' is used.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1045 (set-glyph-face nontext-pointer-glyph 'pointer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1046
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1047 (defvar modeline-pointer-glyph (make-pointer-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1048 "*The shape of the mouse-pointer when over the modeline.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1049 This is a glyph; use `set-glyph-image' to change it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1050 If unspecified in a particular domain, `nontext-pointer-glyph' is used.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1051 (set-glyph-face modeline-pointer-glyph 'pointer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1052
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1053 (defvar selection-pointer-glyph (make-pointer-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1054 "*The shape of the mouse-pointer when over a selectable text region.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1055 This is a glyph; use `set-glyph-image' to change it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1056 If unspecified in a particular domain, `text-pointer-glyph' is used.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1057 (set-glyph-face selection-pointer-glyph 'pointer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1058
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1059 (defvar busy-pointer-glyph (make-pointer-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1060 "*The shape of the mouse-pointer when XEmacs is busy.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1061 This is a glyph; use `set-glyph-image' to change it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1062 If unspecified in a particular domain, the pointer is not changed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1063 when XEmacs is busy.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1064 (set-glyph-face busy-pointer-glyph 'pointer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1065
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1066 (defvar toolbar-pointer-glyph (make-pointer-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1067 "*The shape of the mouse-pointer when over a toolbar.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1068 This is a glyph; use `set-glyph-image' to change it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1069 If unspecified in a particular domain, `nontext-pointer-glyph' is used.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1070 (set-glyph-face toolbar-pointer-glyph 'pointer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1071
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1072 (defvar divider-pointer-glyph (make-pointer-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1073 "*The shape of the mouse-pointer when over a window divider.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1074 This is a glyph; use `set-glyph-image' to change it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1075 If unspecified in a particular domain, `nontext-pointer-glyph' is used.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1076 (set-glyph-face divider-pointer-glyph 'pointer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1077
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1078 ;; The following three are in C.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1079 (if (featurep 'menubar)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1080 (set-glyph-face menubar-pointer-glyph 'pointer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1081 (if (featurep 'scrollbar)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1082 (set-glyph-face scrollbar-pointer-glyph 'pointer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1083 (set-glyph-face gc-pointer-glyph 'pointer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1084
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1085 ;; Now add the magic access/set behavior.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1086
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1087 (defun dontusethis-set-value-glyph-handler (sym args fun harg handler)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1088 (error "Use `set-glyph-image' to set `%s'" sym))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1089 (defun dontusethis-make-unbound-glyph-handler (sym args fun harg handler)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1090 (error "Can't `makunbound' `%s'" sym))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1091 (defun dontusethis-make-local-glyph-handler (sym args fun harg handler)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1092 (error "Use `set-glyph-image' to make local values for `%s'" sym))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1093
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1094 (defun define-constant-glyph (sym)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1095 (dontusethis-set-symbol-value-handler
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1096 sym 'set-value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1097 'dontusethis-set-value-glyph-handler)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1098 (dontusethis-set-symbol-value-handler
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1099 sym 'make-unbound
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1100 'dontusethis-make-unbound-glyph-handler)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1101 (dontusethis-set-symbol-value-handler
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1102 sym 'make-local
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1103 'dontusethis-make-local-glyph-handler)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1104 ;; Make frame properties magically work with glyph variables.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1105 (put sym 'const-glyph-variable t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1106
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1107 (define-constant-glyph 'text-pointer-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1108 (define-constant-glyph 'nontext-pointer-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1109 (define-constant-glyph 'modeline-pointer-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1110 (define-constant-glyph 'selection-pointer-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1111 (define-constant-glyph 'busy-pointer-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1112 (define-constant-glyph 'gc-pointer-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1113 (define-constant-glyph 'divider-pointer-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1114 (define-constant-glyph 'toolbar-pointer-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1115 (define-constant-glyph 'menubar-pointer-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1116 (define-constant-glyph 'scrollbar-pointer-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1117
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1118 (define-constant-glyph 'octal-escape-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1119 (define-constant-glyph 'control-arrow-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1120 (define-constant-glyph 'invisible-text-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1121 (define-constant-glyph 'hscroll-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1122 (define-constant-glyph 'truncation-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1123 (define-constant-glyph 'continuation-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1124
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1125 (define-constant-glyph 'frame-icon-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1126
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1127 ;; backwards compatibility garbage
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1128
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1129 (defun dontusethis-old-pointer-shape-handler (sym args fun harg handler)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1130 (let ((value (car args)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1131 (if (null value)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1132 (remove-specifier harg 'global)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1133 (set-glyph-image (symbol-value harg) value))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1134
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1135 ;; It might or might not be garbage, but it's rude. Make these
2607
f8db302d6298 [xemacs-hg @ 2005-02-22 23:38:49 by ben]
ben
parents: 446
diff changeset
1136 ;; `compatible' instead of `obsolete.' -slb
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1137 (defun define-obsolete-pointer-glyph (old new)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1138 (define-compatible-variable-alias old new)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1139 (dontusethis-set-symbol-value-handler
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1140 old 'set-value 'dontusethis-old-pointer-shape-handler new))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1141
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1142 ;;; (defvar x-pointer-shape nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1143 (define-obsolete-pointer-glyph 'x-pointer-shape 'text-pointer-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1144
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1145 ;;; (defvar x-nontext-pointer-shape nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1146 (define-obsolete-pointer-glyph 'x-nontext-pointer-shape 'nontext-pointer-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1147
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1148 ;;; (defvar x-mode-pointer-shape nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1149 (define-obsolete-pointer-glyph 'x-mode-pointer-shape 'modeline-pointer-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1150
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1151 ;;; (defvar x-selection-pointer-shape nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1152 (define-obsolete-pointer-glyph 'x-selection-pointer-shape
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1153 'selection-pointer-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1154
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1155 ;;; (defvar x-busy-pointer-shape nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1156 (define-obsolete-pointer-glyph 'x-busy-pointer-shape 'busy-pointer-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1157
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1158 ;;; (defvar x-gc-pointer-shape nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1159 (define-obsolete-pointer-glyph 'x-gc-pointer-shape 'gc-pointer-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1160
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1161 ;;; (defvar x-toolbar-pointer-shape nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1162 (define-obsolete-pointer-glyph 'x-toolbar-pointer-shape 'toolbar-pointer-glyph)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1163
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1164 ;; for subwindows
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1165 (defalias 'subwindow-xid 'image-instance-subwindow-id)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1166 (defalias 'subwindow-width 'image-instance-width)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1167 (defalias 'subwindow-height 'image-instance-height)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1168 ;;;;;;;;;; initialization
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1169
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1170 (defun init-glyphs ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1171 ;; initialize default image types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1172 (if (featurep 'x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1173 (set-console-type-image-conversion-list 'x
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1174 `(,@(if (featurep 'xpm) '(("\\.xpm\\'" [xpm :file nil] 2)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1175 ("\\.xbm\\'" [xbm :file nil] 2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1176 ,@(if (featurep 'xpm) '(("\\`/\\* XPM \\*/" [xpm :data nil] 2)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1177 ,@(if (featurep 'xface) '(("\\`X-Face:" [xface :data nil] 2)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1178 ,@(if (featurep 'gif) '(("\\.gif\\'" [gif :file nil] 2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1179 ("\\`GIF8[79]" [gif :data nil] 2)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1180 ,@(if (featurep 'jpeg) '(("\\.jpe?g\\'" [jpeg :file nil] 2)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1181 ;; all of the JFIF-format JPEG's that I've seen begin with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1182 ;; the following. I have no idea if this is standard.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1183 ,@(if (featurep 'jpeg) '(("\\`\377\330\377\340\000\020JFIF"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1184 [jpeg :data nil] 2)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1185 ,@(if (featurep 'png) '(("\\.png\\'" [png :file nil] 2)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1186 ,@(if (featurep 'png) '(("\\`\211PNG" [png :data nil] 2)))
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 442
diff changeset
1187 ("" [string :data nil] 2)
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 442
diff changeset
1188 ("" [nothing]))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1189 ;; #### this should really be formatted-string, not string but we
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1190 ;; don't have it implemented yet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1191 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1192 ;; #define could also mean a bitmap as well as a version 1 XPM. Who
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1193 ;; cares. We don't want the file contents getting converted to a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1194 ;; string in either case which is why the entry is there.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1195 (if (featurep 'tty)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1196 (progn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1197 (set-console-type-image-conversion-list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1198 'tty
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1199 '(("^#define" [string :data "[xpm]"])
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1200 ("\\`X-Face:" [string :data "[xface]"])
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1201 ("\\`/\\* XPM \\*/" [string :data "[xpm]"])
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1202 ("\\`GIF87" [string :data "[gif]"])
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1203 ("\\`\377\330\340\000\020JFIF" [string :data "[jpeg]"])
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1204 ("" [string :data nil] 2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1205 ;; this last one is here for pointers and icons and such --
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1206 ;; strings are not allowed so they will be ignored.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1207 ("" [nothing])))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1208
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1209 ;; finish initializing truncation glyph -- created internally
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1210 ;; because it has a built-in bitmap
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1211 (set-glyph-image truncation-glyph "$" 'global 'tty)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1212
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1213 ;; finish initializing continuation glyph -- created internally
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1214 ;; because it has a built-in bitmap
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1215 (set-glyph-image continuation-glyph "\\" 'global 'tty)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1216
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1217 ;; finish initializing hscroll glyph -- created internally
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1218 ;; because it has a built-in bitmap
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1219 (set-glyph-image hscroll-glyph "$" 'global 'tty)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1220
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1221 (set-glyph-image octal-escape-glyph "\\")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1222 (set-glyph-image control-arrow-glyph "^")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1223 (set-glyph-image invisible-text-glyph " ...")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1224 ;; (set-glyph-image hscroll-glyph "$")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1225
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1226 (let ((face (make-face 'border-glyph
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1227 "Truncation and continuation glyphs face")))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1228 (set-glyph-face continuation-glyph face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1229 (set-glyph-face truncation-glyph face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1230 (set-glyph-face hscroll-glyph face))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1231
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1232 ;; finish initializing xemacs logo -- created internally because it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1233 ;; has a built-in bitmap
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1234 (if (featurep 'xpm)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1235 (set-glyph-image xemacs-logo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1236 (concat "../etc/"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1237 (if emacs-beta-version
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1238 "xemacs-beta.xpm"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1239 "xemacs.xpm"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1240 'global 'x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1241 (cond ((featurep 'xpm)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1242 (set-glyph-image frame-icon-glyph
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1243 (concat "../etc/" "xemacs-icon.xpm")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1244 'global 'x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1245 ((featurep 'x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1246 (set-glyph-image frame-icon-glyph
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1247 (concat "../etc/" "xemacs-icon2.xbm")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1248 'global 'x)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1249
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1250 (if (featurep 'tty)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1251 (set-glyph-image xemacs-logo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1252 "XEmacs <insert spiffy graphic logo here>"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1253 'global 'tty))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1254 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1255
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1256 (init-glyphs)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1257
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1258 ;;; glyphs.el ends here.