📄 scrollbar-sgi.c
字号:
unsigned long gcmask; Pixmap stipple; XColor xcol; unsigned int x_offset, y_offset; /* Initialize colors */ r->scrollBar.sgi_black = BlackPixelOfScreen(DefaultScreenOfDisplay(r->Xdisplay)); r->scrollBar.sgi_white = WhitePixelOfScreen(DefaultScreenOfDisplay(r->Xdisplay)); /* alloc light gray */ xcol.red = 0xde00; xcol.green = 0xde00; xcol.blue = 0xde00; if (!rxvt_alloc_color (r, &xcol, "light gray")) {#ifndef NO_BRIGHTCOLOR r->scrollBar.sgi_fg = r->pixColorsFocus [Color_AntiqueWhite];#else r->scrollBar.sgi_fg = r->pixColorsFocus [Color_White];#endif } else r->scrollBar.sgi_fg = xcol.pixel; /* alloc light medium gray */ xcol.red = 0xaa00; xcol.green = 0xaa00; xcol.blue = 0xaa00; if (!rxvt_alloc_color (r, &xcol, "light medium gray")) {#ifndef NO_BRIGHTCOLOR r->scrollBar.sgi_lmedium = r->pixColorsFocus [Color_AntiqueWhite];#else r->scrollBar.sgi_lmedium = r->pixColorsFocus [Color_White];#endif } else r->scrollBar.sgi_lmedium = xcol.pixel; /* alloc medium gray */ xcol.red = 0xbd00; xcol.green = 0xbd00; xcol.blue = 0xbd00; if (!rxvt_alloc_color (r, &xcol, "medium gray")) {#ifndef NO_BRIGHTCOLOR r->scrollBar.sgi_bg = r->pixColorsFocus [Color_Black];#else r->scrollBar.sgi_bg = r->pixColorsFocus [Color_Grey50];#endif } else r->scrollBar.sgi_bg = xcol.pixel; /* alloc dark gray */ xcol.red = 0x8e00; xcol.green = 0x8e00; xcol.blue = 0x8e00; if (!rxvt_alloc_color (r, &xcol, "dark gray")) {#ifndef NO_BRIGHTCOLOR r->scrollBar.sgi_dark = r->pixColorsFocus [Color_Grey25];#else r->scrollBar.sgi_dark = r->pixColorsFocus [Color_Black];#endif } r->scrollBar.sgi_dark = xcol.pixel; /* alloc very dark gray */ xcol.red = 0x5e00; xcol.green = 0x5e00; xcol.blue = 0x5e00; if (!rxvt_alloc_color (r, &xcol, "very dark gray")) {#ifndef NO_BRIGHTCOLOR r->scrollBar.sgi_vdark = r->pixColorsFocus [Color_Grey25];#else r->scrollBar.sgi_vdark = r->pixColorsFocus [Color_Black];#endif } r->scrollBar.sgi_vdark = xcol.pixel; /* Create GCs */ gcvalue.foreground = r->scrollBar.sgi_white; gcmask = GCForeground; r->scrollBar.gc = XCreateGC (r->Xdisplay, r->scrollBar.win, gcmask, &gcvalue); stipple = XCreateBitmapFromData(r->Xdisplay, r->scrollBar.win, (const char*) stp_bits, stp_width, stp_height); assert (IS_PIXMAP(stipple)); gcvalue.foreground = r->scrollBar.sgi_dark; gcvalue.background = r->scrollBar.sgi_bg; gcvalue.fill_style = FillStippled; gcvalue.stipple = stipple; gcmask = GCForeground | GCBackground | GCStipple | GCFillStyle; r->scrollBar.sgi_stippleGC = XCreateGC(r->Xdisplay, r->scrollBar.win, gcmask, &gcvalue); assert (IS_GC(r->scrollBar.sgi_stippleGC)); /* Create icons */ r->scrollBar.sgi_dimple = create_icon (r, SCROLLER_DIMPLE, 0, 0, SCROLLER_DIMPLE_WIDTH, SCROLLER_DIMPLE_HEIGHT); assert (IS_PIXMAP(r->scrollBar.sgi_dimple)); x_offset = y_offset = (ARROW_SOURCE_WIDTH-SGI_ARROW_WIDTH)>>1; r->scrollBar.sgi_upArrow = create_icon (r, SCROLLER_ARROW_UP, x_offset, y_offset, ARROW_SOURCE_WIDTH, ARROW_SOURCE_HEIGHT); r->scrollBar.sgi_upArrowHi = create_icon (r, HI_SCROLLER_ARROW_UP, x_offset, y_offset, ARROW_SOURCE_WIDTH, ARROW_SOURCE_HEIGHT); r->scrollBar.sgi_upArrowLow = create_icon (r, LO_SCROLLER_ARROW_UP, x_offset, y_offset, ARROW_SOURCE_WIDTH, ARROW_SOURCE_HEIGHT); r->scrollBar.sgi_downArrow = create_icon (r, SCROLLER_ARROW_DOWN, x_offset, y_offset, ARROW_SOURCE_WIDTH, ARROW_SOURCE_HEIGHT); r->scrollBar.sgi_downArrowHi = create_icon (r, HI_SCROLLER_ARROW_DOWN, x_offset, y_offset, ARROW_SOURCE_WIDTH, ARROW_SOURCE_HEIGHT); r->scrollBar.sgi_downArrowLow = create_icon (r, LO_SCROLLER_ARROW_DOWN, x_offset, y_offset, ARROW_SOURCE_WIDTH, ARROW_SOURCE_HEIGHT);#ifdef TRANSPARENT /* set background color when there's no transparent */ if (!(ISSET_OPTION(r, Opt_transparent) && ISSET_OPTION(r, Opt_transparent_scrollbar) ))#endif#ifdef BACKGROUND_IMAGE /* set background color when there's no bg image */ if (NOT_PIXMAP(r->scrollBar.pixmap))#endif XSetWindowBackground (r->Xdisplay, r->scrollBar.win, r->scrollBar.sgi_bg);}/* EXTPROTO */void rxvt_scrollbar_exit_sgi (rxvt_t* r){ if (IS_GC(r->scrollBar.sgi_stippleGC)) { XFreeGC (r->Xdisplay, r->scrollBar.sgi_stippleGC); UNSET_GC(r->scrollBar.sgi_stippleGC); } if (IS_PIXMAP(r->scrollBar.sgi_dimple)) { XFreePixmap (r->Xdisplay, r->scrollBar.sgi_dimple); UNSET_PIXMAP(r->scrollBar.sgi_dimple); } if (IS_PIXMAP(r->scrollBar.sgi_upArrow)) { XFreePixmap (r->Xdisplay, r->scrollBar.sgi_upArrow); UNSET_PIXMAP(r->scrollBar.sgi_upArrow); } if (IS_PIXMAP(r->scrollBar.sgi_upArrowHi)) { XFreePixmap (r->Xdisplay, r->scrollBar.sgi_upArrowHi); UNSET_PIXMAP(r->scrollBar.sgi_upArrowHi); } if (IS_PIXMAP(r->scrollBar.sgi_upArrowLow)) { XFreePixmap (r->Xdisplay, r->scrollBar.sgi_upArrowLow); UNSET_PIXMAP(r->scrollBar.sgi_upArrowLow); } if (IS_PIXMAP(r->scrollBar.sgi_downArrow)) { XFreePixmap (r->Xdisplay, r->scrollBar.sgi_downArrow); UNSET_PIXMAP(r->scrollBar.sgi_downArrow); } if (IS_PIXMAP(r->scrollBar.sgi_downArrowHi)) { XFreePixmap (r->Xdisplay, r->scrollBar.sgi_downArrowHi); UNSET_PIXMAP(r->scrollBar.sgi_downArrowHi); } if (IS_PIXMAP(r->scrollBar.sgi_downArrowLow)) { XFreePixmap (r->Xdisplay, r->scrollBar.sgi_downArrowLow); UNSET_PIXMAP(r->scrollBar.sgi_downArrowLow); }}/* EXTPROTO */intrxvt_scrollbar_show_sgi (rxvt_t* r, int update, int last_top, int last_bot, int scroller_len){ register int new_height = r->scrollBar.end + SGI_SB_BUTTON_HEIGHT + ((r->sb_shadow) << 1); if (!update) scrollbar_fill_back (r, r->scrollBar.end); if (0 == AVTS(r)->nscrolled) { /* top button */ XCopyArea (r->Xdisplay, r->scrollBar.sgi_upArrowLow, r->scrollBar.win, r->scrollBar.gc, /* src x, y, width, height */ 0, 0, SGI_ARROW_WIDTH, SGI_ARROW_HEIGHT, /* dst x, y */ ((SB_WIDTH_SGI)>>1)-(SGI_ARROW_WIDTH>>1)+1, SGI_BEVEL_SIZE); /* bottom button */ XCopyArea (r->Xdisplay, r->scrollBar.sgi_downArrowLow, r->scrollBar.win, r->scrollBar.gc, /* src x, y, width, height */ 0, 0, SGI_ARROW_WIDTH, SGI_ARROW_HEIGHT, /* dst x, y */ ((SB_WIDTH_SGI)>>1)-(SGI_ARROW_WIDTH>>1)+1, new_height - SGI_ARROW_HEIGHT - SGI_BEVEL_SIZE); } else { /* (AVTS(r)->nscrolled > 0) */ rxvt_dbgmsg ((DBG_DEBUG, DBG_SCROLLBAR, "top=%d, bot=%d, last_top=%d, last_bot=%d\n", r->scrollBar.top, r->scrollBar.bot, last_top, last_bot)); if (last_top < r->scrollBar.top) XClearArea (r->Xdisplay, r->scrollBar.win, 0, last_top, SB_WIDTH_SGI-1, (last_top - r->scrollBar.top), False); if (r->scrollBar.bot < last_bot) XClearArea (r->Xdisplay, r->scrollBar.win, 0, r->scrollBar.bot, SB_WIDTH_SGI-1, (last_bot - r->scrollBar.bot + 1), False); XClearArea (r->Xdisplay, r->scrollBar.win, 0, r->scrollBar.top, SB_WIDTH_SGI-1, scroller_len, False); /* scroller frame */ CHOOSE_GC_FG(r, r->scrollBar.sgi_vdark); XDrawRectangle (r->Xdisplay, r->scrollBar.win, r->scrollBar.gc, 0, r->scrollBar.top, SB_WIDTH_SGI-1, scroller_len); /* bevel of scroller, inside scroller frame */ sgi_draw_bevel (r, r->scrollBar.win, 1, r->scrollBar.top+1, SB_WIDTH_SGI-3, scroller_len-2); /* sgi_draw_bevel (r, r->scrollBar.win, 0, 0, SB_WIDTH_SGI-1, SGI_SB_BUTTON_HEIGHT); sgi_draw_bevel (r, r->scrollBar.win, 0, new_height-SGI_SB_BUTTON_HEIGHT, SB_WIDTH_SGI-1, SGI_SB_BUTTON_HEIGHT); */ /* dimple */ XCopyArea (r->Xdisplay, r->scrollBar.sgi_dimple, r->scrollBar.win, r->scrollBar.gc, 0, 0, SCROLLER_DIMPLE_WIDTH, SCROLLER_DIMPLE_HEIGHT, ((SB_WIDTH_SGI)>>1)-(SCROLLER_DIMPLE_WIDTH>>1)+1, r->scrollBar.top + ((scroller_len-SCROLLER_DIMPLE_HEIGHT)>>1)); /* top button */ XCopyArea (r->Xdisplay, (scrollbar_isUp()) ? r->scrollBar.sgi_upArrowHi : r->scrollBar.sgi_upArrow, r->scrollBar.win, r->scrollBar.gc, /* src x, y, width, height */ 0, 0, SGI_ARROW_WIDTH, SGI_ARROW_HEIGHT, /* dst x, y */ ((SB_WIDTH_SGI)>>1)-(SGI_ARROW_WIDTH>>1)+1, SGI_BEVEL_SIZE); /* bottom button */ XCopyArea (r->Xdisplay, (scrollbar_isDn()) ? r->scrollBar.sgi_downArrowHi : r->scrollBar.sgi_downArrow, r->scrollBar.win, r->scrollBar.gc, /* src x, y, width, height */ 0, 0, SGI_ARROW_WIDTH, SGI_ARROW_HEIGHT, /* dst x, y */ ((SB_WIDTH_SGI)>>1)-(SGI_ARROW_WIDTH>>1)+1, new_height - SGI_ARROW_HEIGHT - SGI_BEVEL_SIZE); } /* bottom line of top button */ CHOOSE_GC_FG(r, r->scrollBar.sgi_fg); XDrawLine (r->Xdisplay, r->scrollBar.win, r->scrollBar.gc, 0, SGI_SB_BUTTON_HEIGHT-1, SB_WIDTH_SGI-1, SGI_SB_BUTTON_HEIGHT-1); /* top line of bottom button */ XDrawLine (r->Xdisplay, r->scrollBar.win, r->scrollBar.gc, 0, new_height-SGI_SB_BUTTON_HEIGHT, SB_WIDTH_SGI-1, new_height-SGI_SB_BUTTON_HEIGHT); return 1;}#endif /* SGI_SCROLLBAR */#endif /* HAVE_SCROLLBARS *//*----------------------- end-of-file (C source) -----------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -