/* @(#)window.h 20.99 93/06/28 SMI */ /* * (c) Copyright 1989 Sun Microsystems, Inc. Sun design patents * pending in the U.S. and foreign countries. See LEGAL NOTICE * file for terms of the license. */ #ifndef xview_window_DEFINED #define xview_window_DEFINED /* *********************************************************************** * Include Files *********************************************************************** */ #include #include #include #include #include #include #include /* *********************************************************************** * Definitions and Macros *********************************************************************** */ /* * PUBLIC #defines */ #define WINDOW &xv_window_pkg #define WIN_EXTEND_TO_EDGE -1 #define WIN_DEFAULT_BORDER_WIDTH 1 #define WIN_MESSAGE_DATA_SIZE 20 #define window_main_loop xv_main_loop typedef enum { /* values for WIN_SCALE_STATE */ WIN_SCALE_SMALL, WIN_SCALE_MEDIUM, WIN_SCALE_LARGE, WIN_SCALE_EXTRALARGE } Window_rescale_state; #ifndef ForgetGravity /* Bit Gravity */ #define ForgetGravity 0 #define NorthWestGravity 1 #define NorthGravity 2 #define NorthEastGravity 3 #define WestGravity 4 #define CenterGravity 5 #define EastGravity 6 #define SouthWestGravity 7 #define SouthGravity 8 #define SouthEastGravity 9 #define StaticGravity 10 /* Window gravity + bit gravity above */ #define UnmapGravity 0 #endif /* * Useful conversion macros */ #define XV_SCREEN_FROM_WINDOW(window) \ (Xv_Screen) xv_get(window, XV_SCREEN) #define XV_SERVER_FROM_WINDOW(window) \ (Xv_Server) xv_get(xv_get(window, XV_SCREEN), SCREEN_SERVER) #define XV_DISPLAY_FROM_WINDOW(window) \ (Display *) xv_get(xv_get(xv_get(window, XV_SCREEN), \ SCREEN_SERVER), XV_DISPLAY) /* * Window-fitting macros */ #define window_fit(win) \ (void)window_set(win, WIN_FIT_HEIGHT, 0, WIN_FIT_WIDTH, 0, 0) #define window_fit_height(win) \ (void)window_set(win, WIN_FIT_HEIGHT, 0, 0) #define window_fit_width(win) \ (void)window_set(win, WIN_FIT_WIDTH, 0, 0) /* * PRIVATE #defines */ /* * Attribute macros */ #define WIN_ATTR(type, ordinal) ATTR(ATTR_PKG_WIN, type, ordinal) #define WIN_ATTR_LIST(ltype, type, ordinal) \ WIN_ATTR(ATTR_LIST_INLINE((ltype), (type)), (ordinal)) /* * Fake types -- This should be resolved someday */ #define ATTR_IMASK ATTR_OPAQUE /* * WIN_RECT_INFO flags for package implementors */ #define WIN_X_SET 0x1 #define WIN_Y_SET 0x2 #define WIN_WIDTH_SET 0x4 #define WIN_HEIGHT_SET 0x8 /* * PUBLIC #defines * For SunView 1 Compatibility Only */ #define WIN_X XV_X #define WIN_Y XV_Y #define WIN_WIDTH XV_WIDTH #define WIN_HEIGHT XV_HEIGHT #define WIN_FONT XV_FONT #define WIN_DEVICE_NAME XV_XNAME #define WIN_DEVICE_NUMBER XV_DEVICE_NUMBER #define WIN_TOP_MARGIN XV_TOP_MARGIN #define WIN_BOTTOM_MARGIN XV_BOTTOM_MARGIN #define WIN_LEFT_MARGIN XV_LEFT_MARGIN #define WIN_RIGHT_MARGIN XV_RIGHT_MARGIN #define WIN_NAME XV_NAME #define WIN_OWNER XV_OWNER #define WIN_FD XV_SELF #define WIN_PIXWIN XV_SELF #define WIN_RECT XV_RECT #define WINDOW_TYPE ATTR_PKG_WIN #define WIN_CONSUME_KBD_EVENT WIN_CONSUME_EVENT #define WIN_IGNORE_KBD_EVENT WIN_IGNORE_EVENT #define WIN_CONSUME_KBD_EVENTS WIN_CONSUME_EVENTS #define WIN_IGNORE_KBD_EVENTS WIN_IGNORE_EVENTS #define WIN_PICK_INPUT_MASK WIN_INPUT_MASK #define WIN_CONSUME_PICK_EVENT WIN_CONSUME_EVENT #define WIN_IGNORE_PICK_EVENT WIN_IGNORE_EVENT #define WIN_CONSUME_PICK_EVENTS WIN_CONSUME_EVENTS #define WIN_IGNORE_PICK_EVENTS WIN_IGNORE_EVENTS #define WIN_NOTIFY_EVENT_PROC WIN_NOTIFY_SAFE_EVENT_PROC #ifdef OW_I18N #define WIN_IM_PREEDIT_START WIN_IC_PREEDIT_START #define WIN_IM_PREEDIT_DRAW WIN_IC_PREEDIT_DRAW #define WIN_IM_PREEDIT_CARET WIN_IC_PREEDIT_CARET #define WIN_IM_PREEDIT_DONE WIN_IC_PREEDIT_DONE #define WIN_IM_STATUS_START WIN_IC_STATUS_START #define WIN_IM_STATUS_DRAW WIN_IC_STATUS_DRAW #define WIN_IM_STATUS_DONE WIN_IC_STATUS_DONE #define WIN_IM_LUC_START WIN_IC_LUC_START #define WIN_IM_LUC_DRAW WIN_IC_LUC_DRAW #define WIN_IM_LUC_DONE WIN_IC_LUC_DONE #define WIN_IM_LUC_PROCESS WIN_IC_LUC_PROCESS #endif /* OW_I18N */ /* *********************************************************************** * Typedefs, Enumerations, and Structures *********************************************************************** */ typedef Xv_opaque Xv_Window; typedef Xv_opaque Xv_window; typedef Attr_pkg Window_type; typedef enum { /* * Public Attributes */ WIN_ALARM = WIN_ATTR(ATTR_NO_VALUE, 1), /* --S */ WIN_BACK = WIN_ATTR(ATTR_NO_VALUE, 2), /* -S- */ WIN_BACKGROUND_PIXMAP = WIN_ATTR(ATTR_OPAQUE, 3), WIN_BELOW = WIN_ATTR(ATTR_OPAQUE, 4), /* --S */ WIN_CLIENT_DATA = WIN_ATTR(ATTR_OPAQUE, 8), WIN_COLUMNS = WIN_ATTR(ATTR_INT, 12), WIN_COLUMN_GAP = WIN_ATTR(ATTR_INT, 16), WIN_COLUMN_WIDTH = WIN_ATTR(ATTR_INT, 20), #ifdef OW_I18N WIN_IC_PREEDIT_START = WIN_ATTR(ATTR_INT_PAIR, 21), /* C-S */ WIN_IC_PREEDIT_DRAW = WIN_ATTR(ATTR_INT_PAIR, 22), /* C-S */ WIN_IC_PREEDIT_DONE = WIN_ATTR(ATTR_INT_PAIR, 23), /* C-S */ #endif /* OW_I18N */ WIN_CONSUME_EVENT = WIN_ATTR(ATTR_ENUM, 24), /* --S */ #ifdef OW_I18N WIN_IC_STATUS_START = WIN_ATTR(ATTR_INT_PAIR, 25), /* C-S */ WIN_IC_STATUS_DRAW = WIN_ATTR(ATTR_INT_PAIR, 26), /* C-S */ WIN_IC_STATUS_DONE = WIN_ATTR(ATTR_INT_PAIR, 27), /* C-S */ #endif /* OW_I18N */ WIN_CONSUME_EVENTS = WIN_ATTR_LIST(ATTR_NULL, ATTR_ENUM, 28), /* --S */ #ifdef OW_I18N WIN_IC_LUC_START = WIN_ATTR(ATTR_INT_PAIR, 29), /* C-S */ WIN_IC_LUC_DRAW = WIN_ATTR(ATTR_INT_PAIR, 30), /* C-S */ WIN_IC_LUC_DONE = WIN_ATTR(ATTR_INT_PAIR, 31), /* C-S */ #endif /* OW_I18N */ WIN_CURSOR = WIN_ATTR(ATTR_CURSOR_PTR, 32), #ifdef OW_I18N WIN_IC_LUC_PROCESS = WIN_ATTR(ATTR_INT_PAIR, 33), /* C-S */ WIN_IC_PREEDIT_CARET = WIN_ATTR(ATTR_INT_PAIR, 34), /* C-S */ #endif /* OW_I18N */ WIN_DEPTH = WIN_ATTR(ATTR_INT, 102), /* CG- */ /* WIN_DEPTH_V2 is needed to keep backwards compatibility with * V2. WIN_DEPTH was mistakenly defined as and ATTR_NO_VALUE, * which meant that despite the documentation you couldn't * use it in the creation of a window. Thus we created * a new WIN_DEPTH that is of the correct type, and moved * the old WIN_DEPTH to WIN_DEPTH_V2. This can be removed * when it has sufficiently aged. */ WIN_DEPTH_V2 = WIN_ATTR(ATTR_NO_VALUE, 36), /* -G- */ WIN_DESIRED_HEIGHT = WIN_ATTR(ATTR_INT, 40), WIN_DESIRED_WIDTH = WIN_ATTR(ATTR_INT, 44), WIN_ERROR_MSG = WIN_ATTR(ATTR_STRING, 48), #ifdef OW_I18N WIN_ERROR_MSG_WCS = WIN_ATTR(ATTR_WSTRING, 49), #endif /* OW_I18N */ WIN_EVENT_PROC = WIN_ATTR(ATTR_FUNCTION_PTR, 52), WIN_FIT_HEIGHT = WIN_ATTR(ATTR_Y, 60), WIN_FIT_WIDTH = WIN_ATTR(ATTR_X, 64), WIN_FRONT = WIN_ATTR(ATTR_NO_VALUE, 66), /* -S- */ WIN_GLYPH_FONT = WIN_ATTR(ATTR_OPAQUE, 67), WIN_GRAB_ALL_INPUT = WIN_ATTR(ATTR_BOOLEAN, 68), /* --S */ WIN_HORIZONTAL_SCROLLBAR= WIN_ATTR(ATTR_OPAQUE, 72), #ifdef OW_I18N #ifdef FULL_R5 WIN_X_IM_STYLE_MASK = WIN_ATTR(ATTR_LONG, 73), /* CG- */ #endif /* FULL_R5 */ WIN_IC = WIN_ATTR(ATTR_OPAQUE, 74), /* -GS */ WIN_USE_IM = WIN_ATTR(ATTR_BOOLEAN, 75), /* CG- */ #endif /* OW_I18N */ WIN_IGNORE_EVENT = WIN_ATTR(ATTR_ENUM, 76), /* --S */ WIN_IGNORE_EVENTS = WIN_ATTR_LIST(ATTR_NULL, ATTR_ENUM, 80), /* --S */ #ifdef OW_I18N WIN_IC_COMMIT_STRING = WIN_ATTR(ATTR_STRING, 81), /* -G- */ WIN_IC_COMMIT_STRING_WCS= WIN_ATTR(ATTR_WSTRING, 82), /* -G- */ WIN_IC_CONVERSION = WIN_ATTR(ATTR_BOOLEAN, 83), /* -GS */ #endif /* OW_I18N */ WIN_INPUT_MASK = WIN_ATTR(ATTR_IMASK, 84), #ifdef OW_I18N WIN_IC_RESET = WIN_ATTR(ATTR_NO_VALUE, 85), /* --S */ WIN_IC_ACTIVE = WIN_ATTR(ATTR_BOOLEAN, 86), /* CGS */ #endif /* OW_I18N */ WIN_IS_CLIENT_PANE = WIN_ATTR(ATTR_NO_VALUE, 88), WIN_MENU = WIN_ATTR(ATTR_OPAQUE, 92), WIN_MOUSE_XY = WIN_ATTR(ATTR_XY, 96), /* -GS */ WIN_PARENT = WIN_ATTR(ATTR_OPAQUE, 100), /* -GS */ WIN_PERCENT_HEIGHT = WIN_ATTR(ATTR_INT, 104), WIN_PERCENT_WIDTH = WIN_ATTR(ATTR_INT, 108), WIN_RIGHT_OF = WIN_ATTR(ATTR_OPAQUE, 116), /* --S */ WIN_ROWS = WIN_ATTR(ATTR_INT, 120), WIN_ROW_GAP = WIN_ATTR(ATTR_INT, 124), WIN_ROW_HEIGHT = WIN_ATTR(ATTR_INT, 128), WIN_SCREEN_RECT = WIN_ATTR(ATTR_NO_VALUE, 132), /* -G- */ WIN_SET_FOCUS = WIN_ATTR(ATTR_NO_VALUE, 228), /* --S */ WIN_VERTICAL_SCROLLBAR = WIN_ATTR(ATTR_OPAQUE, 140), WIN_MESSAGE_TYPE = WIN_ATTR(ATTR_OPAQUE, 141), WIN_MESSAGE_FORMAT = WIN_ATTR(ATTR_INT, 142), WIN_MESSAGE_DATA = WIN_ATTR(ATTR_OPAQUE, 143), WIN_BORDER = WIN_ATTR(ATTR_BOOLEAN, 148), /* * Private Attributes */ WIN_ALARM_DATA = WIN_ATTR(ATTR_OPAQUE, 144), /* -G- */ WIN_FINDINTERSECT = WIN_ATTR(ATTR_XY, 152), /* -G- */ WIN_FRAME = WIN_ATTR(ATTR_OPAQUE, 156), WIN_INPUT_ONLY = WIN_ATTR(ATTR_NO_VALUE, 160), WIN_IS_IN_FULLSCREEN_MODE = WIN_ATTR(ATTR_INT, 164), WIN_IS_ROOT = WIN_ATTR(ATTR_NO_VALUE, 168), WIN_KBD_FOCUS = WIN_ATTR(ATTR_BOOLEAN, 172), WIN_LAYOUT_PROC = WIN_ATTR(ATTR_FUNCTION_PTR, 176), WIN_LOCKDATA = WIN_ATTR(ATTR_NO_VALUE, 180), /* --S */ WIN_MAP = WIN_ATTR(ATTR_BOOLEAN, 184), WIN_NOTIFY_SAFE_EVENT_PROC = WIN_ATTR(ATTR_FUNCTION_PTR, 192), WIN_NOTIFY_IMMEDIATE_EVENT_PROC = WIN_ATTR(ATTR_FUNCTION_PTR, 193), WIN_OUTER_RECT = WIN_ATTR(ATTR_RECT_PTR, 200), WIN_RECT_INFO = WIN_ATTR(ATTR_INT, 204), WIN_RETAINED = WIN_ATTR(ATTR_BOOLEAN, 208), WIN_SELECTION_WINDOW = WIN_ATTR(ATTR_NO_VALUE, 212), /* --S */ WIN_TOP_LEVEL = WIN_ATTR(ATTR_BOOLEAN, 216), WIN_TOP_LEVEL_NO_DECOR = WIN_ATTR(ATTR_BOOLEAN, 220), WIN_TRANSPARENT = WIN_ATTR(ATTR_NO_VALUE, 223), /* C-- */ WIN_SAVE_UNDER = WIN_ATTR(ATTR_BOOLEAN, 226), WIN_REMOVE_CARET = WIN_ATTR(ATTR_NO_VALUE, 227), /* --S */ WIN_X_PAINT_WINDOW = WIN_ATTR(ATTR_BOOLEAN, 229), WIN_INHERIT_COLORS = WIN_ATTR(ATTR_BOOLEAN, 230), WIN_CMS = WIN_ATTR(ATTR_OPAQUE, 231), WIN_DYNAMIC_VISUAL = WIN_ATTR(ATTR_BOOLEAN, 232), WIN_CMS_CHANGE = WIN_ATTR(ATTR_NO_VALUE, 241), WIN_COLOR_INFO = WIN_ATTR(ATTR_OPAQUE, 242), WIN_CMD_LINE = WIN_ATTR(ATTR_STRING, 244), WIN_NO_CLIPPING = WIN_ATTR(ATTR_BOOLEAN, 245), WIN_ADD_DROP_INTEREST = WIN_ATTR(ATTR_OPAQUE, 246), WIN_DELETE_DROP_INTEREST = WIN_ATTR(ATTR_OPAQUE, 247), WIN_ADD_DROP_ITEM = WIN_ATTR(ATTR_OPAQUE, 252), WIN_DELETE_DROP_ITEM = WIN_ATTR(ATTR_LONG, 253), WIN_UNGRAB_SELECT = WIN_ATTR(ATTR_NO_VALUE, 255), WIN_COLLAPSE_MOTION_EVENTS = WIN_ATTR(ATTR_OPAQUE, 201), /* * Public Attributes */ WIN_X_CLIP_RECTS = WIN_ATTR(ATTR_OPAQUE, 233), /* -G- */ WIN_CMS_DATA = WIN_ATTR(ATTR_OPAQUE, 235), WIN_CMS_NAME = WIN_ATTR(ATTR_STRING, 236), WIN_BIT_GRAVITY = WIN_ATTR(ATTR_INT, 237), WIN_WINDOW_GRAVITY = WIN_ATTR(ATTR_INT, 238), WIN_FOREGROUND_COLOR = WIN_ATTR(ATTR_INT, 239), WIN_BACKGROUND_COLOR = WIN_ATTR(ATTR_INT, 240), WIN_X_COLOR_INDICES = WIN_ATTR(ATTR_OPAQUE, 243), WIN_CONSUME_X_EVENT_MASK = WIN_ATTR(ATTR_LONG, 248), WIN_IGNORE_X_EVENT_MASK = WIN_ATTR(ATTR_LONG, 249), WIN_X_EVENT_MASK = WIN_ATTR(ATTR_LONG, 250), WIN_COLLAPSE_EXPOSURES = WIN_ATTR(ATTR_BOOLEAN, 251), WIN_SOFT_FNKEY_LABELS = WIN_ATTR(ATTR_STRING, 203), /* * Public Attributes * For SunView 1 Compatibility */ WIN_TYPE = WIN_ATTR(ATTR_ENUM, 224) } Window_attribute; #define WIN_SHOW XV_SHOW typedef enum { WIN_NULL_VALUE = 0, WIN_NO_EVENTS, WIN_UP_EVENTS, WIN_ASCII_EVENTS, WIN_UP_ASCII_EVENTS, WIN_MOUSE_BUTTONS, WIN_IN_TRANSIT_EVENTS, WIN_LEFT_KEYS, WIN_TOP_KEYS, WIN_RIGHT_KEYS, WIN_META_EVENTS, WIN_UP_META_EVENTS, /* * semantic event classes */ WIN_SUNVIEW_FUNCTION_KEYS, WIN_EDIT_KEYS, WIN_MOTION_KEYS, WIN_TEXT_KEYS } Window_input_event; typedef enum { WIN_CREATE, WIN_INSERT, WIN_REMOVE, WIN_DESTROY, WIN_GET_RIGHT_OF, WIN_GET_BELOW, WIN_ADJUST_RECT, WIN_GET_X, WIN_GET_Y, WIN_GET_WIDTH, WIN_GET_HEIGHT, WIN_GET_RECT, WIN_LAYOUT, WIN_INSTALL } Window_layout_op; typedef struct { Xv_drawable_struct parent_data; Xv_opaque private_data; } Xv_window_struct; typedef struct window_rescale_rect_obj { Rect old_rect; Rect new_rect; int width_change, height_change,x_change,y_change; int adjusted; Xv_Window sw; /* relationships */ } Window_rescale_rect_obj; /* *********************************************************************** * Globals *********************************************************************** */ extern Xv_pkg xv_window_pkg; /* * PUBLIC functions */ EXTERN_FUNCTION (int window_done, (Xv_Window window)); EXTERN_FUNCTION (void xv_main_loop, (Xv_Window window)); EXTERN_FUNCTION (int window_read_event, (Xv_Window window, Event *event)); EXTERN_FUNCTION (void window_bell, (Xv_Window window)); EXTERN_FUNCTION (Xv_public int xv_rows, (Xv_Window window, int rows)); EXTERN_FUNCTION (Xv_public int xv_row, (Xv_Window window, int row)); EXTERN_FUNCTION (Xv_public int xv_cols, (Xv_Window window, int cols)); EXTERN_FUNCTION (Xv_public int xv_col, (Xv_Window window, int col)); EXTERN_FUNCTION (Xv_public int xv_send_message, (Xv_window window, Xv_opaque addresse, char *msg_type, int format, Xv_opaque *data, int len)); /* * PRIVATE functions */ EXTERN_FUNCTION (void window_set_cache_rect, (Xv_Window window, Rect *rect)); /* * The Xv_opaque type for the rect object list is defined in a private * include file windowimpl.h */ EXTERN_FUNCTION (Window_rescale_rect_obj *window_create_rect_obj_list, (int num_elems)); EXTERN_FUNCTION (void window_destroy_rect_obj_list, (Window_rescale_rect_obj *rect_obj_list)); EXTERN_FUNCTION (void window_add_to_rect_list, (Window_rescale_rect_obj *rect_obj_list, Xv_Window window, Rect *rect, int i)); EXTERN_FUNCTION (int window_rect_equal_ith_obj, (Window_rescale_rect_obj *rect_obj_list, Rect *rect, int i)); EXTERN_FUNCTION (void window_set_client_message, ( Xv_Window window, XClientMessageEvent *msg)); EXTERN_FUNCTION (Xv_opaque * xv_get_selected_windows, (Xv_object window)); EXTERN_FUNCTION (XID win_pointer_under, (Xv_object window, int x, int y)); EXTERN_FUNCTION (int win_translate_xy, (Xv_object src, Xv_object dst, int src_x, int src_y, int *dst_x, int *dst_y)); /* * PUBLIC functions * For SunView 1 Compatibility */ EXTERN_FUNCTION (Xv_Window window_create, (Xv_Window window, Xv_pkg *pkg, DOTDOTDOT)); EXTERN_FUNCTION (Xv_opaque window_get, (Xv_Window window, Window_attribute attr, DOTDOTDOT)); EXTERN_FUNCTION (int window_set, (Xv_Window window, DOTDOTDOT)); EXTERN_FUNCTION (int window_destroy, (Xv_Window window)); /* * PRIVATE functions * For SunView 1 Compatibility */ EXTERN_FUNCTION (void window_rc_units_to_pixels, (Xv_Window win, Attr_avlist attr)); /* * Some wmgr stuff that needs to be here for the split libs. * This should be moved out as soon as all the pushpin stuff in moved * out of the intrinsic layer. [csk 3/23/89] */ /* value for pushpin_initial_state */ #ifndef WMPushpinIsOut #define WMPushpinIsOut 0 #endif /* WMPushpinIsOut */ #ifndef WMPushpinIsIn #define WMPushpinIsIn 1 #endif /* WMPushpinIsIn */ #endif /* ~xview_window_DEFINED */