📄 scrollbar_paint.c
字号:
clear_client = TRUE;}static voidpaint_bubble(sb)scrollbar_handle sb;{ struct rect bubble; if (!sb->one_button_case) { (void)scrollbar_compute_bubble_rect(sb, &bubble); if (sb->bubble_grey) (void)pw_replrop(sb->pixwin, bubble.r_left, bubble.r_top, bubble.r_width, bubble.r_height, PIX_SRC, &scrollbar_mpr_for_grey_pattern, 0, 0); else (void)pw_writebackground(sb->pixwin, bubble.r_left, bubble.r_top, bubble.r_width, bubble.r_height, PIX_SET); } sb->bubble_painted = TRUE;}/**************************************************************************//* scrollbar_paint_buttons *//**************************************************************************/scrollbar_paint_buttons(sb)scrollbar_handle sb;{ /*register int tb_margin, lr_margin, t, b, l, r;*/ if (sb->horizontal) { /* right button */ (void)pw_writebackground(sb->pixwin, (int)(sb->rect.r_width-sb->button_length), 0, (int)(sb->button_length) /*+1*/, sb->rect.r_height, PIX_CLR); if (!sb->one_button_case) (void)pw_vector(sb->pixwin, (int)(sb->rect.r_width - sb->button_length) /*+ 1*/, 0, (int)(sb->rect.r_width - sb->button_length) /*+ 1*/, sb->rect.r_height - 1, PIX_SET, 1); if (sb->gravity == SCROLL_MIN) (void)pw_vector(sb->pixwin, (int)(sb->rect.r_width - sb->button_length) /*+1*/, sb->rect.r_height - 1, (int)(sb->rect.r_width - 1) /**/, sb->rect.r_height - 1, PIX_SET, 1); else if (sb->gravity == SCROLL_MAX) (void)pw_vector(sb->pixwin, (int)(sb->rect.r_width - sb->button_length) /*+1*/, 0, (int)(sb->rect.r_width - 1) /**/, 0, PIX_SET, 1); if (sb->rect.r_height >= 12) paint_h_arrow(sb, (short)(sb->rect.r_width-sb->button_length+1), sb->rect.r_height); /* left button */ if (!sb->one_button_case) { (void)pw_writebackground(sb->pixwin, 0, 0, (int)sb->button_length, sb->rect.r_height, PIX_CLR); (void)pw_vector(sb->pixwin, (int)(sb->button_length - 1), 0, (int)(sb->button_length - 1), sb->rect.r_height - 1, PIX_SET, 1); if (sb->gravity == SCROLL_MIN) (void)pw_vector(sb->pixwin, 0, sb->rect.r_height - 1, (int)(sb->button_length - 1) /**/, sb->rect.r_height - 1, PIX_SET, 1); else if (sb->gravity == SCROLL_MAX) (void)pw_vector(sb->pixwin, 0, 0, (int)(sb->button_length - 1) /**/, 0, PIX_SET, 1); if (sb->rect.r_height >= 12) paint_h_arrow(sb, 0, sb->rect.r_height); } } else { /* bottom button */ (void)pw_writebackground(sb->pixwin, 0, (int)(sb->rect.r_height-sb->button_length), sb->rect.r_width, (int)sb->button_length /*+1*/, PIX_CLR); /* horizontal line on top of button */ if (!sb->one_button_case) (void)pw_vector(sb->pixwin, 0, (int)(sb->rect.r_height - sb->button_length) /*+ 1*/, sb->rect.r_width - 1, (int)(sb->rect.r_height - sb->button_length) /*+ 1*/, PIX_SET, 1); if (sb->gravity == SCROLL_MIN) /* vertical line on right of button */ (void)pw_vector(sb->pixwin, sb->rect.r_width - 1, (int)(sb->rect.r_height - sb->button_length) /*+ 1*/, sb->rect.r_width - 1, sb->rect.r_height - 1 /**/, PIX_SET, 1); else if (sb->gravity == SCROLL_MAX) (void)pw_vector(sb->pixwin, 0, (int)(sb->rect.r_height - sb->button_length) /*+ 1*/, 0, sb->rect.r_height - 1 /**/, PIX_SET, 1); if (sb->rect.r_width >= 12) paint_v_arrow(sb, 0, (short)(sb->rect.r_height - sb->button_length + 1)); if (!sb->one_button_case) { /* top button */ (void)pw_writebackground(sb->pixwin, 0, 0, sb->rect.r_width, (int)sb->button_length, PIX_CLR); /* horizontal line on bottom of button */ (void)pw_vector(sb->pixwin, 0, (int)(sb->button_length - 1), sb->rect.r_width - 1, (int)(sb->button_length - 1), PIX_SET, 1); if (sb->gravity == SCROLL_MIN) /* vertical line on right of button */ (void)pw_vector(sb->pixwin, sb->rect.r_width - 1, 0, sb->rect.r_width - 1, (int)(sb->button_length - 1), PIX_SET, 1); else if (sb->gravity == SCROLL_MAX) /* vertical line on left of button */ (void)pw_vector(sb->pixwin, 0, 0, 0, (int)(sb->button_length - 1), PIX_SET, 1); if (sb->rect.r_width >= 12) paint_v_arrow(sb, 0, 0); } } sb->buttons_painted = TRUE;}/**************************************************************************//* arrow painting routines *//**************************************************************************/static voidpaint_h_arrow(sb, left, bottom)scrollbar_handle sb;short left, bottom;{ register int /*tb_margin, lr_margin, t, */ b, l, r; l = left + 2; r = left + sb->button_length - 3; /*tb_margin = (sb->rect.r_height - 7) / 2; */ b = bottom - ((sb->rect.r_height - 7) / 2) - 2; /* left triangle */ (void)pw_put(sb->pixwin, l, b-3, 1); (void)pw_vector(sb->pixwin, l+1, b-2, l+1, b-4, PIX_SET, 1); (void)pw_vector(sb->pixwin, l+2, b-1, l+2, b-5, PIX_SET, 1); (void)pw_vector(sb->pixwin, l+3, b, l+3, b-6, PIX_SET, 1); /* right triangle */ (void)pw_put(sb->pixwin, r, b-3, 1); (void)pw_vector(sb->pixwin, r-1, b-2, r-1, b-4, PIX_SET, 1); (void)pw_vector(sb->pixwin, r-2, b-1, r-2, b-5, PIX_SET, 1); (void)pw_vector(sb->pixwin, r-3, b, r-3, b-6, PIX_SET, 1);}/*ARGSUSED*/static voidpaint_v_arrow(sb, left, top)scrollbar_handle sb;short left, top;{ register int /*tb_margin, r, */ t, b, l; t = top + 2; b = top + sb->button_length - 3; l = (sb->rect.r_width - 7) / 2; /* up triangle */ (void)pw_put(sb->pixwin, l+3, t, 1); (void)pw_vector(sb->pixwin, l+2, t+1, l+4, t+1, PIX_SET, 1); (void)pw_vector(sb->pixwin, l+1, t+2, l+5, t+2, PIX_SET, 1); (void)pw_vector(sb->pixwin, l, t+3, l+6, t+3, PIX_SET, 1); /* down triangle */ (void)pw_put(sb->pixwin, l+3, b, 1); (void)pw_vector(sb->pixwin, l+2, b-1, l+4, b-1, PIX_SET, 1); (void)pw_vector(sb->pixwin, l+1, b-2, l+5, b-2, PIX_SET, 1); (void)pw_vector(sb->pixwin, l, b-3, l+6, b-3, PIX_SET, 1);}/**************************************************************************//* scrollbar_paint_all_clear *//**************************************************************************/intscrollbar_paint_all_clear(pixwin)struct pixwin *pixwin;{ register scrollbar_handle sb; SCROLLBAR_FOR_ALL(sb) { if (pixwin == sb->pixwin) (void)scrollbar_paint_clear((Scrollbar)(LINT_CAST(sb))); }}intscrollbar_paint_all(pixwin)struct pixwin *pixwin;{ register scrollbar_handle sb; SCROLLBAR_FOR_ALL(sb) { if (pixwin == sb->pixwin) (void)scrollbar_paint((Scrollbar)(LINT_CAST(sb))); }}/**************************************************************************//* scrollbar_compute_bubble_rect *//* the bubble rect is relative to the scrollbar's region, NOT the *//* scrollbar's rect (which is relative to the underlying pixwin). *//**************************************************************************/scrollbar_compute_bubble_rect(sb, result)register scrollbar_handle sb;register struct rect *result;{ register int bubble_length; register int bubble_offset; register int major_axis_length; register int minor_axis_length; register int min_bubble_length = MIN_BUBBLE_LENGTH; if (sb->horizontal) { major_axis_length = sb->rect.r_width; minor_axis_length = sb->rect.r_height; } else { major_axis_length = sb->rect.r_height; minor_axis_length = sb->rect.r_width; } major_axis_length -= 2*sb->button_length; if (major_axis_length < MIN_BUBBLE_LENGTH) min_bubble_length = major_axis_length;/* round bubble_offset down & bubble_length up */ bubble_offset = (double)sb->view_start * major_axis_length / (double)sb->object_length; bubble_length = sb->view_length * major_axis_length; bubble_length =(bubble_length + (double)sb->object_length - 1)/ (double)sb->object_length; major_axis_length += sb->button_length; bubble_offset += sb->button_length; if (bubble_offset < sb->button_length) bubble_offset = sb->button_length; if (bubble_offset + min_bubble_length > major_axis_length) bubble_offset = major_axis_length - min_bubble_length; if (bubble_length < min_bubble_length) bubble_length = min_bubble_length; if (bubble_offset + bubble_length > major_axis_length) bubble_length = major_axis_length - bubble_offset; /* Leave at least one pixel, if view_start is not at file start */ if ((sb->view_start != 0) && (bubble_offset == sb->button_length)) bubble_offset++; if (sb->horizontal) { result->r_left = bubble_offset; result->r_top = sb->bubble_margin; result->r_width = bubble_length; result->r_height = minor_axis_length - 2*sb->bubble_margin; if (sb->border) result->r_height--; if (sb->gravity == SCROLL_MAX) result->r_top++; if (result->r_height < 0) result->r_height = 0; } else { result->r_top = bubble_offset; result->r_left = sb->bubble_margin; result->r_height = bubble_length; result->r_width = minor_axis_length - 2*sb->bubble_margin; if (sb->border) result->r_width--; if (sb->gravity == SCROLL_MAX) result->r_left++; if (result->r_width < 0) result->r_width = 0; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -