⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frame_layout.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
	(void)wmgr_setnormalrect(fd, &rect);	if (tsw) tsw->ts_width = (int)d1;	else grant_extend_to_edge((Tool *)(LINT_CAST(win)), TRUE);	break;            case WIN_ADJUST_X:      case_win_adjust_x:/*	if (d1 < 0) break;*/ /* Ignore negative offsets */	tsw = frame_find((struct toolplus *)(LINT_CAST(frame)), win);	fd = window_fd(win);	if (!is_frame) d1 += TOOL_BORDERWIDTH;	else if (subframe)	    (void)wmgr_getnormalrect(window_fd(frame), &rect), d1 += rect.r_left;	if (d1 < 0) break; /* Ignore negative offsets */	(void)wmgr_getnormalrect(fd, &rect);	rect.r_left = d1;	if (tsw && (tsw->ts_width == -1 || tsw->ts_height == -1))	    expand_sw((Tool *)(LINT_CAST(frame)), tsw, &rect);	(void)wmgr_setnormalrect(fd, &rect);	break;      case WIN_ADJUST_Y:      case_win_adjust_y:/*	if (d1 < 0) break;*/ /* Ignore negative offsets */	tsw = frame_find((struct toolplus *)(LINT_CAST(frame)), win);	fd = window_fd(win);	if (!is_frame)	    d1 += tool_headerheight(tool->tl_flags & TOOL_NAMESTRIPE)		+ tool_sw_iconic_offset(tool);	else if (subframe)	    (void)wmgr_getnormalrect(window_fd(frame), &rect), d1 += rect.r_top;	if (d1 < 0) break; /* Ignore negative offsets */	(void)wmgr_getnormalrect(fd, &rect);	rect.r_top = d1;	if (tsw && (tsw->ts_width == -1 || tsw->ts_height == -1))	    expand_sw((Tool *)(LINT_CAST(frame)), tsw, &rect);	(void)wmgr_setnormalrect(fd, &rect);	break;      case WIN_GET_X:	/* Use d5 as a temp, a bit of a hack */	(void)wmgr_getnormalrect(window_fd(win), &rect);	d5 = rect.r_left - (is_frame ? 0 : TOOL_BORDERWIDTH);	if (subframe) {	    (void)wmgr_getnormalrect(window_fd(window_get(win, WIN_OWNER)), &rect);	    d5 -= rect.r_left;	}    	*(int *)d1 = d5;	break;	      case WIN_GET_Y:	(void)wmgr_getnormalrect(window_fd(win), &rect);	d5 = rect.r_top - (is_frame ? 0			   : tool_headerheight(tool->tl_flags & TOOL_NAMESTRIPE)			     + tool_sw_iconic_offset(tool));	if (subframe) {	    (void)wmgr_getnormalrect(window_fd(window_get(win, WIN_OWNER)), &rect);	    d5 -= rect.r_top;	}	    	*(int *)d1 = d5;	break;      case WIN_GET_WIDTH:	(void)wmgr_getnormalrect(window_fd(win), &rect);	*(int *)d1 = rect.r_width;	break;	      case WIN_GET_HEIGHT:	(void)wmgr_getnormalrect(window_fd(win), &rect);	*(int *)d1 = rect.r_height;	break;	      case WIN_GET_RECT:	rectp = (Rect *)d1;		/* Setup pointer arg */	(void)wmgr_getnormalrect(window_fd(win), rectp);	if (!is_frame) {	    rectp->r_left -= TOOL_BORDERWIDTH;	    rectp->r_top -= tool_headerheight(tool->tl_flags & TOOL_NAMESTRIPE)		+ tool_sw_iconic_offset(tool);	} else if (subframe) {	    (void)wmgr_getnormalrect(window_fd(frame), &rect);	    rectp->r_left -= rect.r_left;	    rectp->r_top -= rect.r_top;	}	break;      case WIN_CREATE: /* Ignore these -- already handled */      case WIN_DESTROY:      case WIN_INSTALL:      case WIN_INSERT:      case WIN_REMOVE:      case WIN_LAYOUT:	break;      default:	(void)fprintf(stderr,   "frame_layout(internal error): frame layout option (%d) not recognized.\n",		op);	return FALSE;	    }    return TRUE;}/* * Remove win from tool */Privateframe_remove_from_tool(frame, win)	register Window frame, win;{    struct list_node *node;    Toolsw *tsw;    Tool *tool;    tool = (Tool *)(LINT_CAST(frame));    tsw = tool_find_prev((Tool *)(LINT_CAST(frame)), win, TRUE);    node = frame_find_node((struct toolplus *)(LINT_CAST(frame)), win);    if (tsw) {	node->tsw = tsw->ts_next;	tsw->ts_next = tsw->ts_next->ts_next;	if (((Toolsw_priv *)(LINT_CAST(node->tsw->ts_priv)))->have_kbd_focus) {	    ((Toolsw_priv *)(LINT_CAST(node->tsw->ts_priv)))->have_kbd_focus = FALSE;	    (void)win_set_kbd_focus(node->tsw->ts_windowfd, WIN_NULLLINK);	}    } else {	node->tsw = tool->tl_sw;	if (tool->tl_sw) tool->tl_sw = tool->tl_sw->ts_next;    }}Private Toolsw *tool_find_prev(tool, client, prev)	Tool *tool;	caddr_t	client;	int/*bool*/ prev;{       Toolsw *sw, *previous_sw = NULL;    for (sw = tool->tl_sw;sw;sw = sw->ts_next) {	if (sw->ts_data == client) break;	previous_sw = sw;    }	        return (prev && sw) ? previous_sw : sw;}/* * Convert secondary window rect into primary window space * SHOULD MOVE THIS TO THE win OR window DIRECTORY */externwindow_getrelrect(pfd, sfd, srectp)	int pfd, sfd;	register Rect *srectp;{    Rect prect, *prectp = &prect, rect;    int pwn, swn;    char wname[WIN_NAMESIZE];        (void)win_getrect(sfd, srectp);    prect = rect_null;        if (pfd == 0) {	swn = win_getlink(sfd, WL_PARENT);	while (swn != 0 && (swn != WIN_NULLLINK)) {	    if (swn != WIN_NULLLINK) {		(void)win_numbertoname(swn, wname);		sfd = open(wname, O_RDONLY, 0);		(void)win_getrect(sfd, &rect);		srectp->r_top += rect.r_top, srectp->r_left += rect.r_left;		swn = win_getlink(sfd, WL_PARENT);		(void)close(sfd);	    }	}    } else {	pwn = win_getlink(pfd, WL_PARENT);	swn = win_getlink(sfd, WL_PARENT);	while (pwn != swn && (pwn != WIN_NULLLINK || swn != WIN_NULLLINK)) {	    if (pwn != WIN_NULLLINK) {		(void)win_numbertoname(pwn, wname);		pfd = open(wname, O_RDONLY, 0);		(void)win_getrect(pfd, &rect);		prectp->r_top += rect.r_top, prectp->r_left += rect.r_left;		pwn = win_getlink(pfd, WL_PARENT);		(void)close(pfd);	    }	    if (swn != WIN_NULLLINK) {		(void)win_numbertoname(swn, wname);		sfd = open(wname, O_RDONLY, 0);		(void)win_getrect(sfd, &rect);		srectp->r_top += rect.r_top, srectp->r_left += rect.r_left;		swn = win_getlink(sfd, WL_PARENT);		(void)close(sfd);	    }	}	srectp->r_top -= prectp->r_top, srectp->r_left -= prectp->r_left;    }}Privateexpand_sw(tool, sw, rectp)	Tool *tool;	Toolsw *sw;	Rect *rectp;{       Rect rect;        (void)wmgr_getnormalrect(tool->tl_windowfd, &rect);    if (sw->ts_width == TOOL_SWEXTENDTOEDGE)	rectp->r_width = rect.r_width - TOOL_BORDERWIDTH - rectp->r_left;    if (sw->ts_height == TOOL_SWEXTENDTOEDGE)	rectp->r_height = rect.r_height - TOOL_BORDERWIDTH - 	    (rectp->r_top - tool_sw_iconic_offset(tool));    /* don't allow the subwindow to be less than 1 x 1 */    if (rectp->r_width < 1)        rectp->r_width = 1;    if (rectp->r_height < 1)        rectp->r_height = 1;}Private Toolsw *frame_find(frame, client)	struct toolplus *frame;	caddr_t	client;{       Toolsw *tsw;    struct list_node *node;    tsw = tool_find(frame, client);    if (!tsw) {				      /* Maybe its a hidden subwindow */	node = frame_find_node(frame, client); /* Intended to fail for frames */	tsw = node ? node->tsw : NULL;    }    return tsw;}Private struct list_node *frame_find_node(frame, client)	struct toolplus *frame;	caddr_t	client;{       struct list_node *node;    for (node = frame->frame_list.next; node; node = node->next) {	if (node->client == client) return node;    }	        return NULL;}/* make subwindows that border the frame * be extend-to-edge. */Private voidgrant_extend_to_edge(tool, to_right)Tool		*tool;register int	to_right;{    register Toolsw	*sw;    register int	limit;    Rect		rect;    (void)tool_getnormalrect(tool, &rect);        if (to_right)	limit = rect.r_width - TOOL_BORDERWIDTH - 1;    else	limit = 	    tool_sw_iconic_offset(tool) + rect.r_height - TOOL_BORDERWIDTH - 1;    for (sw = tool->tl_sw; sw; sw = sw->ts_next) {	(void)win_getrect(sw->ts_windowfd, &rect);	if (to_right) {	   if (rect_right(&rect) == limit)	       sw->ts_width = TOOL_SWEXTENDTOEDGE;	} else if (rect_bottom(&rect) == limit)	       sw->ts_height = TOOL_SWEXTENDTOEDGE;    }	    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -