ftp.nice.ch/pub/next/unix/editor/vim-5.0f.s.tar.gz#/vim-5.0f/src/gui.h

This is gui.h in view mode; [Download] [Up]

/* vi:set ts=4 sw=4:
 *
 * VIM - Vi IMproved			by Bram Moolenaar
 *								Motif support by Robert Webb
 *
 * Do ":help uganda"  in Vim to read copying and usage conditions.
 * Do ":help credits" in Vim to see a list of people who contributed.
 */

/* For debugging */
/* #define D(x)	printf x; */
#define D(x)

#ifdef USE_GUI_MOTIF
# define USE_GUI_X11
# include <Xm/Xm.h>
#endif

#ifdef USE_GUI_ATHENA
# define USE_GUI_X11
# include <X11/Intrinsic.h>
# include <X11/StringDefs.h>
#endif

#ifdef USE_GUI_WIN32
# include <windows.h>
#endif

/* In the GUI we always have the clipboard and the mouse */
#ifndef USE_CLIPBOARD
# define USE_CLIPBOARD
#endif
#ifndef USE_MOUSE
# define USE_MOUSE
#endif

/*
 * On some systems, when we compile with the GUI, we always use it.  On Mac
 * there is no terminal version, and on Windows we can't figure out how to
 * fork one off with :gui.
 */
#if defined(USE_GUI_WIN32) || defined(USE_GUI_MAC)
# define ALWAYS_USE_GUI
#endif

/*
 * These macros convert between character row/column and pixel coordinates.
 * TEXT_X	- Convert character column into X pixel coord for drawing strings.
 * TEXT_Y	- Convert character row into Y pixel coord for drawing strings.
 * FILL_X	- Convert character column into X pixel coord for filling the area
 *				under the character.
 * FILL_Y	- Convert character row into Y pixel coord for filling the area
 *				under the character.
 * X_2_COL	- Convert X pixel coord into character column.
 * Y_2_ROW	- Convert Y pixel coord into character row.
 */
#define TEXT_X(col)		((col) * gui.char_width  + gui.border_offset)
#define TEXT_Y(row)		((row) * gui.char_height + gui.char_ascent \
												 + gui.border_offset)
#define FILL_X(col)		((col) * gui.char_width  + gui.border_offset)
#define FILL_Y(row)		((row) * gui.char_height + gui.border_offset)
#define X_2_COL(x)		(((x) - gui.border_offset) / gui.char_width)
#define Y_2_ROW(y)		(((y) - gui.border_offset) / gui.char_height)

/* Menu modes */
#define MENU_NORMAL_MODE	0x01
#define MENU_VISUAL_MODE	0x02
#define MENU_INSERT_MODE	0x04
#define MENU_CMDLINE_MODE	0x08
#define MENU_ALL_MODES		0x0f

/* Indices into GuiMenu->strings[] and GuiMenu->noremap[] for each mode */
#define MENU_INDEX_INVALID	-1
#define MENU_INDEX_NORMAL	0
#define MENU_INDEX_VISUAL	1
#define MENU_INDEX_INSERT	2
#define MENU_INDEX_CMDLINE	3

/* Indices for arrays of scrollbars */
#define SBAR_NONE			-1
#define SBAR_LEFT			0
#define SBAR_RIGHT			1
#define SBAR_BOTTOM			2

/* Orientations for scrollbars */
#define SBAR_VERT			0
#define SBAR_HORIZ			1

/* Default size of scrollbar */
#define SB_DEFAULT_WIDTH	16

/* Default height of the menu bar */
#define MENU_DEFAULT_HEIGHT 32

/* Flags for gui_mch_outstr_nowrap() */
#define GUI_MON_WRAP_CURSOR		0x01		/* wrap cursor at end of line */
#define GUI_MON_IS_CURSOR		0x02		/* drawing cursor */
#define GUI_MON_INVERT			0x04		/* invert the characters */

/*
 * When we know the cursor is no longer being displayed (eg it has been written
 * over).
 */
#define INVALIDATE_CURSOR()		(gui.cursor_row = -1)

/* #define INVALIDATE_CURSOR()	do{printf("Invalidate cursor %d\n", __LINE__); gui.cursor_row = -1;}while(0) */

/*
 * For checking whether cursor needs redrawing, or whether it doesn't need
 * undrawing.
 */
#define IS_CURSOR_VALID()		(gui.cursor_row >= 0)

typedef struct GuiMenu
{
	int			modes;				/* Which modes is this menu visible for? */
	char_u		*name;				/* Name shown in menu */
	void		(*cb)();			/* Call-back routine */
	char_u		*strings[4];		/* Mapped string for each mode */
	int			noremap[4];			/* A noremap flag for each mode */
	struct GuiMenu *children;		/* Children of sub-menu */
	struct GuiMenu *next;			/* Next item in menu */
#ifdef USE_GUI_X11
	Widget		id;					/* Manage this to enable item */
	Widget		submenu_id;			/* If this is submenu, add children here */
#endif
#ifdef USE_GUI_WIN32
	UINT		id;					/* Id of menu item */
	HMENU		submenu_id;			/* If this is submenu, add children here */
#endif
} GuiMenu;

typedef struct GuiScrollbar
{
	long		ident;				/* Unique identifier for each scrollbar */
	struct window *wp;				/* Scrollbar's window, NULL for bottom */
	int			value;				/* Represents top line number visible */
	int			size;				/* Size of scrollbar thumb */
	int			max;				/* Number of lines in buffer */

	/* Values measured in characters: */
	int			top;				/* Top of scroll bar (chars from row 0) */
	int			height;				/* Height of scroll bar (num rows) */
	int			status_height;		/* Height of status line */
#ifdef USE_GUI_X11
	Widget		id;					/* Id of real scroll bar */
#endif
#ifdef USE_GUI_WIN32
	HWND		id;					/* Id of real scroll bar */
#endif
} GuiScrollbar;

typedef long_u		GuiColor;		/* handle for a GUI color */
typedef long_u		GuiFont;		/* handle for a GUI font */

typedef struct Gui
{
	int			in_focus;			/* Vim has input focus */
	int			in_use;				/* Is the GUI being used? */
	int			starting;			/* GUI will start in a little while */
	int			window_created;		/* Has the window been created yet? */
	int			dying;				/* Is vim dying? Then output to terminal */
	int			dofork;				/* Use fork() when GUI is starting */
	int			dragged_sb;			/* Which scrollbar being dragged, if any? */
	struct window	*dragged_wp;	/* Which WIN's sb being dragged, if any? */
	int			col;				/* Current cursor column in GUI display */
	int			row;				/* Current cursor row in GUI display */
	int			cursor_col;			/* Physical cursor column in GUI display */
	int			cursor_row;			/* Physical cursor row in GUI display */
	int			num_cols;			/* Number of columns */
	int			num_rows;			/* Number of rows */
	int			scroll_region_top;	/* Top (first) line of scroll region */
	int			scroll_region_bot;	/* Bottom (last) line of scroll region */
	long_u		highlight_mask;		/* Highlight attribute mask */
	GuiMenu		*root_menu;			/* Root of menu hierarchy */
	int			scrollbar_width;	/* Width of vertical scrollbars */
	int			scrollbar_height;	/* Height of horizontal scrollbar */
	int			left_sbar_x;		/* Calculated x coord for left scrollbar */
	int			right_sbar_x;		/* Calculated x coord for right scrollbar */
	int			menu_height;		/* Height of the menu bar */
	int			menu_width;			/* Width of the menu bar */
	int			menu_is_active;		/* TRUE if menu is present */
	GuiScrollbar bottom_sbar;		/* Bottom scrollbar */
	int			which_scrollbars[3];/* Which scrollbar boxes are active? */
	int			prev_wrap;			/* For updating the horizontal scrollbar */
	int			char_width;			/* Width of char in pixels */
	int			char_height;		/* Height of char in pixels */
	int			char_ascent;		/* Ascent of char in pixels */
	int			border_width;		/* Width of our border around text area */
	int			border_offset;		/* Total pixel offset for all borders */
	GuiFont		norm_font;
	GuiFont		bold_font;
	GuiFont		ital_font;
	GuiFont		boldital_font;
	GuiColor	back_pixel;			/* Color of background */
	GuiColor	norm_pixel;			/* Color of normal text */
	GuiColor	bold_pixel;			/* Color of bold text */
	GuiColor	ital_pixel;			/* Color of ital text */
	GuiColor	underline_pixel;	/* Color of underlined text */
	GuiColor	cursor_pixel;		/* Color of cursor */
#ifdef USE_GUI_X11
	GuiColor	menu_fg_pixel;		/* Color of menu foregound */
	GuiColor	menu_bg_pixel;		/* Color of menu backgound */
	GuiColor	scroll_fg_pixel;	/* Color of scrollbar foregrnd */
	GuiColor	scroll_bg_pixel;	/* Color of scrollbar backgrnd */
	Display		*dpy;				/* X display */
	Window		wid;				/* Window id of text area */
	int			visibility;			/* Is window partially/fully obscured? */
	GC			text_gc;
	GC			back_gc;
	GC			invert_gc;

	/* X Resources */
	char_u		*dflt_font;			/* Resource font, used if 'font' not set */
	char_u		*dflt_bold_fn;		/* Resource bold font */
	char_u		*dflt_ital_fn;		/* Resource italic font */
	char_u		*dflt_boldital_fn;	/* Resource bold-italic font */
	char_u		*geom;				/* Geometry, eg "80x24" */
	Bool		rev_video;			/* Use reverse video? */
#endif
#ifdef USE_GUI_WIN32
	GuiFont		currFont;			/* Current font */
	GuiColor	currFgColor;		/* Current foreground text color */
	GuiColor	currBgColor;		/* Current background text color */

	/* Windows resources, from vim.ini file */
	char		dflt_font_name[32];	/* Default font face name */
	int			dflt_font_height;	/* Default font height */
#endif
} Gui;

extern Gui gui;						/* this is defined in gui.c */
extern int force_menu_update;		/* this is defined in gui.c */

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.