Mercurial > hg > xemacs-beta
annotate src/redisplay.h @ 1204:e22b0213b713
[xemacs-hg @ 2003-01-12 11:07:58 by michaels]
modules/ChangeLog:
2002-12-16 Ben Wing <ben@xemacs.org>
* postgresql/postgresql.c:
remove ifdef USE_KKCC.
src/ChangeLog:
2003-01-08 Mike Sperber <mike@xemacs.org>
* console.h (CDFW_CONSOLE): Don't lead to a crash if we're dealing
with a dead window/frame/device/console.
2002-12-20 Mike Sperber <mike@xemacs.org>
* ui-gtk.c: Fix typo from Ben's patch: emacs_ffi_data is a
typedef, not a struct. emacs_gtk_object_data is a typedef, not a
struct.
* gtk-glue.c (gdk_event_to_emacs_event): Fix typos from Ben's
patch: le -> emacs_event + rearrange the code.
* event-gtk.c (gtk_event_to_emacs_event): Fix typos from Ben's
patch: ..._UNDERLYING_GDK_EVENT -> ..._GDK_EVENT, ev -> key_event.
* device-gtk.c: Fix typo from Ben's patch: x_keysym_map_hash_table
-> x_keysym_map_hashtable.
2002-12-19 Mike Sperber <mike@xemacs.org>
* menubar-x.c (set_frame_menubar): Initialize protect_me field of
popup_data.
2002-12-16 Ben Wing <ben@xemacs.org>
Major cleanup of KKCC, etc.
KKCC, pdump-related:
-- descriptions are written for all objects. this required some
changes in the format of some objects, e.g. extents, popup-data,
coding system, lstream, lcrecord-list.
-- KKCC now handles weakness in markers, hash tables, elsewhere
correctly (formerly, you'd eventually get a stack overflow due
to endlessly expanding markers).
-- textual changes: lrecord_description -> memory_description,
struct_description -> sized_memory_description.
-- extensive comment describing descriptions and pdump.
-- redo XD_UNION so it works inline and change its format to provide
sufficient info for pdump. implement XD_UNION in pdump. also add
XD_UNION_DYNAMIC_SIZE, which works like XD_UNION except for when
auto-computing structure sizes.
-- add support for XD_INDIRECT in description offsets (used by
extents).
-- add support for "description maps", allowing for indirect
descriptions that are retrieved from an object at run-time. this
generalizes XD_CODING_SYSTEM_END, XD_SPECIFIER_END, etc., which
have now been eliminated.
-- add a fifth field "flags" to memory_description, to support flags
that can be specified for this particular line. Currently defined
flags are XD_FLAG_NO_KKCC (KKCC should ignore this entry; useful
for the weakness above in markers, etc.), XD_FLAG_NO_PDUMP (pdump
should ignore this entry), XD_FLAG_UNION_DEFAULT_ENTRY (in
union maps, this specifies a "default" entry for all remaining
values), and XD_FLAG_FREE_LISP_OBJECT (for use with lcrecord-lists).
-- clean up the kkcc-itis in events, so that the differences
between event data as separate objects and as a union are now
minimized to a small number of places. with the new XD_UNION, we
no longer need event data as separate objects, so this code is no
longer ifdef USE_KKCC, but instead ifdef EVENT_DATA_AS_OBJECTS,
not used by default. make sure that we explicitly free the
separate event data objects when no longer in use, to maintain the
invariant the event processing causes no consing.
-- also remove other USE_KKCC ifdefs when not necessary.
-- allow for KKCC compilation under MS Windows.
-- fix README.kkcc.
-- dump_add_root_object -> dump_add_root_lisp_object.
-- implement dump_add_root_block and use this to handle
dump_add_opaque.
-- factor out some code duplicated in kkcc and pdump.
Other allocation/object-related:
-- change various *slots.h so MARKED_SLOT() call no longer
includes semicolon.
-- free_marker() takes a Lisp_Object not a direct pointer.
-- make bit vectors lcrecords, like vectors, and eliminate code
that essentially duplicated the lcrecord handling.
-- additional asserts in FREE_FIXED_TYPE, formerly duplicated in
the various callers of this.
-- all lcrecord allocation functions now zero out the returned
lcrecords. unnecessary calls to zero_lcrecord removed. add long
comment describing these functions.
-- extract out process and coding system slots, like for buffers,
frames, etc.
-- lcrecords now set the type of items sitting on the free list to
lcrecord_type_free.
-- changes to the way that gap arrays are allocated, for kkcc's
benefit -- now, one single memory block with a stretchy array on
the end, instead of a separate block holding the array.
Error-checking-related:
-- now can compile with C++ under MS Windows. clean up compile errors
discovered that way. (a few were real problems)
-- add C++ error-checking code to verify problems with mismatched
GCPRO/UNGCPRO. (there were a few in the kkcc code.) add long
comment about how to catch insufficient GCPRO (yes, it's possible
using C++).
-- add debug_p4(), a simple object printer, when debug_print()
doesn't work.
-- add dp() and db() as short synonyms of debug_print(),
debug_backtrace().
-- `print' tries EXTREMELY hard to avoid core dumping when printing
when crashing or from debug_print(), and tries as hard as it
reasonably can in other situations.
-- Correct the message output upon crashing to be more up-to-date.
Event-related:
-- document event-matches-key-specifier-p better.
-- generalize the dispatch queues formerly duplicated in the
various event implementations. add event methods to drain pending
events. generalize and clean up QUIT handling, removing
event-specific quit processing. allow arbitrary keystrokes, not
just ASCII, to be the QUIT char. among other things, this should
fix some longstanding bugs in X quit handling. long comment
describing the various event queues.
-- implement delaying of XFlush() if there are pending expose events.
SOMEONE PLEASE TRY THIS OUT.
-- Fix `xemacs -batch -l dunnet' under Cygwin. Try to fix under
MS Windows but not quite there yet.
Other:
-- class -> class_ and no more C++ games with this item.
new -> new_ in the lwlib code, so far not elsewhere.
-- use `struct htentry' not `struct hentry' in elhash.c to avoid
debugger confusion with hash.c.
-- new macros ALIST_LOOP_3, ALIST_LOOP_4.
* README.kkcc:
* alloc.c:
* alloc.c (deadbeef_memory):
* alloc.c (allocate_lisp_storage):
* alloc.c (copy_lisp_object):
* alloc.c (ALLOCATE_FIXED_TYPE_1):
* alloc.c (FREE_FIXED_TYPE):
* alloc.c (make_vector_internal):
* alloc.c (make_bit_vector_internal):
* alloc.c (make_key_data):
* alloc.c (make_button_data):
* alloc.c (make_motion_data):
* alloc.c (make_process_data):
* alloc.c (make_timeout_data):
* alloc.c (make_magic_data):
* alloc.c (make_magic_eval_data):
* alloc.c (make_eval_data):
* alloc.c (make_misc_user_data):
* alloc.c (struct string_chars_block):
* alloc.c (mark_lcrecord_list):
* alloc.c (make_lcrecord_list):
* alloc.c (alloc_managed_lcrecord):
* alloc.c (free_managed_lcrecord):
* alloc.c (alloc_automanaged_lcrecord):
* alloc.c (staticpro_1):
* alloc.c (staticpro):
* alloc.c (lispdesc_indirect_count_1):
* alloc.c (lispdesc_indirect_description_1):
* alloc.c (lispdesc_one_description_line_size):
* alloc.c (lispdesc_structure_size):
* alloc.c (mark_object_maybe_checking_free):
* alloc.c (mark_with_description):
* alloc.c (mark_struct_contents):
* alloc.c (mark_object):
* alloc.c (tick_lcrecord_stats):
* alloc.c (free_cons):
* alloc.c (free_key_data):
* alloc.c (free_button_data):
* alloc.c (free_motion_data):
* alloc.c (free_process_data):
* alloc.c (free_timeout_data):
* alloc.c (free_magic_data):
* alloc.c (free_magic_eval_data):
* alloc.c (free_eval_data):
* alloc.c (free_misc_user_data):
* alloc.c (free_marker):
* alloc.c (compact_string_chars):
* alloc.c (gc_sweep):
* alloc.c (garbage_collect_1):
* alloc.c (Fgarbage_collect):
* alloc.c (common_init_alloc_early):
* alloc.c (init_alloc_early):
* alloc.c (init_alloc_once_early):
* buffer.c:
* buffer.c (mark_buffer):
* buffer.c (MARKED_SLOT):
* buffer.c (cleanup_buffer_undo_lists):
* buffer.c (Fget_file_buffer):
* buffer.h (MARKED_SLOT):
* bufslots.h:
* bytecode.c:
* callint.c:
* casetab.c:
* chartab.c:
* chartab.c (symbol_to_char_table_type):
* cmdloop.c:
* cmdloop.c (Fcommand_loop_1):
* config.h.in (new):
* conslots.h:
* console-gtk-impl.h (struct gtk_frame):
* console-impl.h:
* console-impl.h (struct console):
* console-impl.h (MARKED_SLOT):
* console-impl.h (CONSOLE_QUIT_EVENT):
* console-msw-impl.h (XM_BUMPQUEUE):
* console-msw.c (write_string_to_mswindows_debugging_output):
* console-msw.h:
* console-stream-impl.h:
* console-stream-impl.h (struct stream_console):
* console-stream.c:
* console-stream.c (stream_init_console):
* console-stream.h:
* console-tty.c:
* console-tty.h:
* console-x.h:
* console.c:
* console.c (mark_console):
* console.c (MARKED_SLOT):
* console.c (allocate_console):
* console.c (get_console_variant):
* console.c (create_console):
* console.c (delete_console_internal):
* console.c (Fset_input_mode):
* console.c (Fcurrent_input_mode):
* console.c (common_init_complex_vars_of_console):
* console.h:
* console.h (console_variant):
* console.h (device_metrics):
* data.c:
* data.c (Faref):
* data.c (Faset):
* data.c (decode_weak_list_type):
* database.c:
* debug.c (xemacs_debug_loop):
* debug.c (FROB):
* debug.c (Fadd_debug_class_to_check):
* debug.c (Fdelete_debug_class_to_check):
* debug.c (Fset_debug_classes_to_check):
* debug.c (Fset_debug_class_types_to_check):
* debug.c (Fdebug_types_being_checked):
* debug.h (DASSERT):
* device-gtk.c:
* device-impl.h (struct device):
* device-impl.h (MARKED_SLOT):
* device-msw.c:
* device-x.c:
* device-x.c (x_init_device_class):
* device-x.c (x_comp_visual_info):
* device-x.c (x_try_best_visual_class):
* device-x.c (x_init_device):
* device-x.c (construct_name_list):
* device-x.c (x_get_resource_prefix):
* device-x.c (Fx_get_resource):
* device-x.c (Fx_display_visual_class):
* device.c:
* device.c (MARKED_SLOT):
* device.c (allocate_device):
* device.c (Fmake_device):
* device.c (delete_device_internal):
* device.c (Fset_device_class):
* device.h:
* devslots.h:
* devslots.h (MARKED_SLOT):
* dialog-msw.c:
* dired-msw.c (mswindows_ls_sort_fcn):
* dired-msw.c (mswindows_get_files):
* dired-msw.c (mswindows_format_file):
* doprnt.c (parse_doprnt_spec):
* dumper.c:
* dumper.c (struct):
* dumper.c (dump_add_root_block):
* dumper.c (dump_add_root_struct_ptr):
* dumper.c (dump_add_root_lisp_object):
* dumper.c (pdump_struct_list_elt):
* dumper.c (pdump_get_entry_list):
* dumper.c (pdump_backtrace):
* dumper.c (pdump_bump_depth):
* dumper.c (pdump_register_sub):
* dumper.c (pdump_register_object):
* dumper.c (pdump_register_struct_contents):
* dumper.c (pdump_register_struct):
* dumper.c (pdump_store_new_pointer_offsets):
* dumper.c (pdump_dump_data):
* dumper.c (pdump_reloc_one):
* dumper.c (pdump_allocate_offset):
* dumper.c (pdump_scan_by_alignment):
* dumper.c (pdump_dump_root_blocks):
* dumper.c (pdump_dump_rtables):
* dumper.c (pdump_dump_root_lisp_objects):
* dumper.c (pdump):
* dumper.c (pdump_load_finish):
* dumper.c (pdump_file_get):
* dumper.c (pdump_resource_get):
* dumper.c (pdump_load):
* editfns.c (save_excursion_restore):
* editfns.c (user_login_name):
* editfns.c (save_restriction_restore):
* elhash.c:
* elhash.c (htentry):
* elhash.c (struct Lisp_Hash_Table):
* elhash.c (HTENTRY_CLEAR_P):
* elhash.c (LINEAR_PROBING_LOOP):
* elhash.c (check_hash_table_invariants):
* elhash.c (mark_hash_table):
* elhash.c (hash_table_equal):
* elhash.c (print_hash_table_data):
* elhash.c (free_hentries):
* elhash.c (make_general_lisp_hash_table):
* elhash.c (decode_hash_table_weakness):
* elhash.c (decode_hash_table_test):
* elhash.c (Fcopy_hash_table):
* elhash.c (resize_hash_table):
* elhash.c (pdump_reorganize_hash_table):
* elhash.c (find_htentry):
* elhash.c (Fgethash):
* elhash.c (Fputhash):
* elhash.c (remhash_1):
* elhash.c (Fremhash):
* elhash.c (Fclrhash):
* elhash.c (copy_compress_hentries):
* elhash.c (elisp_maphash_unsafe):
* elhash.c (finish_marking_weak_hash_tables):
* elhash.c (prune_weak_hash_tables):
* elhash.h:
* emacs.c:
* emacs.c (main_1):
* emacs.c (main):
* emacs.c (shut_down_emacs):
* emodules.h (dump_add_root_lisp_object):
* eval.c:
* eval.c (unwind_to_catch):
* eval.c (maybe_signal_error_1):
* eval.c (maybe_signal_continuable_error_1):
* eval.c (maybe_signal_error):
* eval.c (maybe_signal_continuable_error):
* eval.c (maybe_signal_error_2):
* eval.c (maybe_signal_continuable_error_2):
* eval.c (maybe_signal_ferror):
* eval.c (maybe_signal_continuable_ferror):
* eval.c (maybe_signal_ferror_with_frob):
* eval.c (maybe_signal_continuable_ferror_with_frob):
* eval.c (maybe_syntax_error):
* eval.c (maybe_sferror):
* eval.c (maybe_invalid_argument):
* eval.c (maybe_invalid_constant):
* eval.c (maybe_invalid_operation):
* eval.c (maybe_invalid_change):
* eval.c (maybe_invalid_state):
* eval.c (Feval):
* eval.c (call_trapping_problems):
* eval.c (call_with_suspended_errors):
* eval.c (warn_when_safe_lispobj):
* eval.c (warn_when_safe):
* eval.c (vars_of_eval):
* event-Xt.c:
* event-Xt.c (maybe_define_x_key_as_self_inserting_character):
* event-Xt.c (x_to_emacs_keysym):
* event-Xt.c (x_event_to_emacs_event):
* event-Xt.c (emacs_Xt_enqueue_focus_event):
* event-Xt.c (emacs_Xt_format_magic_event):
* event-Xt.c (emacs_Xt_compare_magic_event):
* event-Xt.c (emacs_Xt_hash_magic_event):
* event-Xt.c (emacs_Xt_handle_magic_event):
* event-Xt.c (Xt_timeout_to_emacs_event):
* event-Xt.c (Xt_process_to_emacs_event):
* event-Xt.c (signal_special_Xt_user_event):
* event-Xt.c (emacs_Xt_next_event):
* event-Xt.c (emacs_Xt_event_handler):
* event-Xt.c (emacs_Xt_drain_queue):
* event-Xt.c (emacs_Xt_event_pending_p):
* event-Xt.c (check_if_pending_expose_event):
* event-Xt.c (reinit_vars_of_event_Xt):
* event-Xt.c (vars_of_event_Xt):
* event-gtk.c:
* event-gtk.c (IS_MODIFIER_KEY):
* event-gtk.c (emacs_gtk_format_magic_event):
* event-gtk.c (emacs_gtk_compare_magic_event):
* event-gtk.c (emacs_gtk_hash_magic_event):
* event-gtk.c (emacs_gtk_handle_magic_event):
* event-gtk.c (gtk_to_emacs_keysym):
* event-gtk.c (gtk_timeout_to_emacs_event):
* event-gtk.c (gtk_process_to_emacs_event):
* event-gtk.c (dragndrop_data_received):
* event-gtk.c (signal_special_gtk_user_event):
* event-gtk.c (emacs_gtk_next_event):
* event-gtk.c (gtk_event_to_emacs_event):
* event-gtk.c (generic_event_handler):
* event-gtk.c (emacs_shell_event_handler):
* event-gtk.c (emacs_gtk_drain_queue):
* event-gtk.c (emacs_gtk_event_pending_p):
* event-gtk.c (reinit_vars_of_event_gtk):
* event-gtk.c (vars_of_event_gtk):
* event-msw.c:
* event-msw.c (struct winsock_stream):
* event-msw.c (winsock_reader):
* event-msw.c (winsock_writer):
* event-msw.c (mswindows_enqueue_dispatch_event):
* event-msw.c (mswindows_enqueue_misc_user_event):
* event-msw.c (mswindows_enqueue_magic_event):
* event-msw.c (mswindows_enqueue_process_event):
* event-msw.c (mswindows_enqueue_mouse_button_event):
* event-msw.c (mswindows_enqueue_keypress_event):
* event-msw.c (mswindows_dequeue_dispatch_event):
* event-msw.c (emacs_mswindows_drain_queue):
* event-msw.c (mswindows_need_event_in_modal_loop):
* event-msw.c (mswindows_need_event):
* event-msw.c (mswindows_wm_timer_callback):
* event-msw.c (dde_eval_string):
* event-msw.c (Fdde_alloc_advise_item):
* event-msw.c (mswindows_dde_callback):
* event-msw.c (mswindows_wnd_proc):
* event-msw.c (remove_timeout_mapper):
* event-msw.c (emacs_mswindows_remove_timeout):
* event-msw.c (emacs_mswindows_event_pending_p):
* event-msw.c (emacs_mswindows_format_magic_event):
* event-msw.c (emacs_mswindows_compare_magic_event):
* event-msw.c (emacs_mswindows_hash_magic_event):
* event-msw.c (emacs_mswindows_handle_magic_event):
* event-msw.c (emacs_mswindows_select_console):
* event-msw.c (emacs_mswindows_unselect_console):
* event-msw.c (reinit_vars_of_event_mswindows):
* event-msw.c (vars_of_event_mswindows):
* event-stream.c:
* event-stream.c (mark_command_builder):
* event-stream.c (reset_command_builder_event_chain):
* event-stream.c (allocate_command_builder):
* event-stream.c (copy_command_builder):
* event-stream.c (command_builder_append_event):
* event-stream.c (event_stream_event_pending_p):
* event-stream.c (event_stream_force_event_pending):
* event-stream.c (maybe_read_quit_event):
* event-stream.c (event_stream_drain_queue):
* event-stream.c (remove_quit_p_event):
* event-stream.c (event_stream_quit_p):
* event-stream.c (echo_key_event):
* event-stream.c (maybe_kbd_translate):
* event-stream.c (execute_help_form):
* event-stream.c (event_stream_generate_wakeup):
* event-stream.c (enqueue_dispatch_event):
* event-stream.c (enqueue_magic_eval_event):
* event-stream.c (Fenqueue_eval_event):
* event-stream.c (enqueue_misc_user_event):
* event-stream.c (enqueue_misc_user_event_pos):
* event-stream.c (next_event_internal):
* event-stream.c (Fnext_event):
* event-stream.c (Faccept_process_output):
* event-stream.c (execute_internal_event):
* event-stream.c (munge_keymap_translate):
* event-stream.c (command_builder_find_leaf_no_mule_processing):
* event-stream.c (command_builder_find_leaf):
* event-stream.c (lookup_command_event):
* event-stream.c (is_scrollbar_event):
* event-stream.c (execute_command_event):
* event-stream.c (Fdispatch_event):
* event-stream.c (Fread_key_sequence):
* event-stream.c (dribble_out_event):
* event-stream.c (vars_of_event_stream):
* event-tty.c (tty_timeout_to_emacs_event):
* event-tty.c (emacs_tty_next_event):
* event-tty.c (emacs_tty_drain_queue):
* event-tty.c (reinit_vars_of_event_tty):
* event-unixoid.c:
* event-unixoid.c (find_tty_or_stream_console_from_fd):
* event-unixoid.c (read_event_from_tty_or_stream_desc):
* event-unixoid.c (drain_tty_devices):
* event-unixoid.c (poll_fds_for_input):
* events.c:
* events.c (deinitialize_event):
* events.c (zero_event):
* events.c (mark_event):
* events.c (print_event_1):
* events.c (print_event):
* events.c (event_equal):
* events.c (event_hash):
* events.c (Fmake_event):
* events.c (Fdeallocate_event):
* events.c (Fcopy_event):
* events.c (map_event_chain_remove):
* events.c (character_to_event):
* events.c (event_to_character):
* events.c (Fevent_to_character):
* events.c (format_event_object):
* events.c (upshift_event):
* events.c (downshift_event):
* events.c (event_upshifted_p):
* events.c (Fevent_live_p):
* events.c (Fevent_type):
* events.c (Fevent_timestamp):
* events.c (CHECK_EVENT_TYPE):
* events.c (CHECK_EVENT_TYPE2):
* events.c (CHECK_EVENT_TYPE3):
* events.c (Fevent_key):
* events.c (Fevent_button):
* events.c (Fevent_modifier_bits):
* events.c (event_x_y_pixel_internal):
* events.c (event_pixel_translation):
* events.c (Fevent_process):
* events.c (Fevent_function):
* events.c (Fevent_object):
* events.c (Fevent_properties):
* events.c (syms_of_events):
* events.c (vars_of_events):
* events.h:
* events.h (struct event_stream):
* events.h (struct Lisp_Key_Data):
* events.h (KEY_DATA_KEYSYM):
* events.h (EVENT_KEY_KEYSYM):
* events.h (struct Lisp_Button_Data):
* events.h (EVENT_BUTTON_BUTTON):
* events.h (struct Lisp_Motion_Data):
* events.h (EVENT_MOTION_X):
* events.h (struct Lisp_Process_Data):
* events.h (EVENT_PROCESS_PROCESS):
* events.h (struct Lisp_Timeout_Data):
* events.h (EVENT_TIMEOUT_INTERVAL_ID):
* events.h (struct Lisp_Eval_Data):
* events.h (EVENT_EVAL_FUNCTION):
* events.h (struct Lisp_Misc_User_Data):
* events.h (EVENT_MISC_USER_FUNCTION):
* events.h (struct Lisp_Magic_Eval_Data):
* events.h (EVENT_MAGIC_EVAL_INTERNAL_FUNCTION):
* events.h (struct Lisp_Magic_Data):
* events.h (EVENT_MAGIC_UNDERLYING):
* events.h (EVENT_MAGIC_GDK_EVENT):
* events.h (struct Lisp_Event):
* events.h (XEVENT_CHANNEL):
* events.h (SET_EVENT_TIMESTAMP_ZERO):
* events.h (SET_EVENT_CHANNEL):
* events.h (SET_EVENT_NEXT):
* events.h (XSET_EVENT_TYPE):
* events.h (struct command_builder):
* extents.c:
* extents.c (gap_array_adjust_markers):
* extents.c (gap_array_recompute_derived_values):
* extents.c (gap_array_move_gap):
* extents.c (gap_array_make_gap):
* extents.c (gap_array_insert_els):
* extents.c (gap_array_delete_els):
* extents.c (gap_array_make_marker):
* extents.c (gap_array_delete_marker):
* extents.c (gap_array_move_marker):
* extents.c (make_gap_array):
* extents.c (free_gap_array):
* extents.c (extent_list_num_els):
* extents.c (extent_list_insert):
* extents.c (mark_extent_auxiliary):
* extents.c (allocate_extent_auxiliary):
* extents.c (decode_extent_at_flag):
* extents.c (verify_extent_mapper):
* extents.c (symbol_to_glyph_layout):
* extents.c (syms_of_extents):
* faces.c:
* file-coding.c:
* file-coding.c (struct_detector_category_description =):
* file-coding.c (detector_category_dynarr_description_1):
* file-coding.c (struct_detector_description =):
* file-coding.c (detector_dynarr_description_1):
* file-coding.c (MARKED_SLOT):
* file-coding.c (mark_coding_system):
* file-coding.c (coding_system_extra_description_map):
* file-coding.c (coding_system_description):
* file-coding.c (allocate_coding_system):
* file-coding.c (symbol_to_eol_type):
* file-coding.c (Fcoding_system_aliasee):
* file-coding.c (set_coding_stream_coding_system):
* file-coding.c (struct convert_eol_coding_system):
* file-coding.c (struct undecided_coding_system):
* file-coding.c (undecided_mark_coding_stream):
* file-coding.c (coding_category_symbol_to_id):
* file-coding.c (struct gzip_coding_system):
* file-coding.c (coding_system_type_create):
* file-coding.h:
* file-coding.h (struct Lisp_Coding_System):
* file-coding.h (CODING_SYSTEM_SLOT_DECLARATION):
* file-coding.h (coding_system_variant):
* file-coding.h (struct coding_system_methods):
* file-coding.h (DEFINE_CODING_SYSTEM_TYPE_WITH_DATA):
* file-coding.h (INITIALIZE_CODING_SYSTEM_TYPE_WITH_DATA):
* file-coding.h (struct coding_stream):
* fileio.c (Fsubstitute_in_file_name):
* floatfns.c:
* fns.c:
* fns.c (base64_encode_1):
* frame-gtk.c:
* frame-gtk.c (Fgtk_start_drag_internal):
* frame-impl.h (struct frame):
* frame-impl.h (MARKED_SLOT):
* frame-msw.c:
* frame-x.c:
* frame-x.c (Fcde_start_drag_internal):
* frame-x.c (Foffix_start_drag_internal):
* frame.c:
* frame.c (MARKED_SLOT):
* frame.c (allocate_frame_core):
* frame.c (delete_frame_internal):
* frame.c (Fmouse_position_as_motion_event):
* frameslots.h:
* frameslots.h (MARKED_SLOT_ARRAY):
* free-hook.c:
* glyphs-msw.c (mswindows_widget_instantiate):
* glyphs-x.c:
* glyphs-x.c (convert_EImage_to_XImage):
* glyphs.c:
* glyphs.c (process_image_string_instantiator):
* glyphs.c (mark_image_instance):
* glyphs.c (allocate_image_instance):
* glyphs.c (unmap_subwindow):
* glyphs.c (map_subwindow):
* glyphs.c (syms_of_glyphs):
* glyphs.c (specifier_type_create_image):
* glyphs.h:
* glyphs.h (struct text_image_instance):
* glyphs.h (struct Lisp_Image_Instance):
* gmalloc.c:
* gmalloc.c ("C"):
* gpmevent.c (Freceive_gpm_event):
* gpmevent.c (gpm_next_event_cb):
* gpmevent.c (vars_of_gpmevent):
* gtk-glue.c (gdk_event_to_emacs_event):
* gtk-xemacs.c (gtk_xemacs_class_init):
* gui-msw.c:
* gui-msw.c (mswindows_handle_gui_wm_command):
* gui-msw.c (mswindows_translate_menu_or_dialog_item):
* gui-x.c:
* gui-x.c (mark_popup_data):
* gui-x.c (snarf_widget_value_mapper):
* gui-x.c (gcpro_popup_callbacks):
* gui-x.c (ungcpro_popup_callbacks):
* gui-x.c (free_popup_widget_value_tree):
* gui-x.c (popup_selection_callback):
* gui-x.h:
* gui-x.h (struct popup_data):
* gui.c:
* gui.c (allocate_gui_item):
* gutter.c (decode_gutter_position):
* hash.c (NULL_ENTRY):
* indent.c (vmotion_1):
* indent.c (vmotion_pixels):
* input-method-motif.c (res):
* input-method-xlib.c (IMInstantiateCallback):
* input-method-xlib.c (XIM_init_device):
* input-method-xlib.c (res):
* intl-encap-win32.c:
* intl-encap-win32.c (qxeSHGetDataFromIDList):
* intl-win32.c:
* intl-win32.c (mswindows_multibyte_cp_type):
* intl-win32.c (struct mswindows_multibyte_coding_system):
* keymap.c:
* keymap.c (make_key_description):
* keymap.c (keymap_store):
* keymap.c (get_keyelt):
* keymap.c (keymap_lookup_1):
* keymap.c (define_key_parser):
* keymap.c (key_desc_list_to_event):
* keymap.c (event_matches_key_specifier_p):
* keymap.c (meta_prefix_char_p):
* keymap.c (ensure_meta_prefix_char_keymapp):
* keymap.c (Fdefine_key):
* keymap.c (struct raw_lookup_key_mapper_closure):
* keymap.c (raw_lookup_key):
* keymap.c (raw_lookup_key_mapper):
* keymap.c (lookup_keys):
* keymap.c (lookup_events):
* keymap.c (Flookup_key):
* keymap.c (struct map_keymap_unsorted_closure):
* keymap.c (map_keymap_unsorted_mapper):
* keymap.c (map_keymap_sorted):
* keymap.c (map_keymap_mapper):
* keymap.c (map_keymap):
* keymap.c (accessible_keymaps_mapper_1):
* keymap.c (Faccessible_keymaps):
* keymap.c (Fsingle_key_description):
* keymap.c (raw_keys_to_keys):
* keymap.c (format_raw_keys):
* keymap.c (where_is_recursive_mapper):
* keymap.c (where_is_internal):
* keymap.c (describe_map_mapper_shadow_search):
* keymap.c (keymap_lookup_inherited_mapper):
* keymap.c (describe_map_mapper):
* keymap.h (event_matches_key_specifier_p):
* lisp.h:
* lisp.h (this):
* lisp.h (RETURN_NOT_REACHED):
* lisp.h (struct Lisp_Vector):
* lisp.h (struct Lisp_Bit_Vector):
* lisp.h (UNGCPRO_1):
* lisp.h (NUNGCPRO):
* lisp.h (NNUNGCPRO):
* lisp.h (DECLARE_INLINE_HEADER):
* lrecord.h:
* lrecord.h (struct lrecord_header):
* lrecord.h (struct lcrecord_header):
* lrecord.h (lrecord_type):
* lrecord.h (struct lrecord_implementation):
* lrecord.h (RECORD_DUMPABLE):
* lrecord.h (memory_description_type):
* lrecord.h (data_description_entry_flags):
* lrecord.h (struct memory_description):
* lrecord.h (struct sized_memory_description):
* lrecord.h (XD_INDIRECT):
* lrecord.h (XD_IS_INDIRECT):
* lrecord.h (XD_DYNARR_DESC):
* lrecord.h (DEFINE_BASIC_LRECORD_IMPLEMENTATION):
* lrecord.h (MAKE_LRECORD_IMPLEMENTATION):
* lrecord.h (MAKE_EXTERNAL_LRECORD_IMPLEMENTATION):
* lrecord.h (alloc_lcrecord_type):
* lstream.c:
* lstream.c (Lstream_new):
* lstream.c (lisp_buffer_marker):
* lstream.h:
* lstream.h (lstream_implementation):
* lstream.h (DEFINE_LSTREAM_IMPLEMENTATION):
* lstream.h (DEFINE_LSTREAM_IMPLEMENTATION_WITH_DATA):
* marker.c:
* marker.c (copy_marker_1):
* mem-limits.h:
* menubar-gtk.c:
* menubar-gtk.c (gtk_popup_menu):
* menubar-msw.c:
* menubar-msw.c (mswindows_popup_menu):
* menubar-x.c (make_dummy_xbutton_event):
* menubar-x.c (command_builder_operate_menu_accelerator):
* menubar-x.c (menu_accelerator_safe_compare):
* menubar-x.c (menu_accelerator_safe_mod_compare):
* mule-charset.c:
* mule-charset.c (make_charset):
* mule-charset.c (Fcharset_property):
* mule-coding.c:
* mule-coding.c (ccs_description_1):
* mule-coding.c (ccs_description =):
* mule-coding.c (ccsd_description_1):
* mule-coding.c (ccsd_description =):
* nt.c (getpwnam):
* nt.c (init_mswindows_environment):
* nt.c (get_cached_volume_information):
* nt.c (mswindows_is_executable):
* nt.c (read_unc_volume):
* nt.c (mswindows_access):
* nt.c (mswindows_link):
* nt.c (mswindows_fstat):
* nt.c (mswindows_stat):
* nt.c (mswindows_executable_type):
* nt.c (Fmswindows_short_file_name):
* nt.c (Fmswindows_long_file_name):
* objects-impl.h (struct Lisp_Color_Instance):
* objects-impl.h (struct Lisp_Font_Instance):
* objects-tty.c:
* objects-x.c (allocate_nearest_color):
* objects.c:
* objects.c (Fmake_color_instance):
* objects.c (Fmake_font_instance):
* objects.c (font_instantiate):
* opaque.c:
* opaque.c (make_opaque):
* opaque.c (make_opaque_ptr):
* opaque.c (reinit_opaque_early):
* opaque.c (init_opaque_once_early):
* print.c:
* print.c (printing_badness):
* print.c (printing_major_badness):
* print.c (print_internal):
* print.c (debug_p4):
* print.c (dp):
* print.c (debug_backtrace):
* process-nt.c (nt_create_process):
* process-nt.c (get_internet_address):
* process-unix.c:
* process-unix.c (struct unix_process_data):
* process-unix.c (get_internet_address):
* process-unix.c (unix_alloc_process_data):
* process-unix.c (unix_create_process):
* process-unix.c (try_to_initialize_subtty):
* process-unix.c (unix_kill_child_process):
* process-unix.c (process_type_create_unix):
* process.c:
* process.c (mark_process):
* process.c (MARKED_SLOT):
* process.c (make_process_internal):
* process.c (Fprocess_tty_name):
* process.c (decode_signal):
* process.h:
* procimpl.h:
* procimpl.h (struct process_methods):
* procimpl.h (struct Lisp_Process):
* rangetab.c:
* realpath.c (readlink_and_correct_case):
* redisplay-x.c (x_window_output_end):
* redisplay-x.c (x_redraw_exposed_area):
* redisplay-x.c (x_clear_frame):
* redisplay.c:
* redisplay.h:
* redisplay.h (struct rune_dglyph):
* redisplay.h (struct rune):
* scrollbar.c:
* scrollbar.c (create_scrollbar_instance):
* specifier.c:
* specifier.c (specifier_empty_extra_description_1):
* specifier.c (make_specifier_internal):
* specifier.c (decode_locale_type):
* specifier.c (decode_how_to_add_specification):
* specifier.h:
* specifier.h (struct specifier_methods):
* specifier.h (DEFINE_SPECIFIER_TYPE_WITH_DATA):
* specifier.h (INITIALIZE_SPECIFIER_TYPE_WITH_DATA):
* symbols.c:
* symbols.c (Fsetplist):
* symbols.c (default_value):
* symbols.c (decode_magic_handler_type):
* symbols.c (handler_type_from_function_symbol):
* symbols.c (Fdefvaralias):
* symbols.c (init_symbols_once_early):
* symbols.c (reinit_symbols_early):
* symsinit.h:
* sysdep.c (sys_subshell):
* sysdep.c (tty_init_sys_modes_on_device):
* syswindows.h:
* text.c (dfc_convert_to_external_format):
* text.c (dfc_convert_to_internal_format):
* text.c (reinit_eistring_early):
* text.c (init_eistring_once_early):
* text.c (reinit_vars_of_text):
* text.h:
* text.h (INC_IBYTEPTR_FMT):
* text.h (DEC_IBYTEPTR_FMT):
* toolbar.c:
* toolbar.c (decode_toolbar_position):
* tooltalk.c:
* ui-gtk.c:
* unexnt.c:
* unexnt.c (_start):
* unexnt.c (unexec):
* unexnt.c (get_section_info):
* unicode.c:
* unicode.c (vars_of_unicode):
* window.c:
* window.c (allocate_window):
* window.c (new_window_mirror):
* window.c (update_mirror_internal):
* winslots.h:
author | michaels |
---|---|
date | Sun, 12 Jan 2003 11:08:22 +0000 |
parents | c15f25529e61 |
children | b531bf8658e9 |
rev | line source |
---|---|
428 | 1 /* Redisplay data structures. |
2 Copyright (C) 1994, 1995 Board of Trustees, University of Illinois. | |
3 Copyright (C) 1996 Chuck Thompson. | |
826 | 4 Copyright (C) 1995, 1996, 2002 Ben Wing. |
428 | 5 |
6 This file is part of XEmacs. | |
7 | |
8 XEmacs is free software; you can redistribute it and/or modify it | |
9 under the terms of the GNU General Public License as published by the | |
10 Free Software Foundation; either version 2, or (at your option) any | |
11 later version. | |
12 | |
13 XEmacs is distributed in the hope that it will be useful, but WITHOUT | |
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
16 for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
19 along with XEmacs; see the file COPYING. If not, write to | |
20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
21 Boston, MA 02111-1307, USA. */ | |
22 | |
23 /* Synched up with: Not in FSF. */ | |
24 | |
440 | 25 #ifndef INCLUDED_redisplay_h_ |
26 #define INCLUDED_redisplay_h_ | |
428 | 27 |
28 /* Redisplay DASSERT types */ | |
29 #define DB_DISP_POS 1 | |
30 #define DB_DISP_TEXT_LAYOUT 2 | |
31 #define DB_DISP_REDISPLAY 4 | |
32 | |
33 /* These are the possible return values from pixel_to_glyph_translation. */ | |
34 #define OVER_MODELINE 0 | |
35 #define OVER_TEXT 1 | |
36 #define OVER_OUTSIDE 2 | |
37 #define OVER_NOTHING 3 | |
38 #define OVER_BORDER 4 | |
39 #define OVER_TOOLBAR 5 | |
40 #define OVER_V_DIVIDER 6 | |
41 | |
42 #define NO_BLOCK -1 | |
43 | |
44 /* Imagine that the text in the buffer is displayed on a piece of paper | |
45 the width of the frame and very very tall. The line start cache is | |
46 an array of struct line_start_cache's, describing the start and | |
47 end buffer positions for a contiguous set of lines on that piece | |
48 of paper. */ | |
49 | |
50 typedef struct line_start_cache line_start_cache; | |
51 struct line_start_cache | |
52 { | |
665 | 53 Charbpos start, end; |
428 | 54 int height; |
55 }; | |
56 | |
57 typedef struct | |
58 { | |
59 Dynarr_declare (line_start_cache); | |
60 } line_start_cache_dynarr; | |
61 | |
62 /* The possible types of runes. | |
63 | |
64 #### The Lisp_Glyph type is broken. There should instead be a pixmap | |
65 type. Currently the device-specific output routines have to worry | |
66 about whether the glyph is textual or not, etc. For Mule this is | |
67 a big problem because you might need multiple fonts to display the | |
68 text. It also eliminates optimizations that could come from glumping | |
69 the text of multiple text glyphs together -- this makes displaying | |
70 binary files (with lots of control chars, etc.) very very slow. */ | |
71 | |
72 #define RUNE_BLANK 0 | |
73 #define RUNE_CHAR 1 | |
74 #define RUNE_DGLYPH 2 | |
75 #define RUNE_HLINE 3 | |
76 #define RUNE_VLINE 4 | |
77 | |
78 #define CURSOR_ON 0 | |
79 #define CURSOR_OFF 1 | |
80 #define NO_CURSOR 2 | |
81 #define NEXT_CURSOR 3 | |
82 #define IGNORE_CURSOR 4 | |
83 | |
84 #define DEFAULT_INDEX (face_index) 0 | |
85 #define MODELINE_INDEX (face_index) 1 | |
86 | |
87 /* A rune is a single display element, such as a printable character | |
88 or pixmap. Any single character in a buffer has one or more runes | |
89 (or zero, if the character is invisible) corresponding to it. | |
90 (Printable characters typically have one rune associated with them, | |
91 but control characters have two -- a ^ and a letter -- and other | |
92 non-printing characters (those displayed in octal) have four. */ | |
93 | |
94 /* WARNING! In compare_runes (one of the most heavily used functions) | |
95 two runes are compared. So please be careful with changes to this | |
96 structure. See comments in compare_runes. | |
97 | |
98 #### This should really be made smaller. | |
99 */ | |
432 | 100 |
1204 | 101 struct rune_dglyph |
102 { | |
103 Lisp_Object glyph; | |
104 Lisp_Object extent; /* extent rune is attached to, if any. | |
105 If this is a rune in the modeline | |
106 then this might be nil. */ | |
107 | |
108 int ascent; /* Ascent of this glyph, in pixels. */ | |
109 int descent; /* Descent of this glyph, in pixels. */ | |
110 int yoffset; /* Offset from line top to reach glyph top */ | |
111 int xoffset; /* Number of pixels that need to be | |
112 chopped off the left of the glyph. | |
113 This has the effect of shifting the | |
114 glyph to the left while still clipping | |
115 at XPOS. */ | |
116 }; | |
117 | |
428 | 118 typedef struct rune rune; |
119 struct rune | |
120 { | |
121 face_index findex; /* face rune is displayed with. The | |
122 face_index is an index into a | |
123 window-specific array of face cache | |
124 elements. Each face cache element | |
125 corresponds to one "merged face" | |
126 (the result of merging all the | |
127 faces that overlap the rune) and | |
128 contains the instance values for | |
129 each of the face properties in this | |
130 particular window. */ | |
131 | |
826 | 132 Charxpos charpos; /* buffer position this rune is displaying; |
428 | 133 for the modeline, the value here is a |
134 Charcount, but who's looking? */ | |
826 | 135 Charxpos endpos; /* if set this rune covers a range of pos; |
136 used in redisplay_move_cursor(). */ | |
428 | 137 /* #### Chuck, what does it mean for a rune |
138 to cover a range of pos? I don't get | |
139 this. */ | |
432 | 140 |
141 | |
428 | 142 short xpos; /* horizontal starting position in pixels */ |
143 short width; /* pixel width of rune */ | |
432 | 144 |
145 | |
428 | 146 unsigned char cursor_type; /* is this rune covered by the cursor? */ |
147 unsigned char type; /* type of rune object */ | |
148 /* We used to do bitfields here, but if I | |
149 (JV) count correctly that doesn't matter | |
150 for the size of the structure. All the bit | |
151 fiddling _does_ slow down redisplay by | |
152 about 10%. So don't do that */ | |
153 | |
154 union /* Information specific to the type of rune */ | |
155 { | |
450 | 156 /* #### Glyphs are rare. Is it really necessary to waste 8 bytes on every |
428 | 157 rune for that?! */ |
158 /* DGLYPH */ | |
1204 | 159 struct rune_dglyph dglyph; |
428 | 160 |
161 /* CHAR */ | |
162 struct | |
163 { | |
867 | 164 Ichar ch; /* Character of this rune. */ |
428 | 165 } chr; |
166 | |
167 /* HLINE */ | |
168 struct | |
169 { | |
170 short thickness; /* how thick to make hline */ | |
171 short yoffset; /* how far down from top of line to put top */ | |
172 } hline; | |
173 } object; /* actual rune object */ | |
174 }; | |
175 | |
176 typedef struct | |
177 { | |
178 Dynarr_declare (rune); | |
179 } rune_dynarr; | |
180 | |
181 /* These must have distinct values. Note that the ordering actually | |
182 represents priority levels. TEXT has the lowest priority level. */ | |
183 enum display_type | |
184 { | |
185 TEXT, | |
186 LEFT_OUTSIDE_MARGIN, | |
187 LEFT_INSIDE_MARGIN, | |
188 RIGHT_INSIDE_MARGIN, | |
189 RIGHT_OUTSIDE_MARGIN, | |
190 OVERWRITE | |
191 }; | |
192 | |
193 /* A display block represents a run of text on a single line. | |
194 Apparently there is only one display block per line for each | |
195 of the types listed in `enum display_type'. | |
196 | |
197 A display block consists mostly of an array of runes, one per | |
198 atomic display element (printable character, pixmap, etc.). */ | |
199 | |
200 /* #### Yuckity yuckity yuck yuck yuck yuck yuck!! | |
201 | |
202 Chuck, I think you should redo this. It should not be the | |
203 responsibility of the device-specific code to worry about | |
204 the different faces. The generic stuff in redisplay-output.c | |
205 should glump things up into sub-blocks, each of which | |
206 corresponds to a single pixmap or a single run of text in | |
207 the same font. | |
208 | |
209 It might still make sense for the device-specific output routine | |
210 to get passed an entire display line. That way, it can make | |
211 calls to XDrawText() (which draws multiple runs of single-font | |
212 data) instead of XDrawString(). The reason for this is to | |
213 reduce the amount of X traffic, which will help things significantly | |
214 on a slow line. */ | |
215 | |
216 typedef struct display_block display_block; | |
217 struct display_block | |
218 { | |
219 enum display_type type; /* type of display block */ | |
220 | |
221 int start_pos; /* starting pixel position of block */ | |
222 int end_pos; /* ending pixel position of block */ | |
223 | |
224 rune_dynarr *runes; /* Dynamic array of runes */ | |
225 }; | |
226 | |
227 typedef struct | |
228 { | |
229 Dynarr_declare (display_block); | |
230 } display_block_dynarr; | |
231 | |
232 typedef struct layout_bounds_type | |
233 { | |
234 int left_out; | |
235 int left_in; | |
236 int left_white; | |
237 int right_white; | |
238 int right_in; | |
239 int right_out; | |
240 } layout_bounds; | |
241 | |
242 typedef struct glyph_block glyph_block; | |
243 struct glyph_block | |
244 { | |
245 Lisp_Object glyph; | |
246 Lisp_Object extent; | |
247 /* The rest are only used by margin routines. */ | |
248 face_index findex; | |
249 int active; | |
250 int width; | |
251 }; | |
252 | |
253 typedef struct | |
254 { | |
255 Dynarr_declare (glyph_block); | |
256 } glyph_block_dynarr; | |
257 | |
258 /*************************************************************************/ | |
617 | 259 /* display lines */ |
428 | 260 /*************************************************************************/ |
261 | |
826 | 262 /* Modeline commentary: IMO the modeline is handled very badly, we |
428 | 263 special case virtually *everything* in the redisplay routines for |
826 | 264 the modeline. The fact that dl->charpos can be either a buffer |
428 | 265 position or a char count highlights this. There is no abstraction at |
266 all that I can find and it means that the code is made very ugly as | |
267 a result. Either we should treat the modeline *entirely* separately, | |
268 or we should abstract to something that applies equally well to the | |
269 modeline and to buffer text, the things are not enormously different | |
270 after all and handling them identically at some level would | |
271 eliminate some bugs that still exist (mainly to do with modeline | |
272 handling). This problem doesn't help trying to implement gutters | |
273 which are somewhere in between buffer text and modeline text. | |
274 | |
275 Redisplay commentary: Everything in redisplay is tied very tightly | |
276 to the things that are being displayed, and the context, | |
277 e.g. buffers and windows. According to Chuck this is so that we can | |
278 get speed, which seems fine to me, however this usage is extended | |
442 | 279 too far down the redisplay routines IMO. At some level there should |
428 | 280 be functions that know how to display strings with extents and |
281 faces, regardless of buffer etc. After all the window system does | |
282 not care. <andy@xemacs.org> */ | |
283 | |
284 typedef struct display_line display_line; | |
285 struct display_line | |
286 { | |
287 short ypos; /* vertical position in pixels | |
288 of the baseline for this line. */ | |
289 unsigned short ascent, descent; /* maximum values for this line. | |
290 The ascent is the number of | |
291 pixels above the baseline, and | |
292 the descent is the number of | |
293 pixels below the baseline. | |
294 The descent includes the baseline | |
295 pixel-row itself, I think. */ | |
296 unsigned short clip; /* amount of bottom of line to clip | |
297 in pixels.*/ | |
298 unsigned short top_clip; /* amount of top of line to clip | |
299 in pixels.*/ | |
826 | 300 Charxpos charpos; /* first buffer position on line */ |
301 Charxpos end_charpos; /* last buffer position on line */ | |
302 Charcount offset; /* adjustment to charpos vals */ | |
428 | 303 Charcount num_chars; /* # of chars on line |
304 including expansion of tabs | |
305 and control chars */ | |
306 int cursor_elt; /* rune block of TEXT display | |
307 block cursor is at or -1 */ | |
308 char used_prop_data; /* can't incrementally update if line | |
309 used propagation data */ | |
310 | |
311 layout_bounds bounds; /* line boundary positions */ | |
312 | |
313 char modeline; /* t if this line is a modeline */ | |
314 | |
442 | 315 char line_continuation; /* t if this line continues to |
316 next display line. */ | |
317 | |
428 | 318 /* Dynamic array of display blocks */ |
319 display_block_dynarr *display_blocks; | |
320 | |
321 /* Dynamic arrays of left and right glyph blocks */ | |
322 glyph_block_dynarr *left_glyphs; | |
323 glyph_block_dynarr *right_glyphs; | |
324 | |
325 face_index left_margin_findex; | |
326 face_index right_margin_findex; | |
327 face_index default_findex; | |
328 }; | |
329 | |
330 #define DISPLAY_LINE_HEIGHT(dl) \ | |
331 (dl->ascent + dl->descent - (dl->clip + dl->top_clip)) | |
332 #define DISPLAY_LINE_YPOS(dl) \ | |
333 (dl->ypos - (dl->ascent - dl->top_clip)) | |
334 #define DISPLAY_LINE_YEND(dl) \ | |
335 ((dl->ypos + dl->descent) - dl->clip) | |
336 | |
337 typedef struct | |
338 { | |
339 Dynarr_declare (display_line); | |
340 } display_line_dynarr; | |
341 | |
342 /* The following two structures are used to represent an area to | |
343 displayed and where to display it. Using these two structures all | |
344 combinations of clipping and position can be accommodated. */ | |
345 | |
346 /* This represents an area to be displayed into. */ | |
347 typedef struct display_box display_box; | |
348 struct display_box | |
349 { | |
350 int xpos; /* absolute horizontal position of area */ | |
351 int ypos; /* absolute vertical position of area */ | |
352 int width, height; | |
353 }; | |
354 | |
355 /* This represents the area from a glyph to be displayed. */ | |
356 typedef struct display_glyph_area display_glyph_area; | |
357 struct display_glyph_area | |
358 { | |
359 int xoffset; /* horizontal offset of the glyph, +ve means | |
360 display the glyph with x offset by xoffset, | |
361 -ve means display starting xoffset into the | |
362 glyph. */ | |
363 int yoffset; /* vertical offset of the glyph, +ve means | |
364 display the glyph with y offset by yoffset, | |
365 -ve means display starting xoffset into the | |
366 glyph. */ | |
367 int width, height; /* width and height of glyph to display. */ | |
368 }; | |
369 | |
370 /* It could be argued that the following two structs belong in | |
371 extents.h, but they're only used by redisplay and it simplifies | |
372 the header files to put them here. */ | |
373 | |
374 typedef struct | |
375 { | |
376 Dynarr_declare (EXTENT); | |
377 } EXTENT_dynarr; | |
378 | |
379 struct font_metric_info | |
380 { | |
381 int width; | |
382 int height; /* always ascent + descent; for convenience */ | |
383 int ascent; | |
384 int descent; | |
385 | |
386 int proportional_p; | |
387 }; | |
388 | |
389 /* NOTE NOTE NOTE: Currently the positions in an extent fragment | |
826 | 390 structure are Bytexpos's, not Charxpos's. This could change. */ |
428 | 391 |
392 struct extent_fragment | |
393 { | |
394 Lisp_Object object; /* buffer or string */ | |
395 struct frame *frm; | |
826 | 396 Bytexpos pos, end; |
428 | 397 EXTENT_dynarr *extents; |
398 glyph_block_dynarr *begin_glyphs, *end_glyphs; | |
399 unsigned int invisible:1; | |
400 unsigned int invisible_ellipses:1; | |
401 unsigned int previously_invisible:1; | |
402 unsigned int invisible_ellipses_already_displayed:1; | |
403 }; | |
404 | |
405 #define EDGE_TOP 1 | |
406 #define EDGE_LEFT 2 | |
407 #define EDGE_BOTTOM 4 | |
408 #define EDGE_RIGHT 8 | |
409 #define EDGE_ALL (EDGE_TOP | EDGE_LEFT | EDGE_BOTTOM | EDGE_RIGHT) | |
410 | |
411 | |
412 /*************************************************************************/ | |
413 /* change flags */ | |
414 /*************************************************************************/ | |
415 | |
416 /* Quick flags to signal redisplay. redisplay() sets them all to 0 | |
417 when it finishes. If none of them are set when it starts, it | |
418 assumes that nothing needs to be done. Functions that make a change | |
419 that is (potentially) visible on the screen should set the | |
420 appropriate flag. | |
421 | |
422 If any of these flags are set, redisplay will look more carefully | |
423 to see if anything has really changed. */ | |
424 | |
442 | 425 /* Nonzero if the contents of a buffer have changed since the last time |
426 redisplay completed. */ | |
428 | 427 extern int buffers_changed; |
428 extern int buffers_changed_set; | |
429 | |
430 /* Nonzero if head_clip or tail_clip of a buffer has changed | |
442 | 431 since last redisplay that finished. */ |
428 | 432 extern int clip_changed; |
433 extern int clip_changed_set; | |
434 | |
442 | 435 /* Nonzero if any extent has changed since the last time redisplay completed. */ |
428 | 436 extern int extents_changed; |
437 extern int extents_changed_set; | |
438 | |
442 | 439 /* Nonzero if any face has changed since the last time redisplay completed. */ |
428 | 440 extern int faces_changed; |
441 | |
442 | 442 /* Nonzero means one or more frames have been marked as garbaged. */ |
428 | 443 extern int frame_changed; |
444 | |
445 /* True if any of the builtin display glyphs (continuation, | |
446 hscroll, control-arrow, etc) is in need of updating | |
447 somewhere. */ | |
448 extern int glyphs_changed; | |
449 extern int glyphs_changed_set; | |
450 | |
451 /* True if any displayed subwindow is in need of updating | |
452 somewhere. */ | |
453 extern int subwindows_changed; | |
454 extern int subwindows_changed_set; | |
455 | |
456 /* True if any displayed subwindow is in need of updating | |
457 somewhere. */ | |
458 extern int subwindows_state_changed; | |
459 extern int subwindows_state_changed_set; | |
460 | |
461 /* True if an icon is in need of updating somewhere. */ | |
462 extern int icon_changed; | |
463 extern int icon_changed_set; | |
464 | |
465 /* True if a menubar is in need of updating somewhere. */ | |
466 extern int menubar_changed; | |
467 extern int menubar_changed_set; | |
468 | |
442 | 469 /* True iff we should redraw the modelines on the next redisplay. */ |
428 | 470 extern int modeline_changed; |
471 extern int modeline_changed_set; | |
472 | |
442 | 473 /* Nonzero if point has changed in some buffer since the last time |
474 redisplay completed. */ | |
428 | 475 extern int point_changed; |
476 extern int point_changed_set; | |
477 | |
442 | 478 /* Nonzero if some frame has changed its size. */ |
428 | 479 extern int size_changed; |
480 | |
442 | 481 /* Nonzero if some device has signaled that it wants to change size. */ |
428 | 482 extern int asynch_device_change_pending; |
483 | |
905 | 484 /* Nonzero if some frame has changed the layout of internal elements |
485 (gutters or toolbars). */ | |
486 extern int frame_layout_changed; | |
487 | |
442 | 488 /* Nonzero if any toolbar has changed. */ |
428 | 489 extern int toolbar_changed; |
490 extern int toolbar_changed_set; | |
491 | |
442 | 492 /* Nonzero if any gutter has changed. */ |
428 | 493 extern int gutter_changed; |
494 extern int gutter_changed_set; | |
495 | |
442 | 496 /* Nonzero if any window has changed since the last time redisplay completed */ |
428 | 497 extern int windows_changed; |
498 | |
442 | 499 /* Nonzero if any frame's window structure has changed since the last |
500 time redisplay completed. */ | |
428 | 501 extern int windows_structure_changed; |
502 | |
503 /* These macros can be relatively expensive. Since they are often | |
504 called numerous times between each call to redisplay, we keep track | |
505 if each has already been called and don't bother doing most of the | |
506 work if it is currently set. */ | |
507 | |
508 #define MARK_TYPE_CHANGED(object) do { \ | |
509 if (!object##_changed_set) { \ | |
510 Lisp_Object MTC_devcons, MTC_concons; \ | |
511 DEVICE_LOOP_NO_BREAK (MTC_devcons, MTC_concons) \ | |
512 { \ | |
513 Lisp_Object MTC_frmcons; \ | |
514 struct device *MTC_d = XDEVICE (XCAR (MTC_devcons)); \ | |
515 DEVICE_FRAME_LOOP (MTC_frmcons, MTC_d) \ | |
516 { \ | |
517 struct frame *MTC_f = XFRAME (XCAR (MTC_frmcons)); \ | |
518 MTC_f->object##_changed = 1; \ | |
519 MTC_f->modiff++; \ | |
520 } \ | |
521 MTC_d->object##_changed = 1; \ | |
522 } \ | |
523 object##_changed = 1; \ | |
524 object##_changed_set = 1; } \ | |
525 } while (0) | |
526 | |
872 | 527 void mark_buffers_changed (void); |
528 #define MARK_BUFFERS_CHANGED mark_buffers_changed () | |
529 void mark_clip_changed (void); | |
530 #define MARK_CLIP_CHANGED mark_clip_changed () | |
531 void mark_extents_changed (void); | |
532 #define MARK_EXTENTS_CHANGED mark_extents_changed () | |
533 void mark_icon_changed (void); | |
534 #define MARK_ICON_CHANGED mark_icon_changed () | |
535 void mark_menubar_changed (void); | |
536 #define MARK_MENUBAR_CHANGED mark_menubar_changed () | |
537 void mark_modeline_changed (void); | |
538 #define MARK_MODELINE_CHANGED mark_modeline_changed () | |
539 void mark_point_changed (void); | |
540 #define MARK_POINT_CHANGED mark_point_changed () | |
541 void mark_toolbar_changed (void); | |
542 #define MARK_TOOLBAR_CHANGED mark_toolbar_changed () | |
543 void mark_gutter_changed (void); | |
544 #define MARK_GUTTER_CHANGED mark_gutter_changed () | |
545 void mark_glyphs_changed (void); | |
546 #define MARK_GLYPHS_CHANGED mark_glyphs_changed () | |
547 void mark_subwindows_changed (void); | |
548 #define MARK_SUBWINDOWS_CHANGED mark_subwindows_changed () | |
549 void mark_subwindows_state_changed (void); | |
550 #define MARK_SUBWINDOWS_STATE_CHANGED mark_subwindows_state_changed () | |
428 | 551 |
552 #define CLASS_RESET_CHANGED_FLAGS(p) do { \ | |
553 (p)->buffers_changed = 0; \ | |
554 (p)->clip_changed = 0; \ | |
555 (p)->extents_changed = 0; \ | |
556 (p)->faces_changed = 0; \ | |
557 (p)->frame_changed = 0; \ | |
905 | 558 (p)->frame_layout_changed = 0; \ |
428 | 559 (p)->icon_changed = 0; \ |
560 (p)->menubar_changed = 0; \ | |
561 (p)->modeline_changed = 0; \ | |
562 (p)->point_changed = 0; \ | |
563 (p)->toolbar_changed = 0; \ | |
564 (p)->gutter_changed = 0; \ | |
565 (p)->glyphs_changed = 0; \ | |
566 (p)->subwindows_changed = 0; \ | |
567 (p)->subwindows_state_changed = 0; \ | |
568 (p)->windows_changed = 0; \ | |
569 (p)->windows_structure_changed = 0; \ | |
570 } while (0) | |
571 | |
572 #define GLOBAL_RESET_CHANGED_FLAGS do { \ | |
573 buffers_changed = 0; \ | |
574 clip_changed = 0; \ | |
575 extents_changed = 0; \ | |
576 frame_changed = 0; \ | |
905 | 577 frame_layout_changed = 0; \ |
428 | 578 icon_changed = 0; \ |
579 menubar_changed = 0; \ | |
580 modeline_changed = 0; \ | |
581 point_changed = 0; \ | |
582 toolbar_changed = 0; \ | |
583 gutter_changed = 0; \ | |
584 glyphs_changed = 0; \ | |
585 subwindows_changed = 0; \ | |
442 | 586 subwindows_state_changed = 0; \ |
428 | 587 windows_changed = 0; \ |
588 windows_structure_changed = 0; \ | |
589 } while (0) | |
590 | |
591 #define CLASS_REDISPLAY_FLAGS_CHANGEDP(p) \ | |
592 ( (p)->buffers_changed || \ | |
593 (p)->clip_changed || \ | |
594 (p)->extents_changed || \ | |
595 (p)->faces_changed || \ | |
596 (p)->frame_changed || \ | |
905 | 597 (p)->frame_layout_changed || \ |
428 | 598 (p)->icon_changed || \ |
599 (p)->menubar_changed || \ | |
600 (p)->modeline_changed || \ | |
601 (p)->point_changed || \ | |
602 (p)->toolbar_changed || \ | |
603 (p)->gutter_changed || \ | |
604 (p)->glyphs_changed || \ | |
442 | 605 (p)->size_changed || \ |
428 | 606 (p)->subwindows_changed || \ |
607 (p)->subwindows_state_changed || \ | |
608 (p)->windows_changed || \ | |
609 (p)->windows_structure_changed ) | |
610 | |
611 #define GLOBAL_REDISPLAY_FLAGS_CHANGEDP \ | |
612 ( buffers_changed || \ | |
613 clip_changed || \ | |
614 extents_changed || \ | |
615 faces_changed || \ | |
616 frame_changed || \ | |
905 | 617 frame_layout_changed || \ |
428 | 618 icon_changed || \ |
619 menubar_changed || \ | |
620 modeline_changed || \ | |
621 point_changed || \ | |
622 toolbar_changed || \ | |
623 gutter_changed || \ | |
624 glyphs_changed || \ | |
430 | 625 size_changed || \ |
428 | 626 subwindows_changed || \ |
627 subwindows_state_changed || \ | |
628 windows_changed || \ | |
629 windows_structure_changed ) | |
630 | |
631 | |
632 /* Anytime a console, device or frame is added or deleted we need to reset | |
633 these flags. */ | |
634 #define RESET_CHANGED_SET_FLAGS do { \ | |
635 buffers_changed_set = 0; \ | |
636 clip_changed_set = 0; \ | |
637 extents_changed_set = 0; \ | |
638 icon_changed_set = 0; \ | |
639 menubar_changed_set = 0; \ | |
640 modeline_changed_set = 0; \ | |
641 point_changed_set = 0; \ | |
642 toolbar_changed_set = 0; \ | |
643 gutter_changed_set = 0; \ | |
644 glyphs_changed_set = 0; \ | |
645 subwindows_changed_set = 0; \ | |
646 subwindows_state_changed_set = 0; \ | |
647 } while (0) | |
648 | |
649 | |
650 /*************************************************************************/ | |
651 /* redisplay global variables */ | |
652 /*************************************************************************/ | |
653 | |
1204 | 654 extern const struct sized_memory_description display_line_dynarr_description; |
655 | |
428 | 656 /* redisplay structure used by various utility routines. */ |
657 extern display_line_dynarr *cmotion_display_lines; | |
658 | |
659 /* Nonzero means truncate lines in all windows less wide than the frame. */ | |
660 extern int truncate_partial_width_windows; | |
661 | |
662 /* Nonzero if we're in a display critical section. */ | |
663 extern int in_display; | |
664 | |
665 /* Nonzero means no need to redraw the entire frame on resuming | |
666 a suspended Emacs. This is useful on terminals with multiple pages, | |
667 where one page is used for Emacs and another for all else. */ | |
668 extern int no_redraw_on_reenter; | |
669 | |
442 | 670 /* Non-nil means flash the frame instead of ringing the bell. */ |
671 extern Lisp_Object Vvisible_bell; | |
428 | 672 |
673 /* Thickness of shadow border around 3D modelines. */ | |
674 extern Lisp_Object Vmodeline_shadow_thickness; | |
675 | |
676 /* Scroll if point lands on the bottom line and that line is partially | |
677 clipped. */ | |
678 extern int scroll_on_clipped_lines; | |
679 | |
680 extern Lisp_Object Vglobal_mode_string; | |
681 | |
682 /* The following two variables are defined in emacs.c and are used | |
683 to convey information discovered on the command line way early | |
684 (before *anything* is initialized). */ | |
685 | |
686 /* If non-zero, a window-system was specified on the command line. | |
687 Defined in emacs.c. */ | |
688 extern int display_arg; | |
689 | |
690 /* Type of display specified. Defined in emacs.c. */ | |
771 | 691 extern const Char_ASCII *display_use; |
428 | 692 |
693 /* Nonzero means reading single-character input with prompt | |
694 so put cursor on minibuffer after the prompt. */ | |
695 | |
696 extern int cursor_in_echo_area; | |
697 | |
698 extern Lisp_Object Qbar_cursor, Qcursor_in_echo_area, Vwindow_system; | |
699 | |
442 | 700 extern Lisp_Object Qtop_bottom; |
701 | |
428 | 702 |
703 /*************************************************************************/ | |
704 /* redisplay exported functions */ | |
705 /*************************************************************************/ | |
706 EXFUN (Fredraw_frame, 2); | |
707 | |
708 int redisplay_text_width_string (struct window *w, int findex, | |
867 | 709 Ibyte *nonreloc, Lisp_Object reloc, |
428 | 710 Bytecount offset, Bytecount len); |
711 int redisplay_frame_text_width_string (struct frame *f, | |
712 Lisp_Object face, | |
867 | 713 Ibyte *nonreloc, |
428 | 714 Lisp_Object reloc, |
715 Bytecount offset, Bytecount len); | |
442 | 716 int redisplay_frame (struct frame *f, int preemption_check); |
853 | 717 void redisplay_no_pre_idle_hook (void); |
428 | 718 void redisplay (void); |
853 | 719 Lisp_Object eval_within_redisplay (Lisp_Object dont_trust_this_damn_sucker); |
428 | 720 struct display_block *get_display_block_from_line (struct display_line *dl, |
721 enum display_type type); | |
722 layout_bounds calculate_display_line_boundaries (struct window *w, | |
723 int modeline); | |
665 | 724 Charbpos point_at_center (struct window *w, int type, Charbpos start, |
826 | 725 Charbpos point); |
726 int line_at_center (struct window *w, int type, Charbpos start, | |
727 Charbpos point); | |
428 | 728 int window_half_pixpos (struct window *w); |
729 void redisplay_echo_area (void); | |
730 void free_display_structs (struct window_mirror *mir); | |
731 void free_display_lines (display_line_dynarr *dla); | |
442 | 732 void mark_redisplay_structs (display_line_dynarr *dla); |
428 | 733 void generate_displayable_area (struct window *w, Lisp_Object disp_string, |
734 int xpos, int ypos, int width, int height, | |
735 display_line_dynarr* dl, | |
665 | 736 Charbpos start_pos, face_index default_face); |
438 | 737 /* `generate_title_string' in frame.c needs this */ |
738 void generate_formatted_string_db (Lisp_Object format_str, | |
739 Lisp_Object result_str, | |
740 struct window *w, | |
741 struct display_line *dl, | |
742 struct display_block *db, | |
743 face_index findex, | |
744 int min_pixpos, int max_pixpos, int type); | |
428 | 745 int real_current_modeline_height (struct window *w); |
746 int pixel_to_glyph_translation (struct frame *f, int x_coord, | |
747 int y_coord, int *col, int *row, | |
748 int *obj_x, int *obj_y, | |
665 | 749 struct window **w, Charbpos *charbpos, |
750 Charbpos *closest, Charcount *modeline_closest, | |
428 | 751 Lisp_Object *obj1, Lisp_Object *obj2); |
752 void glyph_to_pixel_translation (struct window *w, int char_x, | |
753 int char_y, int *pix_x, int *pix_y); | |
665 | 754 int point_in_line_start_cache (struct window *w, Charbpos point, |
428 | 755 int min_past); |
665 | 756 int point_would_be_visible (struct window *w, Charbpos startp, |
826 | 757 Charbpos point); |
665 | 758 Charbpos start_of_last_line (struct window *w, Charbpos startp); |
759 Charbpos end_of_last_line (struct window *w, Charbpos startp); | |
760 Charbpos start_with_line_at_pixpos (struct window *w, Charbpos point, | |
826 | 761 int pixpos); |
665 | 762 Charbpos start_with_point_on_display_line (struct window *w, Charbpos point, |
826 | 763 int line); |
428 | 764 int redisplay_variable_changed (Lisp_Object sym, Lisp_Object *val, |
765 Lisp_Object in_object, int flags); | |
766 void redisplay_glyph_changed (Lisp_Object glyph, Lisp_Object property, | |
767 Lisp_Object locale); | |
768 | |
769 #ifdef MEMORY_USAGE_STATS | |
770 int compute_display_line_dynarr_usage (display_line_dynarr *dyn, | |
771 struct overhead_stats *ovstats); | |
772 int compute_line_start_cache_dynarr_usage (line_start_cache_dynarr *dyn, | |
773 struct overhead_stats *ovstats); | |
774 #endif | |
775 | |
776 | |
777 /* defined in redisplay-output.c */ | |
778 int get_next_display_block (layout_bounds bounds, | |
779 display_block_dynarr *dba, int start_pos, | |
780 int *next_start); | |
442 | 781 void redisplay_output_layout (Lisp_Object domain, |
428 | 782 Lisp_Object image_instance, |
617 | 783 struct display_box* db, |
784 struct display_glyph_area* dga, | |
785 face_index findex, int cursor_start, | |
786 int cursor_width, | |
428 | 787 int cursor_height); |
788 void redisplay_output_subwindow (struct window *w, | |
789 Lisp_Object image_instance, | |
617 | 790 struct display_box* db, |
791 struct display_glyph_area* dga, | |
792 face_index findex, int cursor_start, | |
793 int cursor_width, | |
428 | 794 int cursor_height); |
617 | 795 void redisplay_unmap_subwindows_maybe (struct frame* f, int x, int y, |
796 int width, int height); | |
428 | 797 void redisplay_output_pixmap (struct window *w, |
798 Lisp_Object image_instance, | |
617 | 799 struct display_box* db, |
800 struct display_glyph_area* dga, | |
801 face_index findex, int cursor_start, | |
802 int cursor_width, | |
428 | 803 int cursor_height, int offset_bitmap); |
804 int redisplay_calculate_display_boxes (struct display_line *dl, int xpos, | |
819 | 805 int xoffset, int yoffset, int start_pixpos, |
806 int width, struct display_box* dest, | |
428 | 807 struct display_glyph_area* src); |
808 int redisplay_normalize_glyph_area (struct display_box* dest, | |
809 struct display_glyph_area* glyphsrc); | |
810 void redisplay_clear_to_window_end (struct window *w, int ypos1, int ypos2); | |
811 void redisplay_clear_region (Lisp_Object window, face_index findex, int x, | |
812 int y, int width, int height); | |
448 | 813 void redisplay_clear_top_of_window (struct window *w); |
428 | 814 void redisplay_clear_bottom_of_window (struct window *w, |
815 display_line_dynarr *ddla, | |
816 int min_start, int max_end); | |
817 void redisplay_update_line (struct window *w, int first_line, | |
818 int last_line, int update_values); | |
819 void redisplay_output_window (struct window *w); | |
820 void bevel_modeline (struct window *w, struct display_line *dl); | |
665 | 821 int redisplay_move_cursor (struct window *w, Charbpos new_point, |
428 | 822 int no_output_end); |
823 void redisplay_redraw_cursor (struct frame *f, int run_begin_end_meths); | |
824 void output_display_line (struct window *w, display_line_dynarr *cdla, | |
825 display_line_dynarr *ddla, int line, | |
826 int force_start, int force_end); | |
442 | 827 void sync_display_line_structs (struct window *w, int line, int do_blocks, |
828 display_line_dynarr *cdla, | |
829 display_line_dynarr *ddla); | |
428 | 830 |
440 | 831 #endif /* INCLUDED_redisplay_h_ */ |