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.