⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ev_impl.h

📁 操作系统SunOS 4.1.3版本的源码
💻 H
字号:
/*      @(#)ev_impl.h 1.1 92/07/30 SMI      *//* * Copyright (c) 1985 by Sun Microsystems, Inc. */#ifndef ev_impl_DEFINED#define ev_impl_DEFINED/* * Internal structures for entity_view implementation. * */#				ifndef suntool_entity_view_DEFINED#include "entity_view.h"#				endif/* * the purpose of struct ev_impl_line_data is to have a client_data, * separate from position for ft_set. * * The fields in struct ev_impl_line_seq are as follows: * pos		common to all finger tables, position of the finger. * considered	the last Es_index considered, relative to pos, *		in deciding what character starts the next line. * damaged	first Es_index, relative to pos, damaged by either *		insertion or deletion. * blit_down	temporary, only found in tmp_line_table, for telling *		the paint routine what to blit down. * blit_up	same as blit_down but for blitting up. */struct ev_impl_line_data {	Es_index		considered;	Es_index		damaged;	int			blit_down;	int			blit_up;};typedef struct ev_impl_line_seq *Ev_impl_line_seq;struct ev_impl_line_seq {	Es_index		pos;	Es_index		considered;	Es_index		damaged;	int			blit_down;	int			blit_up;};/* flag values for Ev_impl_line_seq->flags */#define	EV_LT_BLIT_DOWN		0x0000001typedef struct ev_index_range {	Es_index		first, last_plus_one;} Ev_range;typedef struct op_bdry_datum *	Op_bdry_handle;struct op_bdry_datum {	Es_index		pos;	Ev_mark_object		info;	unsigned		flags;	opaque_t		more_info;};typedef struct ev_overlay_object {	struct pixrect		*pr;	int			 pix_op;	short			 offset_x, offset_y;	unsigned		 flags;} Ev_overlay_object;typedef Ev_overlay_object *	Ev_overlay_handle;#define	EV_OVERLAY_RIGHT_MARGIN	0x00000001#define	EI_OP_EV_OVERLAY	0x01000000	/* op_bdry flags (in addition to EV_SEL_* in entity_view.h) */#define EV_BDRY_END		EV_SEL_CLIENT_FLAG(0x1)				/* ... otherwise _BEGIN */#define	EV_BDRY_OVERLAY		EV_SEL_CLIENT_FLAG(0x2)#define EV_BDRY_TYPE_ONLY	(EV_BDRY_END|EV_SEL_BASE_TYPE(0xFFFFFFFF))#define EV_BDRY_EXACT_MATCH	(EV_BDRY_TYPE_ONLY|EV_SEL_PENDING_DELETE)/*   The following struct is used to cache information about the coordinate * of a position in a view.  The definition of when the cache is * valid is encapsulated in the EV_CACHED_POS_INFO_IS_VALID macro below. */typedef struct ev_pos_info {	Es_index		 index_of_first, pos;	int			 edit_number;	int			 lt_index;	struct pr_pos		 pr_pos;} Ev_pos_info;#define	EV_NOT_IN_VIEW_LT_INDEX	-1#define	EV_NULL_DIM		-10000/*   The following struct is used to cache information about the physical * lines that are visible in a view.  The definition of when the cache is * valid is encapsulated in the EV_CACHED_LINE_INFO_IS_VALID macro below. * *   It is also used to cache the last sought line number from * ev_position_for_physical_line().  If the next sought line number * is greater than the cached one and the cache is valid, then the * search may be started from the cached position.  In this usage, * line_count is ignored, and cache validity is only based on * EV_CHAIN_PRIVATE->edit_number. */typedef struct ev_physical_line_info {	Es_index		 index_of_first;	int			 edit_number;	int			 first_line_number;	/* 0-origin */	int			 line_count;} Ev_physical_line_info;/*   Caret_pr_pos is set to EV_NULL_DIM when the caret is not displayed. * This field is required because the insert_pos may move BEFORE the caret is * taken down. */typedef struct ev_private_data_object *Ev_pd_handle;struct ev_private_data_object {	struct pr_pos		 caret_pr_pos;	short			 left_margin, right_margin;	Ev_right_break		 right_break;	Ev_pos_info		 cached_insert_info;	Ev_physical_line_info	 cached_line_info;	long unsigned		 state;};#ifdef lint#define EV_PRIVATE(view_formal)	(Ev_pd_handle)(view_formal ? 0 : 0)#else#define EV_PRIVATE(view_formal)	((Ev_pd_handle) view_formal->private_data)#endif#define	EV_VIEW_FIRST(view_formal)	ft_position_for_index( \		(view_formal)->line_table, 0)	/* Bit flags for EV_PRIVATE(view)->state */#define	EV_VS_INSERT_WAS_IN_VIEW	0x00000001#define	EV_VS_INSERT_WAS_IN_VIEW_RECT	0x00000002#define	EV_VS_DAMAGED_LT		0x00000004#define	EV_VS_DELAY_UPDATE		0x00000008#define	EV_VS_NO_REPAINT_TIL_EVENT	0x00000010#define	EV_VS_UNUSED			0xffffffe0typedef struct ev_chain_private_data_object *Ev_chain_pd_handle;struct ev_chain_private_data_object {	Es_index		  insert_pos;	Ev_mark_object		  selection[2];	Ev_mark_object		  secondary[2];	Ev_line_table		  op_bdry;	int			  auto_scroll_by,				  lower_context, upper_context;	int			(*notify_proc)();	int			  notify_level;	int			  edit_number;	int			  caret_is_ghost;	int			  glyph_count;	struct pixrect		 *caret_pr;	struct pr_pos		  caret_hotpoint;	struct pixrect		 *ghost_pr;	struct pr_pos		  ghost_hotpoint;	Ev_physical_line_info	  cache_pos_for_file_line;};#ifdef lint#define EV_CHAIN_PRIVATE(chain_formal)					\	((Ev_chain_pd_handle)((chain_formal) ? 0 : 0 ))#define	EV_CACHED_POS_INFO_IS_VALID(view_formal, pos_formal, cache_formal) \	((view_formal) && (pos_formal) && (cache_formal))#define	EV_CACHED_LINE_INFO_IS_VALID(view_formal)			\	((view_formal))#else#define EV_CHAIN_PRIVATE(chain_formal)					\	((Ev_chain_pd_handle) (chain_formal)->private_data)#define	EV_CACHED_POS_INFO_IS_VALID(view_formal, pos_formal, cache_formal) \    (	((cache_formal)->pos == (pos_formal)) &&			   \	((cache_formal)->index_of_first == EV_VIEW_FIRST(view_formal)) &&  \	((cache_formal)->edit_number ==	     				   \	 EV_CHAIN_PRIVATE((view_formal)->view_chain)->edit_number)  )#define	EV_CACHED_LINE_INFO_IS_VALID(view_formal)			\    (	(EV_PRIVATE(view_formal)->cached_line_info.index_of_first ==	\	 EV_VIEW_FIRST(view_formal)) &&					\	(EV_PRIVATE(view_formal)->cached_line_info.edit_number ==	\	 EV_CHAIN_PRIVATE((view_formal)->view_chain)->edit_number)  )#endif	/* break_action bits for ev_display_internal */#define EV_QUIT			0x00000001#define EV_Q_DORBREAK		0x00000002#define EV_Q_LTMATCH		0x00000004#define EV_BUFSIZE 200struct range {	int		ei_op;	int		last_plus_one;	int		next_i;	unsigned	op_bdry_state;};#endif/* * Struct for use by ev_process and friends. */typedef struct _ev_process_object {	Ev_handle		 view;	Rect			 rect;	struct ei_process_result result;	struct pr_pos		 ei_xy;	Es_buf_object		 esbuf;	Es_buf_object		 whole_buf;	int			 esbuf_status;	Es_index		 last_plus_one;	Es_index		 pos_for_line;	unsigned		 flags;}	Ev_process_object;#define	EV_PROCESS_PROCESSED_BUF	0x0000001typedef Ev_process_object *Ev_process_handle;#ifdef notdef/* * The assertions being maintained for the line_table entries follow. * The view is tiled from the top to the bottom by a series of strips, *   each of the same height and width, except that the last strip may *   not be full height. * A strip is painted with entities from the left edge to the right. * The line_table has one entry for each strip, plus an additional *   entry.  The entry for a strip records the index of the first *   entity painted in the strip (that is, the entity painted at the *   left edge of the strip).  If no entities are painted in the strip, *   then the line_table entry contains the length of the entity *   stream. * The additional line_table entry contains whatever entry would have *   been made if the view was one strip longer. */		/* INITIALIZATION and FINALIZATION */Ev_chainev_create_chain(esh, eih, sizeof_finger_data)	Es_handle	esh;	Ei_handle	eih;/* * Allocates and initializes an Ev_chain_object, returning a handle for the *   object. */Ev_handleev_create_view(chain, pw, rect)	Ev_chain	chain;	struct pixwin	*pw;	struct rect	*rect;/* * Allocates and initializes an ev_object, returning a handle for the object. * Note: creation of a view does NOT cause it to be displayed. */ev_destroy(view)	Ev_handle view;/* * Deallocates the indicated ev_object and all other structures assigned to, *   and accessible from that object. */Ev_chainev_destroy_chain_and_views(chain)	Ev_chain	chain;/* * Deallocates the indicated Ev_chain_object and all other structures *   assigned to, and accessible from that object, AFTER first destroying *   each of the views in the chain. */ev_set_chain_options(chain, options)	Ev_chain	chain;	int		options;ev_set_options(view, options)	Ev_handle	view;	int		options;		/* GEOMETRIC UTILITIES */Ev_handleev_view_above(this_view)	Ev_handle	this_view;/* * Returns the view that has the largest rect.r_top less than this_view's. */Ev_handleev_view_below(this_view)	Ev_handle	this_view;/* * Returns the view that has the smallest rect.r_top greater than this_view's. */Ev_handleev_highest_view(chain)	Ev_chain	chain;/* * Returns the view that has the smallest rect.r_top. */Ev_handleev_lowest_view(chain)	Ev_chain	chain;/* * Returns the view that has the largest rect.r_top. */		/* DISPLAY UTILITIES */ev_clear_rect(view, rect)	Ev_handle		 view;	register struct rect	*rect;/* * Paints a background pattern within the indicated view and rectangle (which *   should be within that view's rectangle). */ev_line_tableev_ft_for_rect(eih, rect)	Ei_handle		 eih;	struct rect		*rect;/* * Allocates a line_table of a size appropriate to the indicated *   entity_interpreter and rectangle. */ev_set_rect(view, rect, intersect_rect)	register ev_handle	 view;	struct rect		*rect,				*intersect_rect;/* * Changes the rectangle for the view to the indicated new rectangle after *   clearing the old view rectangle. * Also adjusts line_table to match new size. * If the intersect_rect is not null, and it intersects the new rect, then *   the view is displayed in the intersection of the two rects. */ev_rangeev_get_selection_range(private, type, mode)	Ev_chain_pd_handle	 private;	unsigned		 type;	int			*mode;/* * INTERNAL UTILITY: computes range occupied by selection of specified type. * If mode is non-zero, *mode is set to the selection mode *   (e.g., EV_SEL_PD_PRIMARY). */ev_set_selection(chain, first, last_plus_one, type)	Ev_chain	chain;	Es_index	first, last_plus_one;	unsigned	type;/* * Sets the selection of the indicated type to be the indicated interval. */intev_get_selection(chain, first, last_plus_one, type)	Ev_chain	 chain;	Es_index	*first, *last_plus_one;	unsigned	 type;/* * Gets the interval for the selection of the indicated type.  If no such *   interval exists, *first is set to ES_INFINITY. * Returns the value of the selection mode (e.g., EV_SEL_PD_PRIMARY). */ev_clear_selection(chain, type)	Ev_chain	chain;	unsigned	 type;/* * Removes the selection of the indicated type from the display and the *   internal state. */ev_view_range(view, first, last_plus_one)	Ev_handle	 view;	Es_index	*first, *last_plus_one;/* * Fills the first and last_plus_one targets with the corresponding entity *   positions for the indicated view. */ev_xy_in_view(view, pos, lt_index, rect)	Ev_handle	 view;	Es_index	 pos;	int		*lt_index;	struct rect	*rect;/* Given a position in the underlying entity_stream, this routine determines *   whether the position is visible in the view, and if not, how it is *   related to the view. * Returns: *  EV_XY_VISIBLE	iff pos is visible in view, *  EV_XY_ABOVE		if pos is above view, *  EV_XY_BELOW		if pos is below view, *  EV_XY_RIGHT		if pos is to the right of view, * Only when the return is EV_XY_VISIBLE is lt_index set to the line_table  *   index containing the position and rect is set to the rectangle beginning *   at the position. */ev_display_range(chain, first, last_plus_one)	Ev_chain	chain;	Es_index	first, last_plus_one;/* * For all views, displays the entities in the interval [first..last_plus_one). */ev_display_view(view)	Ev_handle	view;/* * Redisplays the indicated view from scratch. */ev_display_views(chain)	Ev_chain	chain;/* * Redisplays all the views on the indicated chain from scratch. */ev_set_start(view, start)	Ev_handle	view;	Es_index	start;/* * Changes the view to have the entity identified by start as the first *   entity visible in the view, and then repaints the view. */Es_indexev_scroll_lines(view, line_count)	Ev_handle	view;	int		line_count;/* * Scrolls the view forward (line_count positive) or backward (line_count *   negative) by the indicated line_count. * Returns the entity index for the first visible entity in the view after *   the scroll. */ev_fill_esbuf(esbuf, ptr_to_last_plus_one)	Ei_esbuf_handle	 esbuf;	Es_index	*ptr_to_last_plus_one;/* * Fills the provided buffer with entities from the entity_stream. * Returns non-zero value iff READ_AT_EOF. * If return is 0, then at least one entity was read, and the index one past *   the last entity read is set through ptr_to_last_plus_one. */ev_range_info(op_bdry, pos, range)	Ev_line_table		 op_bdry;	Es_index		 pos;	struct range		*range;/* * Fills the indicated range with the information associated with pos. */struct Ei_process_resultev_display_internal(view, rect, line, stop_plus_one, ei_op, break_action)	Ev_handle	 view;	struct rect	*rect;	int		 line;	Es_index	 stop_plus_one;	int		 ei_op, break_action;/* * The main workhorse display routine. * WARNING: This routine is overloaded, too complex, and buggy! */ev_line_for_y(view, y)	Ev_handle	view;	int		y;/* * Returns the line_table index for the indicated y coordinate, which is in *   the pixwin's coordinate system (thus y=0 may not be in the view). */Es_indexev_index_for_line(view, line)	Ev_handle	view;	int		line;/* * Returns the entity index for the specified line in the specified view. * If line is out of range, it is forced to 0. */struct rectev_rect_for_line(view, line)	Ev_handle	view;	int		line;/* * Returns the rectangle bounding the indicated line in the view. * This rectangle is in the pixwin's coordinate system. */Ev_handleev_resolve_xy_to_view(views, x, y)	Ev_chain	 views;	int		 x, y;/* * Returns the view containing the indicated point (in the pixwin's coordinate *   system), or 0 if no such view exists. */Es_indexev_resolve_xy(views, x, y)	Ev_chain	 views;	int		 x, y;/* * Returns the index of the entity containing the indicated point (in the *   pixwin's coordinate system), or ES_INFINITY if no such index exists. */ev_set_esh(chain, esh, reset)	Ev_chain	chain;	Es_handle	esh;	unsigned	reset;/* * Changes the entity_stream underlying the views, then repaints all views. * If reset is non-zero, the views are repositioned to the beginning of the *   new stream before being displayed. */#endifextern	Ev_finger_handle ev_add_finger();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -