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

📄 rxvtlib_scrollbar.c

📁 具有IDE功能的编辑器
💻 C
📖 第 1 页 / 共 2 页
字号:
    if (o->scrollbarGC == None) {	XGCValues       gcvalue;#ifdef XTERM_SCROLLBAR	sb_width = SB_WIDTH - 1;	gcvalue.stipple = XCreateBitmapFromData (o->Xdisplay, o->scrollBar.win,						 o->sb_bits, 12, 2);	if (!gcvalue.stipple) {	    print_error ("can't create bitmap");	    o->killed = EXIT_FAILURE | DO_EXIT;	    return 0;	}	gcvalue.fill_style = FillOpaqueStippled;	gcvalue.foreground = o->PixColors[Color_fg];	gcvalue.background = o->PixColors[Color_bg];	o->scrollbarGC = XCreateGC (o->Xdisplay, o->scrollBar.win,				 GCForeground | GCBackground |				 GCFillStyle | GCStipple, &gcvalue);	gcvalue.foreground = o->PixColors[Color_border];	o->ShadowGC = XCreateGC (o->Xdisplay, o->scrollBar.win, GCForeground, &gcvalue);#else				/* XTERM_SCROLLBAR */	sb_width = SB_WIDTH;	gcvalue.foreground = o->PixColors[Color_trough];	if (o->sb_shadow) {	    XSetWindowBackground (o->Xdisplay, o->scrollBar.win, gcvalue.foreground);	    XClearWindow (o->Xdisplay, o->scrollBar.win);	}	gcvalue.foreground = (o->Xdepth <= 2 ? o->PixColors[Color_fg]			      : o->PixColors[Color_scroll]);	o->scrollbarGC = XCreateGC (o->Xdisplay, o->scrollBar.win, GCForeground,				 &gcvalue);	gcvalue.foreground = o->PixColors[Color_topShadow];	o->topShadowGC = XCreateGC (o->Xdisplay, o->scrollBar.win,				 GCForeground, &gcvalue);	gcvalue.foreground = o->PixColors[Color_bottomShadow];	o->botShadowGC = XCreateGC (o->Xdisplay, o->scrollBar.win,				 GCForeground, &gcvalue);#endif				/* XTERM_SCROLLBAR */    }    if (update) {	int             top = (o->TermWin.nscrolled - o->TermWin.view_start);	int             bot = top + (o->TermWin.nrow - 1);	int             len =	    max ((o->TermWin.nscrolled + (o->TermWin.nrow - 1)), 1);	int             adj = ((bot - top) * scrollbar_size()) % len;	o->scrollBar.top = (o->scrollBar.beg + (top * scrollbar_size ()) / len);        scrollbar_len = (((bot - top) * scrollbar_size()) / len +			 SCROLL_MINHEIGHT + ((adj > 0) ? 1 : 0));	o->scrollBar.bot = (o->scrollBar.top + scrollbar_len);	/* no change */	if ((o->scrollBar.top == last_top) && (o->scrollBar.bot == last_bot)	    && ((o->scrollBar.state == last_state) || (!scrollbar_isUpDn())))	    return 0;    }/* instead of XClearWindow (Xdisplay, scrollBar.win); */#ifdef XTERM_SCROLLBAR    xsb = (o->Options & Opt_scrollBar_right) ? 1 : 0;#endif    if (last_top < o->scrollBar.top)	XClearArea (o->Xdisplay, o->scrollBar.win,		    o->sb_shadow + xsb, last_top,		    sb_width, (o->scrollBar.top - last_top), False);    if (o->scrollBar.bot < last_bot)	XClearArea (o->Xdisplay, o->scrollBar.win,		    o->sb_shadow + xsb, o->scrollBar.bot,		    sb_width, (last_bot - o->scrollBar.bot), False);    last_top = o->scrollBar.top;    last_bot = o->scrollBar.bot;/* scrollbar slider */#ifdef XTERM_SCROLLBAR    XFillRectangle (o->Xdisplay, o->scrollBar.win, o->scrollbarGC,		    xsb + 1, o->scrollBar.top,		    sb_width - 2, scrollbar_len);    XDrawLine (o->Xdisplay, o->scrollBar.win, o->ShadowGC,	      xsb ? 0 : o->sb_width, o->scrollBar.beg, xsb ? 0 : sb_width,	      o->scrollBar.end);#else#ifdef SB_BORDER    {	int             xofs;	if (o->Options & Opt_scrollBar_right)	    xofs = 0;	else	    xofs = (o->sb_shadow) ? SB_WIDTH : SB_WIDTH - 1;	XDrawLine (o->Xdisplay, o->scrollBar.win, o->botShadowGC,		   xofs, 0, xofs, o->scrollBar.end + SB_WIDTH);    }#endif    XFillRectangle (o->Xdisplay, o->scrollBar.win, o->scrollbarGC,		    o->sb_shadow, o->scrollBar.top,		   sb_width, scrollbar_len);    if (o->sb_shadow)	/* trough shadow */	rxvtlib_Draw_Shadow (o, o->scrollBar.win,		     o->botShadowGC, o->topShadowGC,		     0, 0,		     (sb_width + 2 * o->sb_shadow),		     (o->scrollBar.end + (sb_width + 1) + o->sb_shadow));/* shadow for scrollbar slider */    rxvtlib_Draw_Shadow (o, o->scrollBar.win,		 o->topShadowGC, o->botShadowGC,		 o->sb_shadow, o->scrollBar.top, sb_width,		scrollbar_len);/* * Redraw scrollbar arrows */    rxvtlib_Draw_button (o, o->sb_shadow, o->sb_shadow, (scrollbar_isUp ()? -1 : +1), UP);    rxvtlib_Draw_button (o, o->sb_shadow, (o->scrollBar.end + 1),		 (scrollbar_isDn ()? -1 : +1), DN);#endif				/* XTERM_SCROLLBAR */    last_top = o->scrollBar.top;    last_bot = o->scrollBar.bot;    last_state = o->scrollBar.state;#else				/* NEXT_SCROLLBAR */    Pixmap          buffer;    int             height = o->scrollBar.end + SB_BUTTON_TOTAL_HEIGHT + SB_PADDING;    if (o->blackGC == NULL)	rxvtlib_init_scrollbar_stuff (o);    if (o->killed)	return 0;    if (update) {	int             top = (o->TermWin.nscrolled - o->TermWin.view_start);	int             bot = top + (o->TermWin.nrow - 1);	int             len =	    max ((o->TermWin.nscrolled + (o->TermWin.nrow - 1)), 1);	int             adj = ((bot - top) * scrollbar_size()) % len;	o->scrollBar.top = (o->scrollBar.beg + (top * scrollbar_size ()) / len);        scrollbar_len = (((bot - top) * scrollbar_size()) / len +			 SCROLL_MINHEIGHT + ((adj > 0) ? 1 : 0));	o->scrollBar.bot = (o->scrollBar.top + scrollbar_len);	/* no change */	if ((o->scrollBar.top == last_top) && (o->scrollBar.bot == last_bot)	    && ((o->scrollBar.state == last_state) || (!scrollbar_isUpDn())))	    return 0;    }/* create double buffer */    buffer =	XCreatePixmap (o->Xdisplay, o->scrollBar.win, SB_WIDTH + 1, height, o->Xdepth);    last_top = o->scrollBar.top;    last_bot = o->scrollBar.bot;    last_state = o->scrollBar.state;/* draw the background */    XFillRectangle (o->Xdisplay, buffer, o->grayGC, 0, 0, SB_WIDTH + 1, height);    XDrawRectangle(o->Xdisplay, buffer, o->blackGC, 0, -SB_BORDER_WIDTH,		   SB_WIDTH, height + SB_BORDER_WIDTH);    if (o->TermWin.nscrolled > 0) {	XFillRectangle(o->Xdisplay, buffer, o->stippleGC,		       SB_LEFT_PADDING, SB_PADDING,		       SB_BUTTON_WIDTH,		       height - SB_BUTTON_TOTAL_HEIGHT - SB_PADDING);	XFillRectangle(o->Xdisplay, buffer, o->grayGC,		       SB_LEFT_PADDING, o->scrollBar.top + SB_PADDING,		       SB_BUTTON_WIDTH, scrollbar_len);	rxvtlib_drawBevel(o, buffer, SB_BUTTON_BEVEL_X, o->scrollBar.top + SB_PADDING,		  SB_BUTTON_WIDTH, scrollbar_len);	rxvtlib_drawBevel(o, buffer, SB_BUTTON_BEVEL_X, height - SB_BUTTON_BOTH_HEIGHT,		  SB_BUTTON_WIDTH, SB_BUTTON_HEIGHT);	rxvtlib_drawBevel(o, buffer, SB_BUTTON_BEVEL_X, height - SB_BUTTON_SINGLE_HEIGHT,		  SB_BUTTON_WIDTH, SB_BUTTON_HEIGHT);	XCopyArea (o->Xdisplay, o->dimple, buffer, o->whiteGC, 0, 0,		   SCROLLER_DIMPLE_WIDTH, SCROLLER_DIMPLE_HEIGHT,		  (SB_WIDTH - SCROLLER_DIMPLE_WIDTH) / 2,		  o->scrollBar.top + SB_BEVEL_WIDTH_UPPER_LEFT +		  (scrollbar_len - SCROLLER_DIMPLE_HEIGHT) / 2);	if (scrollbar_isUp ())	    XCopyArea(o->Xdisplay, o->upArrowHi, buffer, o->whiteGC, 0, 0,		      ARROW_WIDTH, ARROW_HEIGHT,		      SB_BUTTON_FACE_X,		      height - (SB_BUTTON_BOTH_HEIGHT - SB_BEVEL_WIDTH_UPPER_LEFT));	else	    XCopyArea(o->Xdisplay, o->upArrow, buffer, o->whiteGC, 0, 0,		      ARROW_WIDTH, ARROW_HEIGHT,		      SB_BUTTON_FACE_X,		      height - (SB_BUTTON_BOTH_HEIGHT - SB_BEVEL_WIDTH_UPPER_LEFT));	if (scrollbar_isDn ())	    XCopyArea(o->Xdisplay, o->downArrowHi, buffer, o->whiteGC, 0, 0,		      ARROW_WIDTH, ARROW_HEIGHT,		      SB_BUTTON_FACE_X,		      height - (SB_BUTTON_SINGLE_HEIGHT - SB_BEVEL_WIDTH_UPPER_LEFT));	else	    XCopyArea(o->Xdisplay, o->downArrow, buffer, o->whiteGC, 0, 0,		      ARROW_WIDTH, ARROW_HEIGHT,		      SB_BUTTON_FACE_X,		      height - (SB_BUTTON_SINGLE_HEIGHT - SB_BEVEL_WIDTH_UPPER_LEFT));    } else {	XFillRectangle(o->Xdisplay, buffer, o->stippleGC,		       SB_LEFT_PADDING, SB_PADDING,		       SB_BUTTON_WIDTH, height - SB_MARGIN_SPACE);    }    if (o->Options & Opt_scrollBar_right)	XCopyArea (o->Xdisplay, buffer, o->scrollBar.win, o->grayGC, 0, 0,		  SB_WIDTH + SB_BORDER_WIDTH, height, 0, 0);    else	XCopyArea (o->Xdisplay, buffer, o->scrollBar.win, o->grayGC, 0, 0,		  SB_WIDTH + SB_BORDER_WIDTH, height, -SB_BORDER_WIDTH, 0);    XFreePixmap (o->Xdisplay, buffer);#endif				/* ! NEXT_SCROLLBAR */    return 1;}/* EXTPROTO */int             rxvtlib_scrollbar_mapping (rxvtlib *o, int map){    int             change = 0;    if (map && !scrollbar_visible ()) {	o->scrollBar.state = 1;	if (o->scrollBar.win == 0)	    return 0;	XMapWindow (o->Xdisplay, o->scrollBar.win);	change = 1;    } else if (!map && scrollbar_visible ()) {	o->scrollBar.state = 0;	XUnmapWindow (o->Xdisplay, o->scrollBar.win);	change = 1;    }    return change;}/* EXTPROTO */void            rxvtlib_map_scrollBar (rxvtlib *o, int map){    if (rxvtlib_scrollbar_mapping (o, map)) {	rxvtlib_resize_all_windows (o);	rxvtlib_scr_touch (o);    }}/*----------------------- end-of-file (C source) -----------------------*/

⌨️ 快捷键说明

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