/* X Graphics Wrapper */ #ifndef OSW_X_H #define OSW_X_H #include /* Shared memory */ #ifdef USE_XSHM # include # include #endif /* USE_XSHM */ /* X */ #include #include #include #include /* Xext (X Extensions) */ #include /* MIT Shared Memory Extension */ #ifdef USE_XSHM # include #endif /* Catch any undefined stuff (mostly for Solaris) */ #include "os.h" /* * PI: */ #ifndef PI # define PI 3.141592654 #endif /* * Key Values: * * The rest are in oswkeydefs.h, which are lengthy and should be * #included only on an as needed basis. */ #define OSW_KEY_None 0x0000 /* * Key Modifier States: * * These should match the GUI's key states in order for proper * checking of event key and button states. */ #define OSW_KEY_STATE_ALT Mod1Mask #define OSW_KEY_STATE_CTRL ControlMask #define OSW_KEY_STATE_SHIFT ShiftMask #define OSW_KEY_STATE_CAPS_LOCK LockMask #define OSW_KEY_STATE_NUM_LOCK Mod2Mask #define OSW_KEY_STATE_SCROLL_LOCK Mod5Mask /* * Event mask presets: * * Default values of masks indicating the events to be * recieved in calls to OSWSetWindowInput(). */ #define OSW_EVENTMASK_TOPLEVEL (StructureNotifyMask | ExposureMask | \ KeyPressMask | KeyReleaseMask | \ ButtonPressMask | ButtonReleaseMask | \ FocusChangeMask | VisibilityChangeMask) #define OSW_EVENTMASK_STD (ExposureMask | \ KeyPressMask | KeyReleaseMask | \ ButtonPressMask | ButtonReleaseMask) #define OSW_EVENTMASK_BUTTON (ExposureMask | \ ButtonPressMask | ButtonReleaseMask) #define OSW_EVENTMASK_MOVEABLE (ExposureMask | \ ButtonPressMask | ButtonReleaseMask | \ PointerMotionMask) /* * Window Frame Styles: * * For use in OSWSetWindowWMProperties(). */ #define OSW_WINDOW_FRAME_STANDARD 0 /* All decorations */ #define OSW_WINDOW_FRAME_NONE 1 /* Menus, popups, hints */ #define OSW_WINDOW_FRAME_DIALOG 2 /* Dialogs */ #define OSW_WINDOW_FRAME_DIALOG_NOTITLE 3 /* Dialog, no title */ #define OSW_WINDOW_FRAME_NO_CLOSE 4 /* Dosen't always work */ /* * DND Action Flags: */ #define OSW_DND_ACTION_MOVE (1 << 0) #define OSW_DND_ACTION_COPY (1 << 1) #define OSW_DND_ACTION_LINK (1 << 2) /* * Data Types */ typedef struct _font_t font_t; typedef struct _pixmap_attr_t pixmap_attr_t; typedef struct _image_t image_t; typedef struct _shared_image_t shared_image_t; /* * Atom: */ #define atom_t Atom /* * Bitmap: * * This is really a 1 bit depth Pixmap. */ #define bitmap_t Pixmap /* * Boolean: */ #define bool_t Bool /* * Colormap: */ #define colormap_t Colormap /* * Cursor: */ #define cursor_t Cursor /* * Cursor ID: */ #define cursor_id_t unsigned int /* * Depth: */ #define depth_t int /* * Display: */ #define display_t Display /* * DND Action Flags: */ #define dnd_action_flags_t unsigned int /* * Drawable: * * Can be used to represent pixmap_t or win_t. */ #define drawable_t Drawable /* * Event types: */ #define event_t XEvent #define event_button_t XButtonEvent #define event_client_message_t XClientMessageEvent #define event_configure_t XConfigureEvent #define event_expose_t XExposeEvent #define event_focus_t XFocusChangeEvent #define event_key_t XKeyEvent #define event_motion_t XMotionEvent #define event_crossing_t XCrossingEvent #define event_visibility_t XVisibilityEvent /* * Event Mask: */ #define event_mask_t long /* * Event Type: */ #define event_type_t int /* * Graphics Context: */ #define gc_t GC /* * Graphics Context Values: */ #define gc_val_t XGCValues /* * Key code (actual hardware code) type: */ #define keycode_t unsigned int /* * Key modifier states type: */ #define key_state_t unsigned long /* * Key symbol and key value (portable key value): */ #define keysym_t KeySym #define keyval_t KeySym /* * Pixel type: */ #define pixel_t unsigned long /* * Pixmap type: */ #define pixmap_t Pixmap /* * Rectangle: */ #define rectangle_t XRectangle /* * Screen number type: */ #define screen_num_t int /* * Screen pointer type: */ #define screen_ptr_t Screen /* * Shared image type */ /* #define shared_image_t shared_image_t */ /* * Size hints structure type: */ #define sizehints_t XSizeHints /* * Visiblity code type: */ #define visibility_t int /* * Visual type: */ #define visual_t Visual /* * Visual info type: */ #define visual_info_t XVisualInfo /* * Visual info mask type: */ #define visual_info_mask_t long /* * Visual ID code type: */ #define visual_id_t VisualID /* * Window type: */ #define win_t Window /* * Window Attributes type: */ #define win_attr_t XWindowAttributes /* * Font: */ struct _font_t { int max_lbearing, max_rbearing, max_cwidth, ascent, descent; /* GUI native resources (private) */ XFontStruct *xfont; }; /* * Pixmap Attributes: */ struct _pixmap_attr_t { win_t root_win; unsigned int width, height; unsigned int border_width; depth_t depth; /* Operative depth */ }; /* * Image: */ struct _image_t { int ref_count; int byte_order; /* LSBFirst or MSBFirst */ int xoffset; /* Num of pixels offset in X direction */ int format; /* XYBitmap, XYPixmap, or ZPixmap */ u_int8_t *data; /* Image data */ int bits_per_pixel; /* Bits per pixel (for ZPixmap) */ int bitmap_pad; /* 8, 16, or 32 */ int bytes_per_pixel; /* 1, 2, 3, or 4 */ int bytes_per_line; /* Total bytes per line */ unsigned int width, /* Size in pixels */ height; unsigned int depth; /* Bit depth */ unsigned long red_mask, /* Bits in Z arrangment */ green_mask, blue_mask; /* GUI native resources (private) */ XImage *ximage; }; /* * Shared Image: */ struct _shared_image_t { int ref_count; bool_t in_progress; /* True if currently being `put' */ int byte_order; /* LSBFirst or MSBFirst */ int xoffset; /* Num of pixels offset in X direction */ int format; /* XYBitmap, XYPixmap, or ZPixmap */ u_int8_t *data; /* Shared image data */ int bits_per_pixel; /* Bits per pixel (for ZPixmap) */ int bitmap_pad; /* 8, 16, or 32 */ int bytes_per_pixel; /* 1, 2, 3, or 4 */ int bytes_per_line; /* Total bytes per line */ unsigned int width, /* Size in pixels */ height; unsigned int depth; /* Bit depth */ unsigned long red_mask, /* Bits in Z arrangment */ green_mask, blue_mask; /* GUI native resources (private) */ XImage *ximage; /* SHM (private) */ #ifdef USE_XSHM XShmSegmentInfo shminfo; #else int shminfo; #endif }; #ifdef OSW_USE_NATIVE_EVENT_TYPE /* * Native event type, under construction, do NOT compile in! */ typedef struct { int type; unsigned long serial; /* # of last request processed by server */ bool_t send_event; /* true if this came from a SendEvent */ display_t *display; /* Display the event was read from */ win_t window; } event_any_t typedef struct { int type; /* KeyPress or KeyRelease */ unsigned long serial; /* # of last request processed by server */ bool_t send_event; /* True if this came from a SendEvent request */ display_t *display; /* Display the event was read from */ win_t window; /* Event window it is reported relative to */ win_t root; /* Root window that the event occurred on */ win_t subwindow; /* child window */ Time time; /* In milliseconds */ int x, y; /* Pointer x, y coordinates in event window */ int x_root, y_root; /* Coordinates relative to root */ unsigned int state; /* Key or button mask */ unsigned int keycode; /* Key code of the key in question */ bool_t same_screen; /* Same screen flag */ } event_key_t; typedef struct { int type; /* ButtonPress or ButtonRelease */ unsigned long serial; /* # of last request processed by server */ bool_t send_event; /* true if this came from a SendEvent request */ display_t *display; /* Display the event was read from */ win_t window; /* ``event'' window it is reported relative to */ win_t root; /* root window that the event occurred on */ win_t subwindow; /* child window */ Time time; /* In milliseconds */ int x, y; /* pointer x, y coordinates in event window */ int x_root, y_root; /* coordinates relative to root */ unsigned int state; /* key or button mask */ unsigned int button; /* detail */ bool_t same_screen; /* same screen flag */ } button_event_t; typedef struct { event_any_t any; event_key_t key; button_event_t button; } event_t; #endif typedef struct _osw_gui_struct osw_gui_struct; /* * GUI Core: */ struct _osw_gui_struct { /* Default pre allocated resources by OSW (read only) */ font_t *std_font; /* We loaded */ unsigned int display_width, display_height; pixel_t black_pix, /* Shared */ white_pix; win_t root_win; /* Desktop window */ win_t *toplevel; /* List of toplevel windows */ int ntoplevels; unsigned long red_mask, /* Pixel color masks */ green_mask, blue_mask; cursor_t std_cursor, drag_unaccepted_cursor, drag_move_cursor, drag_copy_cursor, drag_link_cursor; /* Currently set values (read only) */ font_t *current_font; pixel_t current_fg_pix, current_bg_pix; /* Key modifier states */ key_state_t key_state; /* These are default values set from the command line arguments */ font_t *def_font; pixel_t def_bg_pix, def_fg_pix; int def_toplevel_x, def_toplevel_y; unsigned int def_toplevel_width, def_toplevel_height; bool_t def_geometry_set; bool_t def_use_shm; bool_t def_sync_shm; display_t *display; int last_error; /* Error result from last GUI * function call (0 for none or * success) */ screen_num_t scr_num; screen_ptr_t *scr_ptr; visual_t *visual; visual_id_t visual_id; depth_t depth, /* Operative bit depth */ bits_per_pixel; /* Actual bits per pixel */ int bytes_per_pixel;/* Actual bytes per pixel */ bool_t we_created_colormap; colormap_t colormap; gc_t gc; gc_val_t gc_values; #ifdef USE_XSHM unsigned long shm_completion_event_code; /* Event code + base */ #endif /* USE_XSHM */ /* Block Input Level */ int block_input_level; /* 0 for not block input */ /* Grab Pointer Window */ win_t grab_pointer_w; /* Modal */ win_t modal_w; /* Window that is set * modal, may be None */ /* Selection */ win_t selection_owner_w; void *selection_data; int selection_len; /* In bytes */ atom_t selection_target; /* Selection type */ /* DND */ bool_t dnd_in_progress; win_t dnd_src_w, dnd_tar_w; atom_t dnd_src_target; /* Source data type */ u_int8_t *dnd_data; int dnd_data_len; atom_t dnd_def_action, /* Default action when no * modifier keys are held * down */ dnd_tar_action; /* Target window's accepted * action or None if not * accepted */ dnd_action_flags_t dnd_action_flags; win_t dnd_icon_w; int dnd_last_x, dnd_last_y; }; extern osw_gui_struct osw_gui[1]; /* * Property atoms: * * Unique to X Window Systems. */ typedef struct { atom_t _motif_wm_all_clients, _motif_wm_hints, _motif_wm_info, _motif_wm_menu, _motif_wm_messages, _motif_wm_offset, _motif_wm_query, /* Standard window manager */ wm_delete_window, wm_protocols, wm_save_yourself, wm_state, wm_take_focus, /* Selection */ selection_property, selection_primary, target_string, /* DND */ dnd_action_ask, dnd_action_copy, dnd_action_description, dnd_action_link, dnd_action_move, dnd_action_private, dnd_actions_list, dnd_aware, dnd_drop, dnd_enter, dnd_finished, dnd_leave, dnd_position, dnd_proxy, dnd_selection, dnd_status, dnd_type_list; } osw_atom_struct; extern osw_atom_struct osw_atom; /* * Is display connected macro: */ #define IDC() (osw_gui[0].display != NULL) /* ****************************************************************** * * Functions * */ /* Time */ extern time_t OSWTimeMS(void); /* Initialize & Shutdown*/ extern int OSWGUIConnect(int argc, char **argv); extern void OSWGUIDisconnect(void); /* Key & Keyboard */ extern keycode_t OSWGetKeyCodeFromKeyVal(keyval_t keyval); extern keyval_t OSWGetKeyValFromKeyCode(keycode_t keycode, key_state_t key_state); extern char OSWGetASCIIFromKeyCode( keycode_t keycode, key_state_t key_state ); extern const char *OSWGetKeyCodeName(keycode_t keycode); extern const char *OSWGetKeyValName(keyval_t keyval); extern bool_t OSWIsModifierKey(keycode_t keycode); /* Keyboard Autorepeat */ extern void OSWKBAutoRepeatOff(void); extern void OSWKBAutoRepeatOn(void); extern bool_t OSWGetKBAutoRepeatState(void); /* Focus */ extern void OSWSetInputFocus(win_t w, int revert, time_t t); extern void OSWGrabFocusTime(win_t w, time_t t); extern void OSWGrabFocus(win_t w); /* GUI systems and runtime */ extern void OSWFlush(void); extern void OSWSync(bool_t discard); /* Pointer */ extern void OSWGetPointerCoords( win_t w, int *root_x, int *root_y, int *wx, int *wy ); extern int OSWGrabPointer( win_t grab_w, bool_t events_rel_grab_w, /* Relative to grab_w if True */ event_mask_t eventmask, int pointer_mode, /* GrabModeSync or GrabModeAsync */ int keyboard_mode, /* GrabModeSync or GrabModeAsync */ win_t confine_w, /* Can be None */ cursor_t cursor /* Can be None */ ); extern int OSWGrabPointerTime( win_t grab_w, bool_t events_rel_grab_w, /* Relative to grab_w if True */ event_mask_t eventmask, int pointer_mode, /* GrabModeSync or GrabModeAsync */ int keyboard_mode, /* GrabModeSync or GrabModeAsync */ win_t confine_w, /* Can be None */ cursor_t cursor, /* Can be None */ time_t t ); extern void OSWUngrabPointer(void); extern void OSWUngrabPointerTime(time_t t); extern bool_t OSWIsPointerGrabbed(void); /* Atoms */ extern atom_t OSWGetAtom(const char *name); /* Selection */ extern char *OSWDDEGetString(win_t w); extern void OSWDDESetString(win_t w, const char *s); extern void *OSWDDEGetData(win_t w, atom_t target, int *len_rtn); extern void OSWDDESetData(win_t w, atom_t target, const void *data, int len); /* DND */ extern void OSWDNDSetWindowTarget(win_t w); extern bool_t OSWDNDQueryPointer( win_t *w_rtn, int *x_rtn, int *y_rtn, int *root_x_rtn, int *root_y_rtn ); extern atom_t OSWDNDQueryAction( win_t w, atom_t def_action, dnd_action_flags_t action_flags ); extern atom_t *OSWDNDGetActionsList(win_t w, int *nactions); extern void OSWDNDSendEnter( win_t w, win_t src_w, const atom_t *type_list, int ntypes ); extern void OSWDNDSendPosition( win_t w, win_t src_w, atom_t action, int root_x, int root_y, time_t t ); extern void OSWDNDSendStatus( win_t w, win_t tar_w, atom_t action, const rectangle_t *rect ); extern void OSWDNDSendLeave(win_t w, win_t src_w); extern void OSWDNDSendDrop(win_t w, win_t src_w, time_t t); extern void OSWDNDSendFinished( win_t w, win_t tar_w, bool_t drop_processed_and_successful, atom_t action ); extern void OSWDNDBegin( win_t src_w, atom_t target, /* Source data type */ const u_int8_t *data, int len, /* Source data */ atom_t def_action, dnd_action_flags_t action_flags, int x, int y, cursor_t cursor, win_t icon_w, time_t t ); extern void OSWDNDSetCursor(cursor_t cursor, time_t t); extern void OSWDNDSetIcon(win_t icon_w, int x, int y, time_t t); extern u_int8_t *OSWDNDGetData( win_t tar_w, /* Our target window */ atom_t target, /* Source data type */ int *len_rtn, time_t t ); extern void OSWDNDIconAnimateReturn( win_t icon_w, int cur_x, int cur_y, int orig_x, int orig_y ); extern void OSWDNDEnd(time_t t); /* Visual */ extern visual_t *OSWGetVisualByCriteria( visual_info_mask_t vinfo_mask, visual_info_t criteria_vinfo ); extern visual_t *OSWGetVisualByID(visual_id_t vid); /* Fonts */ extern int OSWLoadFont(font_t **font_rtn, const char *name); extern font_t *OSWQueryCurrentFont(void); extern bool_t OSWGetCharBounds( font_t *font, char c, int *lbearing, int *rbearing, int *width, int *ascent, int *descent ); extern bool_t OSWGetTextBounds( font_t *font, const char *text, int text_len, int *lbearing, int *rbearing, int *width, int *ascent, int *descent ); extern void OSWSetFont(font_t *font); extern void OSWUnloadFont(font_t **font); /* Pixels (Colors) */ extern int OSWLoadPixelRGB( pixel_t *pix_rtn, u_int8_t r, u_int8_t g, u_int8_t b ); extern int OSWLoadPixelHSL( pixel_t *pix_rtn, u_int8_t h, u_int8_t s, u_int8_t l ); extern int OSWLoadPixelCLSP(pixel_t *pix_rtn, const char *clsp); extern void OSWSetForeground(pixel_t p); #define OSWSetFgPix(_p_) OSWSetForeground(_p_) extern void OSWDestroyPixel(pixel_t *pix_ptr); /* Pointer Cursors */ extern cursor_t OSWCursorOpenID(cursor_id_t id); extern cursor_t OSWCursorOpenXPMFile( const char *path, int hot_x, int hot_y ); extern cursor_t OSWCursorOpenXPMData( char **xpmdata, int hot_x, int hot_y ); extern void OSWSetWindowCursor(win_t w, cursor_t cur); extern void OSWUnsetWindowCursor(win_t w); extern void OSWDestroyCursor(cursor_t *cursor); /* Events */ extern int OSWEventsPending(void); extern void OSWWaitNextEvent(event_t *event); extern void OSWWaitPeakEvent(event_t *event); extern bool_t OSWCheckMaskEvent(event_mask_t eventmask, event_t *event); extern void OSWWaitWindowEvent( win_t w, event_mask_t event_mask, event_t *event ); extern bool_t OSWCheckWindowEvent( win_t w, event_mask_t event_mask, event_t *event ); extern void OSWPutBackEvent(event_t *event); extern int OSWSendEvent( event_mask_t mask, event_t *event, bool_t propagate ); extern int OSWPurgeAllEvents(void); extern int OSWPurgeTypedEvent(event_type_t event_type); extern int OSWPurgeWindowTypedEvent(win_t w, event_type_t event_type); extern void OSWBlockInput(bool_t block); extern int OSWBlockInputLevel(void); extern bool_t OSWEventIsTakeFocus(win_t w, event_t *event, time_t *t); extern bool_t OSWEventIsDeleteWindow(win_t w, event_t *event); extern bool_t OSWEventIsDNDEnter( win_t w, event_t *event, win_t *src_w_rtn, const atom_t *target, int ntargets ); extern bool_t OSWEventIsDNDPosition( win_t w, event_t *event, win_t *src_w_rtn, win_t *tar_child_w_rtn, int *x_rtn, int *y_rtn, int *root_x_rtn, int *root_y_rtn, time_t *t, atom_t *action_rtn ); extern bool_t OSWEventIsDNDStatus( win_t w, event_t *event, win_t *tar_w_rtn, atom_t *accepted_action_rtn, rectangle_t *rect_rtn ); extern bool_t OSWEventIsDNDLeave( win_t w, event_t *event, win_t *src_w_rtn ); extern bool_t OSWEventIsDNDDrop( win_t w, event_t *event, win_t *src_w_rtn, time_t *t ); extern bool_t OSWEventIsDNDFinished( win_t w, event_t *event, win_t *tar_w_rtn, bool_t *drop_processed_and_successful, atom_t *action ); /* Windows */ extern int OSWCreateWindow( win_t *w, win_t parent, int x, int y, unsigned int width, unsigned int height ); extern int OSWCreateInputWindow( win_t *w, win_t parent, int x, int y, unsigned int width, unsigned int height ); extern void OSWDestroyWindow(win_t *w); extern bool_t OSWDrawableIsWindow(drawable_t d); extern bool_t OSWWindowIsToplevel(win_t w); extern void OSWSetWindowWMProperties( win_t w, const char *title, const char *icon_title, pixmap_t icon, bool_t wm_sets_coordinates, int x, int y, unsigned int min_width, unsigned int min_height, unsigned int max_width, unsigned int max_height, int frame_style, /* One of WindowFrameStyle* */ int argc, char **argv ); extern void OSWSetWindowInput(win_t w, event_mask_t eventmask); extern void OSWSetTransientFor(win_t w, win_t main_w); extern void OSWSetModal(win_t w); extern void OSWMapWindow(win_t w); extern void OSWMapRaised(win_t w); extern void OSWMapSubwindows(win_t w); extern void OSWUnmapWindow(win_t w); extern void OSWRestackWindows(win_t *w, int num_w); extern void OSWIconifyWindow(win_t w); extern void OSWReparentWindow(win_t w, win_t parent); extern void OSWMoveWindow(win_t w, int x, int y); extern void OSWResizeWindow(win_t w, unsigned int width, unsigned int height); extern void OSWMoveResizeWindow( win_t w, int x, int y, unsigned int width, unsigned int height ); extern void OSWSetWindowTitle(Window w, const char *title); extern void OSWClearWindow(win_t w); extern void OSWSetWindowBkg(win_t w, pixel_t pix, pixmap_t pixmap); extern bool_t OSWGetWindowGeometry( win_t w, int *x, int *y, unsigned int *width, unsigned int *height, unsigned int *depth ); extern bool_t OSWGetWindowAttributes(win_t w, win_attr_t *wattr); extern bool_t OSWTranslateCoordinatesToChild( win_t parent, win_t child, int x, int y, int *x_rtn, int *y_rtn ); extern bool_t OSWTranslateCoordinatesToParent( win_t child, win_t parent, int x, int y, int *x_rtn, int *y_rtn ); extern bool_t OSWGetWindowRootOrigin(win_t w, int *x, int *y); extern win_t OSWGetWindowParent(win_t w); extern bool_t OSWCheckWindowAncestory(win_t grand_parent, win_t grand_child); /* Bitmap */ extern int OSWCreateBitmap( bitmap_t *bitmap, unsigned int width, unsigned int height ); extern void OSWDestroyBitmap(bitmap_t *bitmap); /* Pixmap */ extern int OSWCreatePixmap( pixmap_t *pixmap, unsigned int width, unsigned int height ); extern void OSWDestroyPixmap(pixmap_t *pixmap); extern bool_t OSWDrawableIsPixmap(drawable_t d); extern bool_t OSWGetPixmapGeometry( pixmap_t pixmap, unsigned int *width, unsigned int *height, unsigned int *depth ); extern bool_t OSWGetPixmapAttributes(pixmap_t pixmap, pixmap_attr_t *pattr); extern void OSWClearPixmap( pixmap_t pixmap, unsigned int width, unsigned int height, pixel_t pix ); /* Image */ extern image_t *OSWCreateImageFromXImage(XImage *ximg); extern int OSWCreateImage( image_t **img_rtn, unsigned int width, unsigned int height ); extern void OSWDestroyImage(image_t **img_rtn); extern int OSWCreateSharedImage( shared_image_t **img_rtn, unsigned int width, unsigned int height ); extern void OSWDestroySharedImage(shared_image_t **img_rtn); /* Graphics conversion */ extern pixmap_t OSWCreatePixmapFromImage(image_t *img); extern bitmap_t OSWCreateMaskFromImage(image_t *img); /* Image IO */ extern image_t *OSWGetImage( drawable_t d, int x, int y, unsigned int width, unsigned int height ); extern void OSWPutImageToDrawable(image_t *img, drawable_t d); extern void OSWPutImageToDrawablePos( image_t *img, drawable_t d, int tar_x, int tar_y ); extern void OSWPutImageToDrawableSect( image_t *img, drawable_t d, int tar_x, int tar_y, int src_x, int src_y, unsigned int width, unsigned int height ); extern void OSWPutSharedImageToDrawable( shared_image_t *img, drawable_t d ); extern void OSWPutSharedImageToDrawablePos( shared_image_t *img, drawable_t d, int tar_x, int tar_y ); extern void OSWPutSharedImageToDrawableSect( shared_image_t *img, drawable_t d, int tar_x, int tar_y, int src_x, int src_y, unsigned int width, unsigned int height ); extern void OSWSyncSharedImage(shared_image_t *img, drawable_t d); extern void OSWPutDrawableToWindow(win_t w, drawable_t d); extern void OSWCopyDrawables( drawable_t tar_d, drawable_t src_d, unsigned int width, unsigned int height ); extern void OSWCopyDrawablesCoord( drawable_t tar_d, drawable_t src_d, int tar_x, int tar_y, unsigned int width, unsigned int height, int src_x, int src_y ); /* Drawing */ extern void OSWSetClipRectangle(const rectangle_t *rect); extern void OSWSetClipMask(bitmap_t mask); extern void OSWSetClipOrigin(int x, int y); extern void OSWDrawString(drawable_t d, int x, int y, const char *s); extern void OSWDrawStringLimited( drawable_t d, int x, int y, const char *s, int len ); extern void OSWDrawLine( drawable_t d, int start_x, int start_y, int end_x, int end_y ); extern void OSWDrawRectangle( drawable_t d, int x, int y, unsigned int width, unsigned int height ); extern void OSWDrawSolidRectangle( drawable_t d, int x, int y, unsigned int width, unsigned int height ); extern void OSWDrawArc( drawable_t d, int x, int y, unsigned int width, unsigned int height, float position_angle, /* In radians */ float terminal_angle /* In radians */ ); extern void OSWDrawSolidArc( drawable_t d, int x, int y, unsigned int width, unsigned int height, float position_angle, /* In radians */ float terminal_angle /* In radians */ ); #endif /* OSW_X_H */