📄 cursor.c
字号:
#ifndef lint#ifdef sccsstatic char sccsid[] = "@(#)cursor.c 1.1 92/07/30 Copyr 1983 Sun Micro";#endif#endif/* * Copyright (c) 1983 by Sun Microsystems, Inc. *//* * cursor.c: Routines for creating & modifying a cursor. * */#include <varargs.h>#include <sys/types.h>#include <pixrect/pixrect.h>#include <pixrect/memvar.h>#include <sunwindow/rect.h>#include <sunwindow/win_cursor.h>#include <sunwindow/cursor_impl.h>static int cursor_set_attr();/* VARARGS0 */Cursorcursor_create(va_alist)va_dcl{ caddr_t avlist[ATTR_STANDARD_SIZE]; struct cursor *cursor; char *calloc(); va_list valist; va_start(valist); (void)attr_make(avlist, ATTR_STANDARD_SIZE, valist); va_end(valist) if (!(cursor = (struct cursor *) (LINT_CAST(calloc(1, sizeof(struct cursor)))))) return(0); cursor->cur_function = PIX_SRC | PIX_DST; cursor->cur_shape = #ifdef ecd.cursor mem_create(CURSOR_MIN_SIZE, CURSOR_MIN_SIZE, 1);#else mem_create(CURSOR_MAX_IMAGE_WORDS, CURSOR_MAX_IMAGE_WORDS, 1);#endif ecd.cursor cursor->flags = FREE_SHAPE; cursor->horiz_hair_op = PIX_SRC; cursor->horiz_hair_color = -1; cursor->horiz_hair_thickness = 1; cursor->horiz_hair_length = CURSOR_TO_EDGE; cursor->horiz_hair_gap = 0; cursor->vert_hair_op = PIX_SRC; cursor->vert_hair_color = -1; cursor->vert_hair_thickness = 1; cursor->vert_hair_length = CURSOR_TO_EDGE; cursor->vert_hair_gap = 0; (void)cursor_set_attr(cursor, avlist); return (Cursor) cursor;}voidcursor_destroy(cursor_client)Cursor cursor_client;{ struct cursor *cursor; cursor = (struct cursor *)(LINT_CAST(cursor_client)); if (free_shape(cursor)) (void)pr_destroy(cursor->cur_shape); free((caddr_t)cursor);}/* cursor_get returns the current value of which_attr. */caddr_tcursor_get(cursor_client, which_attr)register Cursor cursor_client;Cursor_attribute which_attr;{ struct cursor *cursor; cursor = (struct cursor *)(LINT_CAST(cursor_client)); switch (which_attr) { case CURSOR_SHOW_CURSOR: return (caddr_t) show_cursor(cursor); case CURSOR_SHOW_CROSSHAIRS: return (caddr_t) show_crosshairs(cursor); case CURSOR_SHOW_HORIZ_HAIR: return (caddr_t) show_horiz_hair(cursor); case CURSOR_SHOW_VERT_HAIR: return (caddr_t) show_vert_hair(cursor); case CURSOR_CROSSHAIR_BORDER_GRAVITY: case CURSOR_HORIZ_HAIR_BORDER_GRAVITY: return (caddr_t) horiz_border_gravity(cursor); case CURSOR_VERT_HAIR_BORDER_GRAVITY: return (caddr_t) vert_border_gravity(cursor); case CURSOR_FULLSCREEN: return (caddr_t) fullscreen(cursor); case CURSOR_XHOT: return (caddr_t) cursor->cur_xhot; case CURSOR_YHOT: return (caddr_t) cursor->cur_yhot; case CURSOR_OP: return (caddr_t) cursor->cur_function; case CURSOR_IMAGE: return (caddr_t) cursor->cur_shape; case CURSOR_CROSSHAIR_OP: case CURSOR_HORIZ_HAIR_OP: return (caddr_t) cursor->horiz_hair_op; case CURSOR_VERT_HAIR_OP: return (caddr_t) cursor->vert_hair_op; case CURSOR_CROSSHAIR_COLOR: case CURSOR_HORIZ_HAIR_COLOR: return (caddr_t) cursor->horiz_hair_color; case CURSOR_CROSSHAIR_THICKNESS: case CURSOR_HORIZ_HAIR_THICKNESS: return (caddr_t) cursor->horiz_hair_thickness; case CURSOR_VERT_HAIR_COLOR: return (caddr_t) cursor->vert_hair_color; case CURSOR_VERT_HAIR_THICKNESS: return (caddr_t) cursor->vert_hair_thickness; case CURSOR_CROSSHAIR_GAP: case CURSOR_HORIZ_HAIR_GAP: return (caddr_t) cursor->horiz_hair_gap; case CURSOR_VERT_HAIR_GAP: return (caddr_t) cursor->vert_hair_gap; case CURSOR_CROSSHAIR_LENGTH: case CURSOR_HORIZ_HAIR_LENGTH: return (caddr_t) cursor->horiz_hair_length; case CURSOR_VERT_HAIR_LENGTH: return (caddr_t) cursor->vert_hair_length; default: return (caddr_t) 0; }} /* cursor_get *//* VARARGS1 */intcursor_set(cursor_client, va_alist)Cursor cursor_client;va_dcl{ caddr_t avlist[ATTR_STANDARD_SIZE]; va_list valist; struct cursor *cursor; va_start(valist); (void)attr_make(avlist, ATTR_STANDARD_SIZE, valist); va_end(valist); cursor = (struct cursor *)(LINT_CAST(cursor_client)); return cursor_set_attr(cursor, avlist);}/* cursor_set_attr sets the attributes mentioned in avlist. */static intcursor_set_attr(cursor, avlist)register struct cursor *cursor;register Attr_avlist avlist;{ register Cursor_attribute which_attr; while (which_attr = (Cursor_attribute) *avlist++) { switch (which_attr) { case CURSOR_SHOW_CURSOR: if (*avlist++) cursor->flags &= ~DONT_SHOW_CURSOR; else cursor->flags |= DONT_SHOW_CURSOR; break; case CURSOR_SHOW_CROSSHAIRS: if (*avlist++) cursor->flags |= SHOW_HORIZ_HAIR | SHOW_VERT_HAIR; else cursor->flags &= ~(SHOW_HORIZ_HAIR | SHOW_VERT_HAIR); break; case CURSOR_SHOW_HORIZ_HAIR: if (*avlist++) cursor->flags |= SHOW_HORIZ_HAIR; else cursor->flags &= ~SHOW_HORIZ_HAIR; break; case CURSOR_SHOW_VERT_HAIR: if (*avlist++) cursor->flags |= SHOW_VERT_HAIR; else cursor->flags &= ~SHOW_VERT_HAIR; break; case CURSOR_CROSSHAIR_BORDER_GRAVITY: if (*avlist++) cursor->flags |= HORIZ_BORDER_GRAVITY | VERT_BORDER_GRAVITY; else cursor->flags &= ~(HORIZ_BORDER_GRAVITY | VERT_BORDER_GRAVITY); break; case CURSOR_HORIZ_HAIR_BORDER_GRAVITY: if (*avlist++) cursor->flags |= HORIZ_BORDER_GRAVITY; else cursor->flags &= ~HORIZ_BORDER_GRAVITY; break; case CURSOR_VERT_HAIR_BORDER_GRAVITY: if (*avlist++) cursor->flags |= VERT_BORDER_GRAVITY; else cursor->flags &= ~VERT_BORDER_GRAVITY; break; case CURSOR_FULLSCREEN: if (*avlist++) cursor->flags |= FULLSCREEN; else cursor->flags &= ~FULLSCREEN; break; case CURSOR_XHOT: cursor->cur_xhot = (int) *avlist++; break; case CURSOR_YHOT: cursor->cur_yhot = (int) *avlist++; break; case CURSOR_OP: cursor->cur_function = (int) *avlist++; break; case CURSOR_IMAGE: /* free the storage for the image if mem_create() was used */ if (free_shape(cursor)) { (void)pr_destroy(cursor->cur_shape); cursor->flags &= ~FREE_SHAPE; } cursor->cur_shape = (struct pixrect *) (LINT_CAST(*avlist++)); break; case CURSOR_CROSSHAIR_COLOR: cursor->horiz_hair_color = cursor->vert_hair_color = (int) *avlist++; break; case CURSOR_CROSSHAIR_OP: cursor->horiz_hair_op = cursor->vert_hair_op = (int) *avlist++; break; case CURSOR_HORIZ_HAIR_OP: cursor->horiz_hair_op = (int) *avlist++; break; case CURSOR_VERT_HAIR_OP: cursor->vert_hair_op = (int) *avlist++; break; case CURSOR_HORIZ_HAIR_COLOR: cursor->horiz_hair_color = (int) *avlist++; break; case CURSOR_CROSSHAIR_THICKNESS: if ((int) *avlist > CURSOR_MAX_HAIR_THICKNESS) return 1; cursor->horiz_hair_thickness = cursor->vert_hair_thickness = (int) *avlist++; break; case CURSOR_HORIZ_HAIR_THICKNESS: if ((int) *avlist > CURSOR_MAX_HAIR_THICKNESS) return 1; cursor->horiz_hair_thickness = (int) *avlist++; break; case CURSOR_VERT_HAIR_COLOR: cursor->vert_hair_color = (int) *avlist++; break; case CURSOR_VERT_HAIR_THICKNESS: if ((int) *avlist > CURSOR_MAX_HAIR_THICKNESS) return 1; cursor->vert_hair_thickness = (int) *avlist++; break; case CURSOR_CROSSHAIR_LENGTH: cursor->horiz_hair_length = cursor->vert_hair_length = (int) *avlist++; break; case CURSOR_HORIZ_HAIR_LENGTH: cursor->horiz_hair_length = (int) *avlist++; break; case CURSOR_VERT_HAIR_LENGTH: cursor->vert_hair_length = (int) *avlist++; break; case CURSOR_CROSSHAIR_GAP: cursor->horiz_hair_gap = cursor->vert_hair_gap = (int) *avlist++; break; case CURSOR_HORIZ_HAIR_GAP: cursor->horiz_hair_gap = (int) *avlist++; break; case CURSOR_VERT_HAIR_GAP: cursor->vert_hair_gap = (int) *avlist++; break; default: /* Here we should complain about something */ return 1; } } return 0;} /* cursor_set */Cursorcursor_copy(cursor_client)register Cursor cursor_client;{ register struct cursor *new_cursor; struct cursor *cursor; cursor = (struct cursor *)(LINT_CAST(cursor_client)); if (!(new_cursor = (struct cursor *) (LINT_CAST(calloc(1, sizeof(struct cursor)))))) return 0; *new_cursor = *cursor; new_cursor->cur_shape = mem_create(cursor->cur_shape->pr_width, cursor->cur_shape->pr_height, cursor->cur_shape->pr_depth); if (!new_cursor->cur_shape) return 0; /* we created this, so we free it later */ new_cursor->flags |= FREE_SHAPE; /* copy the old image to the new image */ (void)pr_rop(new_cursor->cur_shape, 0, 0, cursor->cur_shape->pr_width, cursor->cur_shape->pr_height, PIX_SRC, cursor->cur_shape, 0, 0); return (Cursor) new_cursor;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -