diff --git a/ChangeLog b/ChangeLog index 3f5cc10..f452d28 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2814,3 +2814,9 @@ Fri Nov 19 16:55:22 PST 1999 Michael Jennings broke. :) ------------------------------------------------------------------------------- +Fri Nov 19 18:43:58 PST 1999 Michael Jennings + + Fixed some other stuff I found, and cleaned up the remaining + occurances of calls to the old scrollbar_show() function. + +------------------------------------------------------------------------------- diff --git a/src/pixmap.c b/src/pixmap.c index c693709..5da5618 100644 --- a/src/pixmap.c +++ b/src/pixmap.c @@ -458,20 +458,16 @@ redraw_image(unsigned char which) { scr_touch(); break; case image_up: - render_simage(images[image_up].current, scrollbar_get_uparrow_win(), scrollbar_arrow_width(), scrollbar_arrow_width(), image_up, 0); - scrollbar_show(0); + scrollbar_draw_uparrow(IMAGE_STATE_CURRENT, MODE_MASK); break; case image_down: - render_simage(images[image_down].current, scrollbar_get_downarrow_win(), scrollbar_arrow_width(), scrollbar_arrow_width(), image_down, 0); - scrollbar_show(0); + scrollbar_draw_downarrow(IMAGE_STATE_CURRENT, MODE_MASK); break; case image_sb: - render_simage(images[image_sb].current, scrollbar_get_win(), scrollbar_trough_width(), scrollbar_trough_height(), image_sb, 0); - scrollbar_show(0); + scrollbar_draw_trough(IMAGE_STATE_CURRENT, MODE_MASK); break; case image_sa: - render_simage(images[image_sa].current, scrollbar_get_anchor_win(), scrollbar_anchor_width(), scrollbar_anchor_height(), image_sa, 0); - scrollbar_show(0); + scrollbar_draw_anchor(IMAGE_STATE_CURRENT, MODE_MASK); break; default: D_PIXMAP(("redraw_image(): Bad value %u\n", which)); diff --git a/src/pixmap.h b/src/pixmap.h index da13ea0..0e205ce 100644 --- a/src/pixmap.h +++ b/src/pixmap.h @@ -102,7 +102,7 @@ enum { #define image_mode_is(which, bit) (images[which].mode & (bit)) #define image_mode_fallback(which) do {if (image_mode_is((which), ALLOW_IMAGE)) {image_set_mode((which), MODE_IMAGE);} else {image_set_mode((which), MODE_SOLID);}} while (0) #define redraw_all_images() do {render_simage(images[image_bg].current, TermWin.vt, TermWin_TotalWidth(), TermWin_TotalHeight(), image_bg, 0); \ - scr_touch(); scrollbar_show(0); if (image_mode_any(MODE_AUTO)) enl_ipc_sync();} while (0) + scr_touch(); scrollbar_draw(MODE_MASK); if (image_mode_any(MODE_AUTO)) enl_ipc_sync();} while (0) /* Elements of an simage to be reset */ #define RESET_NONE (0UL) diff --git a/src/scrollbar.c b/src/scrollbar.c index ff4cc12..fb32eec 100644 --- a/src/scrollbar.c +++ b/src/scrollbar.c @@ -379,7 +379,12 @@ scrollbar_draw_uparrow(unsigned char image_state, unsigned char force_modes) { } if (!image_mode_is(image_up, MODE_MASK)) { /* Solid mode. Redraw every time since it's cheap. */ - XFillRectangle(Xdisplay, scrollbar.up_win, gc_scrollbar, 0, 0, scrollbar_arrow_width(), scrollbar_arrow_height()); + if (Options & Opt_scrollbar_floating) { + XSetWindowBackground(Xdisplay, scrollbar.up_win, PixColors[bgColor]); + XClearWindow(Xdisplay, scrollbar.up_win); + } else { + XFillRectangle(Xdisplay, scrollbar.up_win, gc_scrollbar, 0, 0, scrollbar_arrow_width(), scrollbar_arrow_height()); + } if (image_state == IMAGE_STATE_CLICKED) { scrollbar_set_uparrow_pressed(1); draw_uparrow_clicked(scrollbar.up_win, gc_top, gc_bottom, 0, 0, scrollbar_arrow_width() - 1, scrollbar_get_shadow()); @@ -436,7 +441,12 @@ scrollbar_draw_downarrow(unsigned char image_state, unsigned char force_modes) { } if (!image_mode_is(image_down, MODE_MASK)) { /* Solid mode. Redraw every time since it's cheap. */ - XFillRectangle(Xdisplay, scrollbar.dn_win, gc_scrollbar, 0, 0, scrollbar_arrow_width(), scrollbar_arrow_height()); + if (Options & Opt_scrollbar_floating) { + XSetWindowBackground(Xdisplay, scrollbar.dn_win, PixColors[bgColor]); + XClearWindow(Xdisplay, scrollbar.dn_win); + } else { + XFillRectangle(Xdisplay, scrollbar.dn_win, gc_scrollbar, 0, 0, scrollbar_arrow_width(), scrollbar_arrow_height()); + } if (image_state == IMAGE_STATE_CLICKED) { scrollbar_set_downarrow_pressed(1); draw_downarrow_clicked(scrollbar.dn_win, gc_top, gc_bottom, 0, 0, scrollbar_arrow_width() - 1, scrollbar_get_shadow()); @@ -503,7 +513,12 @@ scrollbar_draw_anchor(unsigned char image_state, unsigned char force_modes) { #endif /* XTERM_SCROLLBAR */ #if defined(MOTIF_SCROLLBAR) || defined(NEXT_SCROLLBAR) if (scrollbar.type == SCROLLBAR_MOTIF || scrollbar.type == SCROLLBAR_NEXT) { - XFillRectangle(Xdisplay, scrollbar.sa_win, gc_scrollbar, 0, 0, scrollbar_anchor_width(), scrollbar_anchor_height()); + if (Options & Opt_scrollbar_floating) { + XSetWindowBackground(Xdisplay, scrollbar.sa_win, PixColors[bgColor]); + XClearWindow(Xdisplay, scrollbar.sa_win); + } else { + XFillRectangle(Xdisplay, scrollbar.sa_win, gc_scrollbar, 0, 0, scrollbar_anchor_width(), scrollbar_anchor_height()); + } if (scrollbar_anchor_is_pressed()) { draw_shadow(scrollbar.sa_win, gc_bottom, gc_top, 0, 0, scrollbar_anchor_width(), scrollbar_anchor_height(), scrollbar_get_shadow()); } else { @@ -929,6 +944,20 @@ scrollbar_reposition_and_draw(unsigned char force_modes) scrollbar.init = 1; } +void +scrollbar_reposition_and_always_draw(void) +{ + D_SCROLLBAR(("scrollbar_reposition_and_always_draw()\n")); + scrollbar_draw_trough(IMAGE_STATE_CURRENT, MODE_MASK); + scrollbar_move_uparrow(); + scrollbar_draw_uparrow(IMAGE_STATE_CURRENT, MODE_MASK); + scrollbar_move_downarrow(); + scrollbar_draw_downarrow(IMAGE_STATE_CURRENT, MODE_MASK); + scrollbar_anchor_update_position(1); + scrollbar_draw_anchor(IMAGE_STATE_CURRENT, MODE_MASK); + scrollbar.init = 1; +} + unsigned char scrollbar_show(short mouseoffset) { diff --git a/src/scrollbar.h b/src/scrollbar.h index 3b3cb17..f703c7a 100644 --- a/src/scrollbar.h +++ b/src/scrollbar.h @@ -86,7 +86,7 @@ #define map_scrollbar(show) do {PrivMode(show, PrivMode_scrollbar); if (scrollbar_mapping(show)) {scr_touch(); parent_resize();} } while (0) #define scrollbar_map_arrows() do {XMapWindow(Xdisplay, scrollbar.up_win); XMapWindow(Xdisplay, scrollbar.dn_win);} while (0) #define scrollbar_unmap_arrows() do {XUnmapWindow(Xdisplay, scrollbar.up_win); XUnmapWindow(Xdisplay, scrollbar.dn_win);} while (0) -#define scrollbar_get_shadow() (((scrollbar.type == SCROLLBAR_XTERM) || (Options & Opt_scrollbar_floating)) ? (0) : (scrollbar.shadow)) +#define scrollbar_get_shadow() ((scrollbar.type == SCROLLBAR_XTERM) ? (0) : (scrollbar.shadow)) #define scrollbar_set_shadow(s) (scrollbar.shadow = (s)) #define scrollbar_get_type() (scrollbar.type) #define scrollbar_set_type(t) (scrollbar.type = (t)) @@ -150,6 +150,7 @@ extern unsigned char scrollbar_set_focus(short has_focus); extern unsigned char scrollbar_anchor_update_position(short mouseoffset); extern void scrollbar_draw(unsigned char force_modes); extern void scrollbar_reposition_and_draw(unsigned char force_modes); +extern void scrollbar_reposition_and_always_draw(void); extern unsigned char scrollbar_show(short); _XFUNCPROTOEND diff --git a/src/term.c b/src/term.c index 888fe26..421245d 100644 --- a/src/term.c +++ b/src/term.c @@ -1881,18 +1881,13 @@ xterm_seq(int op, const char *str) case 11: nstr = (char *) strsep(&tnstr, ";"); OPT_SET_OR_TOGGLE(nstr, Options, Opt_scrollbar_right); - scrollbar_reset(); - map_scrollbar(0); - map_scrollbar(1); - scrollbar_show(0); + scr_touch(); + parent_resize(); break; case 12: nstr = (char *) strsep(&tnstr, ";"); OPT_SET_OR_TOGGLE(nstr, Options, Opt_scrollbar_floating); - scrollbar_reset(); - map_scrollbar(0); - map_scrollbar(1); - scrollbar_show(0); + scrollbar_reposition_and_always_draw(); break; case 13: nstr = (char *) strsep(&tnstr, ";");