📄 frame_layout.c
字号:
(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 + -