summaryrefslogtreecommitdiff
path: root/src/scrollbar.c
diff options
context:
space:
mode:
authorMichael Jennings <mej@kainx.org>2002-05-04 14:25:30 +0000
committerMichael Jennings <mej@kainx.org>2002-05-04 14:25:30 +0000
commit92ca20bcba0968a7597af4ab19dacf19741ccdfc (patch)
tree69cbc1a52f5af971a303e3fcf90430492b367147 /src/scrollbar.c
parent43bd347fbb16d1befe4858389ff7a76f1ecc6dbc (diff)
downloadeterm-92ca20bcba0968a7597af4ab19dacf19741ccdfc.tar.gz
Sat May 4 10:23:38 2002 Michael Jennings (mej)
Ran reformat-code on the tree. Also merged in Azundris' Escreen patch. It's disabled by default for the moment pending further testing, but you can enable it manually by defining ESCREEN. SVN revision: 6202
Diffstat (limited to 'src/scrollbar.c')
-rw-r--r--src/scrollbar.c1531
1 files changed, 777 insertions, 754 deletions
diff --git a/src/scrollbar.c b/src/scrollbar.c
index b3d5f9c..b15be50 100644
--- a/src/scrollbar.c
+++ b/src/scrollbar.c
@@ -43,16 +43,16 @@ static const char cvs_ident[] = "$Id$";
event_dispatcher_data_t scrollbar_event_data;
scrollbar_t scrollbar = {
- None, None, None, None,
- 0, 1,
- 0, 1,
- 0,
- SCROLLBAR_DEFAULT_TYPE,
- 0,
- SHADOW,
- SB_WIDTH, 0,
- 0, 0,
- 0, 0
+ None, None, None, None,
+ 0, 1,
+ 0, 1,
+ 0,
+ SCROLLBAR_DEFAULT_TYPE,
+ 0,
+ SHADOW,
+ SB_WIDTH, 0,
+ 0, 0,
+ 0, 0
};
#ifdef SCROLLBAR_BUTTON_CONTINUAL_SCROLLING
short scroll_arrow_delay;
@@ -61,7 +61,7 @@ static GC gc_scrollbar;
static short last_top = 0, last_bot = 0;
#ifdef XTERM_SCROLLBAR
static GC gc_stipple, gc_border;
-static unsigned char xterm_sb_bits[] = {0xaa, 0x0a, 0x55, 0x05}; /* 12x2 bitmap */
+static unsigned char xterm_sb_bits[] = { 0xaa, 0x0a, 0x55, 0x05 }; /* 12x2 bitmap */
#endif
#if defined(MOTIF_SCROLLBAR) || defined(NEXT_SCROLLBAR)
static GC gc_top, gc_bottom;
@@ -71,25 +71,25 @@ void
scrollbar_event_init_dispatcher(void)
{
- MEMSET(&scrollbar_event_data, 0, sizeof(event_dispatcher_data_t));
+ MEMSET(&scrollbar_event_data, 0, sizeof(event_dispatcher_data_t));
- EVENT_DATA_ADD_HANDLER(scrollbar_event_data, EnterNotify, sb_handle_enter_notify);
- EVENT_DATA_ADD_HANDLER(scrollbar_event_data, LeaveNotify, sb_handle_leave_notify);
- EVENT_DATA_ADD_HANDLER(scrollbar_event_data, FocusIn, sb_handle_focus_in);
- EVENT_DATA_ADD_HANDLER(scrollbar_event_data, FocusOut, sb_handle_focus_out);
- EVENT_DATA_ADD_HANDLER(scrollbar_event_data, GraphicsExpose, sb_handle_expose);
- EVENT_DATA_ADD_HANDLER(scrollbar_event_data, Expose, sb_handle_expose);
- EVENT_DATA_ADD_HANDLER(scrollbar_event_data, ButtonPress, sb_handle_button_press);
- EVENT_DATA_ADD_HANDLER(scrollbar_event_data, ButtonRelease, sb_handle_button_release);
- EVENT_DATA_ADD_HANDLER(scrollbar_event_data, MotionNotify, sb_handle_motion_notify);
+ EVENT_DATA_ADD_HANDLER(scrollbar_event_data, EnterNotify, sb_handle_enter_notify);
+ EVENT_DATA_ADD_HANDLER(scrollbar_event_data, LeaveNotify, sb_handle_leave_notify);
+ EVENT_DATA_ADD_HANDLER(scrollbar_event_data, FocusIn, sb_handle_focus_in);
+ EVENT_DATA_ADD_HANDLER(scrollbar_event_data, FocusOut, sb_handle_focus_out);
+ EVENT_DATA_ADD_HANDLER(scrollbar_event_data, GraphicsExpose, sb_handle_expose);
+ EVENT_DATA_ADD_HANDLER(scrollbar_event_data, Expose, sb_handle_expose);
+ EVENT_DATA_ADD_HANDLER(scrollbar_event_data, ButtonPress, sb_handle_button_press);
+ EVENT_DATA_ADD_HANDLER(scrollbar_event_data, ButtonRelease, sb_handle_button_release);
+ EVENT_DATA_ADD_HANDLER(scrollbar_event_data, MotionNotify, sb_handle_motion_notify);
- event_data_add_mywin(&scrollbar_event_data, scrollbar.win);
- event_data_add_mywin(&scrollbar_event_data, scrollbar.up_win);
- event_data_add_mywin(&scrollbar_event_data, scrollbar.dn_win);
- event_data_add_mywin(&scrollbar_event_data, scrollbar.sa_win);
+ event_data_add_mywin(&scrollbar_event_data, scrollbar.win);
+ event_data_add_mywin(&scrollbar_event_data, scrollbar.up_win);
+ event_data_add_mywin(&scrollbar_event_data, scrollbar.dn_win);
+ event_data_add_mywin(&scrollbar_event_data, scrollbar.sa_win);
- event_data_add_parent(&scrollbar_event_data, TermWin.vt);
- event_data_add_parent(&scrollbar_event_data, TermWin.parent);
+ event_data_add_parent(&scrollbar_event_data, TermWin.vt);
+ event_data_add_parent(&scrollbar_event_data, TermWin.parent);
}
@@ -97,943 +97,966 @@ unsigned char
sb_handle_enter_notify(event_t *ev)
{
- D_EVENTS(("sb_handle_enter_notify(ev [%8p] on window 0x%08x)\n", ev, ev->xany.window));
+ D_EVENTS(("sb_handle_enter_notify(ev [%8p] on window 0x%08x)\n", ev, ev->xany.window));
- REQUIRE_RVAL(XEVENT_IS_MYWIN(ev, &scrollbar_event_data), 0);
+ REQUIRE_RVAL(XEVENT_IS_MYWIN(ev, &scrollbar_event_data), 0);
- if (scrollbar_win_is_uparrow(ev->xany.window)) {
- scrollbar_draw_uparrow(IMAGE_STATE_SELECTED, 0);
- } else if (scrollbar_win_is_downarrow(ev->xany.window)) {
- scrollbar_draw_downarrow(IMAGE_STATE_SELECTED, 0);
- } else if (scrollbar_win_is_anchor(ev->xany.window)) {
- scrollbar_draw_anchor(IMAGE_STATE_SELECTED, 0);
- } else if (scrollbar_win_is_trough(ev->xany.window)) {
- scrollbar_draw_trough(IMAGE_STATE_SELECTED, 0);
- }
- return 1;
+ if (scrollbar_win_is_uparrow(ev->xany.window)) {
+ scrollbar_draw_uparrow(IMAGE_STATE_SELECTED, 0);
+ } else if (scrollbar_win_is_downarrow(ev->xany.window)) {
+ scrollbar_draw_downarrow(IMAGE_STATE_SELECTED, 0);
+ } else if (scrollbar_win_is_anchor(ev->xany.window)) {
+ scrollbar_draw_anchor(IMAGE_STATE_SELECTED, 0);
+ } else if (scrollbar_win_is_trough(ev->xany.window)) {
+ scrollbar_draw_trough(IMAGE_STATE_SELECTED, 0);
+ }
+ return 1;
}
unsigned char
sb_handle_leave_notify(event_t *ev)
{
- D_EVENTS(("sb_handle_leave_notify(ev [%8p] on window 0x%08x)\n", ev, ev->xany.window));
+ D_EVENTS(("sb_handle_leave_notify(ev [%8p] on window 0x%08x)\n", ev, ev->xany.window));
- REQUIRE_RVAL(XEVENT_IS_MYWIN(ev, &scrollbar_event_data), 0);
+ REQUIRE_RVAL(XEVENT_IS_MYWIN(ev, &scrollbar_event_data), 0);
- if (scrollbar_win_is_uparrow(ev->xany.window)) {
- scrollbar_draw_uparrow(IMAGE_STATE_NORMAL, 0);
- } else if (scrollbar_win_is_downarrow(ev->xany.window)) {
- scrollbar_draw_downarrow(IMAGE_STATE_NORMAL, 0);
- } else if (scrollbar_win_is_anchor(ev->xany.window)) {
- scrollbar_draw_anchor(IMAGE_STATE_NORMAL, 0);
- } else if (scrollbar_win_is_trough(ev->xany.window)) {
- scrollbar_draw_trough(IMAGE_STATE_NORMAL, 0);
- }
- return 1;
+ if (scrollbar_win_is_uparrow(ev->xany.window)) {
+ scrollbar_draw_uparrow(IMAGE_STATE_NORMAL, 0);
+ } else if (scrollbar_win_is_downarrow(ev->xany.window)) {
+ scrollbar_draw_downarrow(IMAGE_STATE_NORMAL, 0);
+ } else if (scrollbar_win_is_anchor(ev->xany.window)) {
+ scrollbar_draw_anchor(IMAGE_STATE_NORMAL, 0);
+ } else if (scrollbar_win_is_trough(ev->xany.window)) {
+ scrollbar_draw_trough(IMAGE_STATE_NORMAL, 0);
+ }
+ return 1;
}
unsigned char
sb_handle_focus_in(event_t *ev)
{
- D_EVENTS(("sb_handle_focus_in(ev [%8p] on window 0x%08x)\n", ev, ev->xany.window));
+ D_EVENTS(("sb_handle_focus_in(ev [%8p] on window 0x%08x)\n", ev, ev->xany.window));
- REQUIRE_RVAL(XEVENT_IS_MYWIN(ev, &scrollbar_event_data), 0);
+ REQUIRE_RVAL(XEVENT_IS_MYWIN(ev, &scrollbar_event_data), 0);
- return 1;
+ return 1;
}
unsigned char
sb_handle_focus_out(event_t *ev)
{
- D_EVENTS(("sb_handle_focus_out(ev [%8p] on window 0x%08x)\n", ev, ev->xany.window));
+ D_EVENTS(("sb_handle_focus_out(ev [%8p] on window 0x%08x)\n", ev, ev->xany.window));
- REQUIRE_RVAL(XEVENT_IS_MYWIN(ev, &scrollbar_event_data), 0);
+ REQUIRE_RVAL(XEVENT_IS_MYWIN(ev, &scrollbar_event_data), 0);
- return 1;
+ return 1;
}
unsigned char
sb_handle_expose(event_t *ev)
{
- XEvent unused_xevent;
+ XEvent unused_xevent;
- D_EVENTS(("sb_handle_expose(ev [%8p] on window 0x%08x)\n", ev, ev->xany.window));
+ D_EVENTS(("sb_handle_expose(ev [%8p] on window 0x%08x)\n", ev, ev->xany.window));
- REQUIRE_RVAL(XEVENT_IS_MYWIN(ev, &scrollbar_event_data), 0);
+ REQUIRE_RVAL(XEVENT_IS_MYWIN(ev, &scrollbar_event_data), 0);
- while (XCheckTypedWindowEvent(Xdisplay, ev->xany.window, Expose, &unused_xevent));
- while (XCheckTypedWindowEvent(Xdisplay, ev->xany.window, GraphicsExpose, &unused_xevent));
+ while (XCheckTypedWindowEvent(Xdisplay, ev->xany.window, Expose, &unused_xevent));
+ while (XCheckTypedWindowEvent(Xdisplay, ev->xany.window, GraphicsExpose, &unused_xevent));
- if (scrollbar_win_is_uparrow(ev->xany.window)) {
- scrollbar_draw_uparrow(IMAGE_STATE_CURRENT, 0);
- } else if (scrollbar_win_is_downarrow(ev->xany.window)) {
- scrollbar_draw_downarrow(IMAGE_STATE_CURRENT, 0);
- } else if (scrollbar_win_is_anchor(ev->xany.window)) {
- scrollbar_draw_anchor(IMAGE_STATE_CURRENT, 0);
- } else if (scrollbar_win_is_trough(ev->xany.window)) {
- scrollbar_draw_trough(IMAGE_STATE_CURRENT, 0);
- }
- return 1;
+ if (scrollbar_win_is_uparrow(ev->xany.window)) {
+ scrollbar_draw_uparrow(IMAGE_STATE_CURRENT, 0);
+ } else if (scrollbar_win_is_downarrow(ev->xany.window)) {
+ scrollbar_draw_downarrow(IMAGE_STATE_CURRENT, 0);
+ } else if (scrollbar_win_is_anchor(ev->xany.window)) {
+ scrollbar_draw_anchor(IMAGE_STATE_CURRENT, 0);
+ } else if (scrollbar_win_is_trough(ev->xany.window)) {
+ scrollbar_draw_trough(IMAGE_STATE_CURRENT, 0);
+ }
+ return 1;
}
unsigned char
sb_handle_button_press(event_t *ev)
{
- D_EVENTS(("sb_handle_button_press(ev [%8p] on window 0x%08x)\n", ev, ev->xany.window));
+ D_EVENTS(("sb_handle_button_press(ev [%8p] on window 0x%08x)\n", ev, ev->xany.window));
- REQUIRE_RVAL(XEVENT_IS_MYWIN(ev, &scrollbar_event_data), 0);
+ REQUIRE_RVAL(XEVENT_IS_MYWIN(ev, &scrollbar_event_data), 0);
- button_state.bypass_keystate = (ev->xbutton.state & (Mod1Mask | ShiftMask));
- button_state.report_mode = (button_state.bypass_keystate ? 0 : ((PrivateModes & PrivMode_mouse_report) ? 1 : 0));
- scrollbar_cancel_motion();
+ button_state.bypass_keystate = (ev->xbutton.state & (Mod1Mask | ShiftMask));
+ button_state.report_mode = (button_state.bypass_keystate ? 0 : ((PrivateModes & PrivMode_mouse_report) ? 1 : 0));
+ scrollbar_cancel_motion();
#ifndef NO_SCROLLBAR_REPORT
- if (button_state.report_mode) {
- /* Mouse report disabled scrollbar. Arrows send cursor key up/down, trough sends pageup/pagedown */
- if (scrollbar_win_is_uparrow(ev->xany.window))
- tt_printf((unsigned char *) "\033[A");
- else if (scrollbar_win_is_downarrow(ev->xany.window))
- tt_printf((unsigned char *) "\033[B");
- else {
- switch (ev->xbutton.button) {
- case Button2:
- tt_printf((unsigned char *) "\014");
- break;
- case Button1:
- tt_printf((unsigned char *) "\033[6~");
- break;
- case Button3:
- tt_printf((unsigned char *) "\033[5~");
- break;
- }
- }
- } else
+ if (button_state.report_mode) {
+ /* Mouse report disabled scrollbar. Arrows send cursor key up/down, trough sends pageup/pagedown */
+ if (scrollbar_win_is_uparrow(ev->xany.window))
+ tt_printf((unsigned char *) "\033[A");
+ else if (scrollbar_win_is_downarrow(ev->xany.window))
+ tt_printf((unsigned char *) "\033[B");
+ else {
+ switch (ev->xbutton.button) {
+ case Button2:
+ tt_printf((unsigned char *) "\014");
+ break;
+ case Button1:
+ tt_printf((unsigned char *) "\033[6~");
+ break;
+ case Button3:
+ tt_printf((unsigned char *) "\033[5~");
+ break;
+ }
+ }
+ } else
#endif /* NO_SCROLLBAR_REPORT */
- {
- D_EVENTS(("ButtonPress event for window 0x%08x at %d, %d\n", ev->xany.window, ev->xbutton.x, ev->xbutton.y));
- D_EVENTS((" up [0x%08x], down [0x%08x], anchor [0x%08x], trough [0x%08x]\n", scrollbar.up_win, scrollbar.dn_win, scrollbar.sa_win, scrollbar.win));
+ {
+ D_EVENTS(("ButtonPress event for window 0x%08x at %d, %d\n", ev->xany.window, ev->xbutton.x, ev->xbutton.y));
+ D_EVENTS((" up [0x%08x], down [0x%08x], anchor [0x%08x], trough [0x%08x]\n", scrollbar.up_win, scrollbar.dn_win, scrollbar.sa_win,
+ scrollbar.win));
- if (scrollbar_win_is_uparrow(ev->xany.window)) {
- scrollbar_draw_uparrow(IMAGE_STATE_CLICKED, 0);
+ if (scrollbar_win_is_uparrow(ev->xany.window)) {
+ scrollbar_draw_uparrow(IMAGE_STATE_CLICKED, 0);
#ifdef SCROLLBAR_BUTTON_CONTINUAL_SCROLLING
- scroll_arrow_delay = SCROLLBAR_INITIAL_DELAY;
+ scroll_arrow_delay = SCROLLBAR_INITIAL_DELAY;
#endif
- if (scr_page(UP, 1)) {
- scrollbar_set_uparrow_pressed(1);
- }
- } else if (scrollbar_win_is_downarrow(ev->xany.window)) {
- scrollbar_draw_downarrow(IMAGE_STATE_CLICKED, 0);
+ if (scr_page(UP, 1)) {
+ scrollbar_set_uparrow_pressed(1);
+ }
+ } else if (scrollbar_win_is_downarrow(ev->xany.window)) {
+ scrollbar_draw_downarrow(IMAGE_STATE_CLICKED, 0);
#ifdef SCROLLBAR_BUTTON_CONTINUAL_SCROLLING
- scroll_arrow_delay = SCROLLBAR_INITIAL_DELAY;
+ scroll_arrow_delay = SCROLLBAR_INITIAL_DELAY;
#endif
- if (scr_page(DN, 1)) {
- scrollbar_set_downarrow_pressed(1);
- }
- } else {
- if (scrollbar_win_is_anchor(ev->xany.window)) {
- scrollbar_set_anchor_pressed(1);
- scrollbar_draw_anchor(IMAGE_STATE_CLICKED, 0);
- }
- switch (ev->xbutton.button) {
- case Button2:
- button_state.mouse_offset = scrollbar_anchor_height() / 2; /* Align to center */
- if (!scrollbar_win_is_anchor(ev->xany.window)) {
- scr_move_to(scrollbar_position(ev->xbutton.y) - button_state.mouse_offset, scrollbar_scrollarea_height());
- } else if (scrollbar.type == SCROLLBAR_XTERM) {
- scr_move_to(scrollbar.anchor_top + ev->xbutton.y - button_state.mouse_offset, scrollbar_scrollarea_height());
- }
- scrollbar_set_motion(1);
- break;
-
- case Button1:
- button_state.mouse_offset = ((scrollbar_win_is_anchor(ev->xany.window)) ? (MAX(ev->xbutton.y, 1)) : (1));
- /* drop */
- case Button3:
+ if (scr_page(DN, 1)) {
+ scrollbar_set_downarrow_pressed(1);
+ }
+ } else {
+ if (scrollbar_win_is_anchor(ev->xany.window)) {
+ scrollbar_set_anchor_pressed(1);
+ scrollbar_draw_anchor(IMAGE_STATE_CLICKED, 0);
+ }
+ switch (ev->xbutton.button) {
+ case Button2:
+ button_state.mouse_offset = scrollbar_anchor_height() / 2; /* Align to center */
+ if (!scrollbar_win_is_anchor(ev->xany.window)) {
+ scr_move_to(scrollbar_position(ev->xbutton.y) - button_state.mouse_offset, scrollbar_scrollarea_height());
+ } else if (scrollbar.type == SCROLLBAR_XTERM) {
+ scr_move_to(scrollbar.anchor_top + ev->xbutton.y - button_state.mouse_offset, scrollbar_scrollarea_height());
+ }
+ scrollbar_set_motion(1);
+ break;
+
+ case Button1:
+ button_state.mouse_offset = ((scrollbar_win_is_anchor(ev->xany.window)) ? (MAX(ev->xbutton.y, 1)) : (1));
+ /* drop */
+ case Button3:
#if defined(MOTIF_SCROLLBAR) || defined(NEXT_SCROLLBAR)
- if (scrollbar.type == SCROLLBAR_MOTIF || scrollbar.type == SCROLLBAR_NEXT) {
- if (scrollbar_is_above_anchor(ev->xany.window, ev->xbutton.y)) {
- scrollbar_draw_trough(IMAGE_STATE_CLICKED, 0);
- scr_page(UP, TermWin.nrow - CONTEXT_LINES);
- } else if (scrollbar_is_below_anchor(ev->xany.window, ev->xbutton.y)) {
- scrollbar_draw_trough(IMAGE_STATE_CLICKED, 0);
- scr_page(DN, TermWin.nrow - CONTEXT_LINES);
- } else {
- scrollbar_set_motion(1);
- }
- }
+ if (scrollbar.type == SCROLLBAR_MOTIF || scrollbar.type == SCROLLBAR_NEXT) {
+ if (scrollbar_is_above_anchor(ev->xany.window, ev->xbutton.y)) {
+ scrollbar_draw_trough(IMAGE_STATE_CLICKED, 0);
+ scr_page(UP, TermWin.nrow - CONTEXT_LINES);
+ } else if (scrollbar_is_below_anchor(ev->xany.window, ev->xbutton.y)) {
+ scrollbar_draw_trough(IMAGE_STATE_CLICKED, 0);
+ scr_page(DN, TermWin.nrow - CONTEXT_LINES);
+ } else {
+ scrollbar_set_motion(1);
+ }
+ }
#endif /* MOTIF_SCROLLBAR || NEXT_SCROLLBAR */
#ifdef XTERM_SCROLLBAR
- if (scrollbar.type == SCROLLBAR_XTERM) {
- scr_page((ev->xbutton.button == Button1 ? DN : UP), TermWin.nrow - CONTEXT_LINES);
- }
+ if (scrollbar.type == SCROLLBAR_XTERM) {
+ scr_page((ev->xbutton.button == Button1 ? DN : UP), TermWin.nrow - CONTEXT_LINES);
+ }
#endif /* XTERM_SCROLLBAR */
- break;
- }
+ break;
+ }
+ }
}
- }
- return 1;
+ return 1;
}
unsigned char
sb_handle_button_release(event_t *ev)
{
- Window root, child;
- int root_x, root_y, win_x, win_y;
- unsigned int mask;
-
- D_EVENTS(("sb_handle_button_release(ev [%8p] on window 0x%08x)\n", ev, ev->xany.window));
-
- REQUIRE_RVAL(XEVENT_IS_MYWIN(ev, &scrollbar_event_data), 0);
- button_state.mouse_offset = 0;
- button_state.report_mode = (button_state.bypass_keystate ? 0 : ((PrivateModes & PrivMode_mouse_report) ? 1 : 0));
-
- XQueryPointer(Xdisplay, scrollbar_get_win(), &root, &child, &root_x, &root_y, &win_x, &win_y, &mask);
- scrollbar_cancel_motion();
- if (scrollbar_win_is_uparrow(child)) {
- scrollbar_draw_uparrow(IMAGE_STATE_SELECTED, 0);
- } else {
- scrollbar_draw_uparrow(IMAGE_STATE_NORMAL, 0);
- }
- if (scrollbar_win_is_downarrow(child)) {
- scrollbar_draw_downarrow(IMAGE_STATE_SELECTED, 0);
- } else {
- scrollbar_draw_downarrow(IMAGE_STATE_NORMAL, 0);
- }
- if (scrollbar_win_is_anchor(child)) {
- scrollbar_draw_anchor(IMAGE_STATE_SELECTED, 0);
- } else {
- scrollbar_draw_anchor(IMAGE_STATE_NORMAL, 0);
- }
- if (scrollbar_win_is_trough(child)) {
- scrollbar_draw_trough(IMAGE_STATE_SELECTED, 0);
- } else {
- scrollbar_draw_trough(IMAGE_STATE_NORMAL, 0);
- }
- return 1;
+ Window root, child;
+ int root_x, root_y, win_x, win_y;
+ unsigned int mask;
+
+ D_EVENTS(("sb_handle_button_release(ev [%8p] on window 0x%08x)\n", ev, ev->xany.window));
+
+ REQUIRE_RVAL(XEVENT_IS_MYWIN(ev, &scrollbar_event_data), 0);
+ button_state.mouse_offset = 0;
+ button_state.report_mode = (button_state.bypass_keystate ? 0 : ((PrivateModes & PrivMode_mouse_report) ? 1 : 0));
+
+ XQueryPointer(Xdisplay, scrollbar_get_win(), &root, &child, &root_x, &root_y, &win_x, &win_y, &mask);
+ scrollbar_cancel_motion();
+ if (scrollbar_win_is_uparrow(child)) {
+ scrollbar_draw_uparrow(IMAGE_STATE_SELECTED, 0);
+ } else {
+ scrollbar_draw_uparrow(IMAGE_STATE_NORMAL, 0);
+ }
+ if (scrollbar_win_is_downarrow(child)) {
+ scrollbar_draw_downarrow(IMAGE_STATE_SELECTED, 0);
+ } else {
+ scrollbar_draw_downarrow(IMAGE_STATE_NORMAL, 0);
+ }
+ if (scrollbar_win_is_anchor(child)) {
+ scrollbar_draw_anchor(IMAGE_STATE_SELECTED, 0);
+ } else {
+ scrollbar_draw_anchor(IMAGE_STATE_NORMAL, 0);
+ }
+ if (scrollbar_win_is_trough(child)) {
+ scrollbar_draw_trough(IMAGE_STATE_SELECTED, 0);
+ } else {
+ scrollbar_draw_trough(IMAGE_STATE_NORMAL, 0);
+ }
+ return 1;
}
unsigned char
sb_handle_motion_notify(event_t *ev)
{
- D_EVENTS(("sb_handle_motion_notify(ev [%8p] on window 0x%08x)\n", ev, ev->xany.window));
+ D_EVENTS(("sb_handle_motion_notify(ev [%8p] on window 0x%08x)\n", ev, ev->xany.window));
- REQUIRE_RVAL(XEVENT_IS_MYWIN(ev, &scrollbar_event_data), 0);
- if ((PrivateModes & PrivMode_mouse_report) && !(button_state.bypass_keystate))
- return 1;
+ REQUIRE_RVAL(XEVENT_IS_MYWIN(ev, &scrollbar_event_data), 0);
+ if ((PrivateModes & PrivMode_mouse_report) && !(button_state.bypass_keystate))
+ return 1;
- D_EVENTS(("MotionNotify event for window 0x%08x\n", ev->xany.window));
- D_EVENTS((" up [0x%08x], down [0x%08x], anchor [0x%08x], trough [0x%08x]\n", scrollbar.up_win, scrollbar.dn_win, scrollbar.sa_win, scrollbar.win));
-
- if ((scrollbar_win_is_trough(ev->xany.window) || scrollbar_win_is_anchor(ev->xany.window)) && scrollbar_is_moving()) {
- Window unused_root, unused_child;
- int unused_root_x, unused_root_y;
- unsigned int unused_mask;
-
- while (XCheckTypedWindowEvent(Xdisplay, scrollbar.win, MotionNotify, ev));
- XQueryPointer(Xdisplay, scrollbar.win, &unused_root, &unused_child, &unused_root_x, &unused_root_y, &(ev->xbutton.x), &(ev->xbutton.y), &unused_mask);
- scr_move_to(scrollbar_position(ev->xbutton.y) - button_state.mouse_offset, scrollbar_scrollarea_height());
- refresh_count = refresh_limit = 0;
- scr_refresh(refresh_type);
- scrollbar_anchor_update_position(button_state.mouse_offset);
- }
- return 1;
+ D_EVENTS(("MotionNotify event for window 0x%08x\n", ev->xany.window));
+ D_EVENTS((" up [0x%08x], down [0x%08x], anchor [0x%08x], trough [0x%08x]\n", scrollbar.up_win, scrollbar.dn_win, scrollbar.sa_win,
+ scrollbar.win));
+
+ if ((scrollbar_win_is_trough(ev->xany.window) || scrollbar_win_is_anchor(ev->xany.window)) && scrollbar_is_moving()) {
+ Window unused_root, unused_child;
+ int unused_root_x, unused_root_y;
+ unsigned int unused_mask;
+
+ while (XCheckTypedWindowEvent(Xdisplay, scrollbar.win, MotionNotify, ev));
+ XQueryPointer(Xdisplay, scrollbar.win, &unused_root, &unused_child, &unused_root_x, &unused_root_y, &(ev->xbutton.x),
+ &(ev->xbutton.y), &unused_mask);
+ scr_move_to(scrollbar_position(ev->xbutton.y) - button_state.mouse_offset, scrollbar_scrollarea_height());
+ refresh_count = refresh_limit = 0;
+ scr_refresh(refresh_type);
+ scrollbar_anchor_update_position(button_state.mouse_offset);
+ }
+ return 1;
}
unsigned char
scrollbar_dispatch_event(event_t *ev)
{
- if (scrollbar_event_data.handlers[ev->type] != NULL) {
- return ((scrollbar_event_data.handlers[ev->type]) (ev));
- }
- return (0);
+ if (scrollbar_event_data.handlers[ev->type] != NULL) {
+ return ((scrollbar_event_data.handlers[ev->type]) (ev));
+ }
+ return (0);
}
/******************************************************************************/
void
-scrollbar_draw_uparrow(unsigned char image_state, unsigned char force_modes) {
-
- D_SCROLLBAR(("scrollbar_draw_uparrow(%u, 0x%02x)\n", (unsigned int) image_state, (unsigned int) force_modes));
- if (image_state != IMAGE_STATE_CURRENT) {
- if ((image_state == IMAGE_STATE_NORMAL) && (images[image_up].current != images[image_up].norm)) {
- images[image_up].current = images[image_up].norm;
- force_modes = MODE_MASK;
- } else if ((image_state == IMAGE_STATE_SELECTED) && (images[image_up].current != images[image_up].selected)) {
- images[image_up].current = images[image_up].selected;
- force_modes = MODE_MASK;
- } else if ((image_state == IMAGE_STATE_CLICKED) && (images[image_up].current != images[image_up].clicked)) {
- images[image_up].current = images[image_up].clicked;
- force_modes = MODE_MASK;
- } else if ((image_state == IMAGE_STATE_DISABLED) && (images[image_up].current != images[image_up].disabled)) {
- images[image_up].current = images[image_up].disabled;
- force_modes = MODE_MASK;
+scrollbar_draw_uparrow(unsigned char image_state, unsigned char force_modes)
+{
+
+ D_SCROLLBAR(("scrollbar_draw_uparrow(%u, 0x%02x)\n", (unsigned int) image_state, (unsigned int) force_modes));
+ if (image_state != IMAGE_STATE_CURRENT) {
+ if ((image_state == IMAGE_STATE_NORMAL) && (images[image_up].current != images[image_up].norm)) {
+ images[image_up].current = images[image_up].norm;
+ force_modes = MODE_MASK;
+ } else if ((image_state == IMAGE_STATE_SELECTED) && (images[image_up].current != images[image_up].selected)) {
+ images[image_up].current = images[image_up].selected;
+ force_modes = MODE_MASK;
+ } else if ((image_state == IMAGE_STATE_CLICKED) && (images[image_up].current != images[image_up].clicked)) {
+ images[image_up].current = images[image_up].clicked;
+ force_modes = MODE_MASK;
+ } else if ((image_state == IMAGE_STATE_DISABLED) && (images[image_up].current != images[image_up].disabled)) {
+ images[image_up].current = images[image_up].disabled;
+ force_modes = MODE_MASK;
+ }
}
- }
- if (!image_mode_is(image_up, MODE_MASK)) {
- /* Solid mode. Redraw every time since it's cheap. */
- if (Options & Opt_scrollbar_floating) {
- XSetWindowBackground(Xdisplay, scrollbar.up_win, PixColors[bgColor]);
- XClearWindow(Xdisplay, scrollbar.up_win);
- } else {
- XSetForeground(Xdisplay, gc_scrollbar, images[image_up].current->bg);
- XFillRectangle(Xdisplay, scrollbar.up_win, gc_scrollbar, 0, 0, scrollbar_arrow_width(), scrollbar_arrow_height());
+ if (!image_mode_is(image_up, MODE_MASK)) {
+ /* Solid mode. Redraw every time since it's cheap. */
+ if (Options & Opt_scrollbar_floating) {
+ XSetWindowBackground(Xdisplay, scrollbar.up_win, PixColors[bgColor]);
+ XClearWindow(Xdisplay, scrollbar.up_win);
+ } else {
+ XSetForeground(Xdisplay, gc_scrollbar, images[image_up].current->bg);
+ XFillRectangle(Xdisplay, scrollbar.up_win, gc_scrollbar, 0, 0, scrollbar_arrow_width(), scrollbar_arrow_height());
+ }
+ XSetForeground(Xdisplay, gc_top, get_top_shadow_color(images[image_up].current->bg, ""));
+ XSetForeground(Xdisplay, gc_bottom, get_bottom_shadow_color(images[image_up].current->bg, ""));
+ 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());
+ } else {
+ scrollbar_set_uparrow_pressed(0);
+ draw_uparrow_raised(scrollbar.up_win, gc_top, gc_bottom, 0, 0, scrollbar_arrow_width() - 1, scrollbar_get_shadow());
+ }
+ return;
}
- XSetForeground(Xdisplay, gc_top, get_top_shadow_color(images[image_up].current->bg, ""));
- XSetForeground(Xdisplay, gc_bottom, get_bottom_shadow_color(images[image_up].current->bg, ""));
- 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());
- } else {
- scrollbar_set_uparrow_pressed(0);
- draw_uparrow_raised(scrollbar.up_win, gc_top, gc_bottom, 0, 0, scrollbar_arrow_width() - 1, scrollbar_get_shadow());
+ if (!((images[image_up].mode & MODE_MASK) & (force_modes))) {
+ return;
}
- return;
- }
- if (!((images[image_up].mode & MODE_MASK) & (force_modes))) {
- return;
- }
- render_simage(images[image_up].current, scrollbar.up_win, scrollbar_arrow_width(), scrollbar_arrow_height(), image_up, 0);
+ render_simage(images[image_up].current, scrollbar.up_win, scrollbar_arrow_width(), scrollbar_arrow_height(), image_up, 0);
}
unsigned char
-scrollbar_move_uparrow(void) {
- static int last_x = -1, last_y = -1, last_w = -1, last_h = -1;
- int x, y, w, h;
-
- D_SCROLLBAR(("scrollbar_move_uparrow()\n"));
- x = scrollbar_get_shadow();
- y = scrollbar_up_loc();
- w = scrollbar_arrow_width();
- h = scrollbar_arrow_height();
- if ((last_x == x) && (last_y == y) && (last_w == w) && (last_h == h)) {
- D_SCROLLBAR((" -> No move required, returning 0.\n"));
- return 0;
- }
- D_SCROLLBAR((" -> XMoveResizeWindow(Xdisplay, 0x%08x, %d, %d, %d, %d)\n", scrollbar.up_win, x, y, w, h));
- XMoveResizeWindow(Xdisplay, scrollbar.up_win, x, y, w, h);
- last_x = x;
- last_y = y;
- last_w = w;
- last_h = h;
- return 1;
+scrollbar_move_uparrow(void)
+{
+ static int last_x = -1, last_y = -1, last_w = -1, last_h = -1;
+ int x, y, w, h;
+
+ D_SCROLLBAR(("scrollbar_move_uparrow()\n"));
+ x = scrollbar_get_shadow();
+ y = scrollbar_up_loc();
+ w = scrollbar_arrow_width();
+ h = scrollbar_arrow_height();
+ if ((last_x == x) && (last_y == y) && (last_w == w) && (last_h == h)) {
+ D_SCROLLBAR((" -> No move required, returning 0.\n"));
+ return 0;
+ }
+ D_SCROLLBAR((" -> XMoveResizeWindow(Xdisplay, 0x%08x, %d, %d, %d, %d)\n", scrollbar.up_win, x, y, w, h));
+ XMoveResizeWindow(Xdisplay, scrollbar.up_win, x, y, w, h);
+ last_x = x;
+ last_y = y;
+ last_w = w;
+ last_h = h;
+ return 1;
}
void
-scrollbar_draw_downarrow(unsigned char image_state, unsigned char force_modes) {
-
- D_SCROLLBAR(("scrollbar_draw_downarrow(%u, 0x%02x)\n", (unsigned int) image_state, (unsigned int) force_modes));
- if (image_state != IMAGE_STATE_CURRENT) {
- if ((image_state == IMAGE_STATE_NORMAL) && (images[image_down].current != images[image_down].norm)) {
- images[image_down].current = images[image_down].norm;
- force_modes = MODE_MASK;
- } else if ((image_state == IMAGE_STATE_SELECTED) && (images[image_down].current != images[image_down].selected)) {
- images[image_down].current = images[image_down].selected;
- force_modes = MODE_MASK;
- } else if ((image_state == IMAGE_STATE_CLICKED) && (images[image_down].current != images[image_down].clicked)) {
- images[image_down].current = images[image_down].clicked;
- force_modes = MODE_MASK;
- } else if ((image_state == IMAGE_STATE_DISABLED) && (images[image_down].current != images[image_down].disabled)) {
- images[image_down].current = images[image_down].disabled;
- force_modes = MODE_MASK;
+scrollbar_draw_downarrow(unsigned char image_state, unsigned char force_modes)
+{
+
+ D_SCROLLBAR(("scrollbar_draw_downarrow(%u, 0x%02x)\n", (unsigned int) image_state, (unsigned int) force_modes));
+ if (image_state != IMAGE_STATE_CURRENT) {
+ if ((image_state == IMAGE_STATE_NORMAL) && (images[image_down].current != images[image_down].norm)) {
+ images[image_down].current = images[image_down].norm;
+ force_modes = MODE_MASK;
+ } else if ((image_state == IMAGE_STATE_SELECTED) && (images[image_down].current != images[image_down].selected)) {
+ images[image_down].current = images[image_down].selected;
+ force_modes = MODE_MASK;
+ } else if ((image_state == IMAGE_STATE_CLICKED) && (images[image_down].current != images[image_down].clicked)) {
+ images[image_down].current = images[image_down].clicked;
+ force_modes = MODE_MASK;
+ } else if ((image_state == IMAGE_STATE_DISABLED) && (images[image_down].current != images[image_down].disabled)) {
+ images[image_down].current = images[image_down].disabled;
+ force_modes = MODE_MASK;
+ }
}
- }
- if (!image_mode_is(image_down, MODE_MASK)) {
- /* Solid mode. Redraw every time since it's cheap. */
- if (Options & Opt_scrollbar_floating) {
- XSetWindowBackground(Xdisplay, scrollbar.dn_win, PixColors[bgColor]);
- XClearWindow(Xdisplay, scrollbar.dn_win);
- } else {
- XSetForeground(Xdisplay, gc_scrollbar, images[image_down].current->bg);
- XFillRectangle(Xdisplay, scrollbar.dn_win, gc_scrollbar, 0, 0, scrollbar_arrow_width(), scrollbar_arrow_height());
+ if (!image_mode_is(image_down, MODE_MASK)) {
+ /* Solid mode. Redraw every time since it's cheap. */
+ if (Options & Opt_scrollbar_floating) {
+ XSetWindowBackground(Xdisplay, scrollbar.dn_win, PixColors[bgColor]);
+ XClearWindow(Xdisplay, scrollbar.dn_win);
+ } else {
+ XSetForeground(Xdisplay, gc_scrollbar, images[image_down].current->bg);
+ XFillRectangle(Xdisplay, scrollbar.dn_win, gc_scrollbar, 0, 0, scrollbar_arrow_width(), scrollbar_arrow_height());
+ }
+ XSetForeground(Xdisplay, gc_top, get_top_shadow_color(images[image_down].current->bg, ""));
+ XSetForeground(Xdisplay, gc_bottom, get_bottom_shadow_color(images[image_down].current->bg, ""));
+ 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());
+ } else {
+ scrollbar_set_downarrow_pressed(0);
+ draw_downarrow_raised(scrollbar.dn_win, gc_top, gc_bottom, 0, 0, scrollbar_arrow_width() - 1, scrollbar_get_shadow());
+ }
+ return;
}
- XSetForeground(Xdisplay, gc_top, get_top_shadow_color(images[image_down].current->bg, ""));
- XSetForeground(Xdisplay, gc_bottom, get_bottom_shadow_color(images[image_down].current->bg, ""));
- 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());
- } else {
- scrollbar_set_downarrow_pressed(0);
- draw_downarrow_raised(scrollbar.dn_win, gc_top, gc_bottom, 0, 0, scrollbar_arrow_width() - 1, scrollbar_get_shadow());
+ if (!((images[image_down].mode & MODE_MASK) & (force_modes))) {
+ return;
}
- return;
- }
- if (!((images[image_down].mode & MODE_MASK) & (force_modes))) {
- return;
- }
- render_simage(images[image_down].current, scrollbar.dn_win, scrollbar_arrow_width(), scrollbar_arrow_height(), image_down, 0);
+ render_simage(images[image_down].current, scrollbar.dn_win, scrollbar_arrow_width(), scrollbar_arrow_height(), image_down, 0);
}
unsigned char
-scrollbar_move_downarrow(void) {
- static int last_x = -1, last_y = -1, last_w = -1, last_h = -1;
- int x, y, w, h;
-
- D_SCROLLBAR(("scrollbar_move_downarrow()\n"));
- x = scrollbar_get_shadow();
- y = scrollbar_dn_loc();
- w = scrollbar_arrow_width();
- h = scrollbar_arrow_height();
- if ((last_x == x) && (last_y == y) && (last_w == w) && (last_h == h)) {
- D_SCROLLBAR((" -> No move required, returning 0.\n"));
- return 0;
- }
- D_SCROLLBAR((" -> XMoveResizeWindow(Xdisplay, 0x%08x, %d, %d, %d, %d)\n", scrollbar.dn_win, x, y, w, h));
- XMoveResizeWindow(Xdisplay, scrollbar.dn_win, x, y, w, h);
- last_x = x;
- last_y = y;
- last_w = w;
- last_h = h;
- return 1;
+scrollbar_move_downarrow(void)
+{
+ static int last_x = -1, last_y = -1, last_w = -1, last_h = -1;
+ int x, y, w, h;
+
+ D_SCROLLBAR(("scrollbar_move_downarrow()\n"));
+ x = scrollbar_get_shadow();
+ y = scrollbar_dn_loc();
+ w = scrollbar_arrow_width();
+ h = scrollbar_arrow_height();
+ if ((last_x == x) && (last_y == y) && (last_w == w) && (last_h == h)) {
+ D_SCROLLBAR((" -> No move required, returning 0.\n"));
+ return 0;
+ }
+ D_SCROLLBAR((" -> XMoveResizeWindow(Xdisplay, 0x%08x, %d, %d, %d, %d)\n", scrollbar.dn_win, x, y, w, h));
+ XMoveResizeWindow(Xdisplay, scrollbar.dn_win, x, y, w, h);
+ last_x = x;
+ last_y = y;
+ last_w = w;
+ last_h = h;
+ return 1;
}
void
-scrollbar_draw_anchor(unsigned char image_state, unsigned char force_modes) {
-
- D_SCROLLBAR(("scrollbar_draw_anchor(%u, 0x%02x)\n", (unsigned int) image_state, (unsigned int) force_modes));
- if (image_state != IMAGE_STATE_CURRENT) {
- if ((image_state == IMAGE_STATE_NORMAL) && (images[image_sa].current != images[image_sa].norm)) {
- images[image_sa].current = images[image_sa].norm;
- force_modes = MODE_MASK;
- } else if ((image_state == IMAGE_STATE_SELECTED) && (images[image_sa].current != images[image_sa].selected)) {
- images[image_sa].current = images[image_sa].selected;
- force_modes = MODE_MASK;
- } else if ((image_state == IMAGE_STATE_CLICKED) && (images[image_sa].current != images[image_sa].clicked)) {
- images[image_sa].current = images[image_sa].clicked;
- force_modes = MODE_MASK;
- } else if ((image_state == IMAGE_STATE_DISABLED) && (images[image_sa].current != images[image_sa].disabled)) {
- images[image_sa].current = images[image_sa].disabled;
- force_modes = MODE_MASK;
- }
- if ((image_state == IMAGE_STATE_NORMAL) && (images[image_st].current != images[image_st].norm)) {
- images[image_st].current = images[image_st].norm;
- force_modes = MODE_MASK;
- } else if ((image_state == IMAGE_STATE_SELECTED) && (images[image_st].current != images[image_st].selected)) {
- images[image_st].current = images[image_st].selected;
- force_modes = MODE_MASK;
- } else if ((image_state == IMAGE_STATE_CLICKED) && (images[image_st].current != images[image_st].clicked)) {
- images[image_st].current = images[image_st].clicked;
- force_modes = MODE_MASK;
- } else if ((image_state == IMAGE_STATE_DISABLED) && (images[image_st].current != images[image_st].disabled)) {
- images[image_st].current = images[image_st].disabled;
- force_modes = MODE_MASK;
+scrollbar_draw_anchor(unsigned char image_state, unsigned char force_modes)
+{
+
+ D_SCROLLBAR(("scrollbar_draw_anchor(%u, 0x%02x)\n", (unsigned int) image_state, (unsigned int) force_modes));
+ if (image_state != IMAGE_STATE_CURRENT) {
+ if ((image_state == IMAGE_STATE_NORMAL) && (images[image_sa].current != images[image_sa].norm)) {
+ images[image_sa].current = images[image_sa].norm;
+ force_modes = MODE_MASK;
+ } else if ((image_state == IMAGE_STATE_SELECTED) && (images[image_sa].current != images[image_sa].selected)) {
+ images[image_sa].current = images[image_sa].selected;
+ force_modes = MODE_MASK;
+ } else if ((image_state == IMAGE_STATE_CLICKED) && (images[image_sa].current != images[image_sa].clicked)) {
+ images[image_sa].current = images[image_sa].clicked;
+ force_modes = MODE_MASK;
+ } else if ((image_state == IMAGE_STATE_DISABLED) && (images[image_sa].current != images[image_sa].disabled)) {
+ images[image_sa].current = images[image_sa].disabled;
+ force_modes = MODE_MASK;
+ }
+ if ((image_state == IMAGE_STATE_NORMAL) && (images[image_st].current != images[image_st].norm)) {
+ images[image_st].current = images[image_st].norm;
+ force_modes = MODE_MASK;
+ } else if ((image_state == IMAGE_STATE_SELECTED) && (images[image_st].current != images[image_st].selected)) {
+ images[image_st].current = images[image_st].selected;
+ force_modes = MODE_MASK;
+ } else if ((image_state == IMAGE_STATE_CLICKED) && (images[image_st].current != images[image_st].clicked)) {
+ images[image_st].current = images[image_st].clicked;
+ force_modes = MODE_MASK;
+ } else if ((image_state == IMAGE_STATE_DISABLED) && (images[image_st].current != images[image_st].disabled)) {
+ images[image_st].current = images[image_st].disabled;
+ force_modes = MODE_MASK;
+ }
}
- }
- if (!image_mode_is(image_sa, MODE_MASK)) {
- /* Solid mode. Redraw every time since it's cheap. */
+ if (!image_mode_is(image_sa, MODE_MASK)) {
+ /* Solid mode. Redraw every time since it's cheap. */
#ifdef XTERM_SCROLLBAR
- if (scrollbar.type == SCROLLBAR_XTERM) {
- int x = ((Options & Opt_scrollbar_right) ? 1 : 0);
+ if (scrollbar.type == SCROLLBAR_XTERM) {
+ int x = ((Options & Opt_scrollbar_right) ? 1 : 0);
- XSetForeground(Xdisplay, gc_stipple, images[image_sa].current->bg);
- XFillRectangle(Xdisplay, scrollbar.sa_win, gc_stipple, x + 1, 0, scrollbar_anchor_width() - x - 1, scrollbar_anchor_height());
- XClearWindow(Xdisplay, scrollbar.sa_win);
- }
+ XSetForeground(Xdisplay, gc_stipple, images[image_sa].current->bg);
+ XFillRectangle(Xdisplay, scrollbar.sa_win, gc_stipple, x + 1, 0, scrollbar_anchor_width() - x - 1, scrollbar_anchor_height());
+ XClearWindow(Xdisplay, scrollbar.sa_win);
+ }
#endif /* XTERM_SCROLLBAR */
#if defined(MOTIF_SCROLLBAR) || defined(NEXT_SCROLLBAR)
- if (scrollbar.type == SCROLLBAR_MOTIF || scrollbar.type == SCROLLBAR_NEXT) {
- if (Options & Opt_scrollbar_floating) {
- XSetWindowBackground(Xdisplay, scrollbar.sa_win, PixColors[bgColor]);
- XClearWindow(Xdisplay, scrollbar.sa_win);
- } else {
- XSetForeground(Xdisplay, gc_scrollbar, images[image_sa].current->bg);
- XFillRectangle(Xdisplay, scrollbar.sa_win, gc_scrollbar, 0, 0, scrollbar_anchor_width(), scrollbar_anchor_height());
- }
- XSetForeground(Xdisplay, gc_top, get_top_shadow_color(images[image_sa].current->bg, ""));
- XSetForeground(Xdisplay, gc_bottom, get_bottom_shadow_color(images[image_sa].current->bg, ""));
- 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 {
- draw_shadow(scrollbar.sa_win, gc_top, gc_bottom, 0, 0, scrollbar_anchor_width(), scrollbar_anchor_height(), scrollbar_get_shadow());
- }
- }
+ if (scrollbar.type == SCROLLBAR_MOTIF || scrollbar.type == SCROLLBAR_NEXT) {
+ if (Options & Opt_scrollbar_floating) {
+ XSetWindowBackground(Xdisplay, scrollbar.sa_win, PixColors[bgColor]);
+ XClearWindow(Xdisplay, scrollbar.sa_win);
+ } else {
+ XSetForeground(Xdisplay, gc_scrollbar, images[image_sa].current->bg);
+ XFillRectangle(Xdisplay, scrollbar.sa_win, gc_scrollbar, 0, 0, scrollbar_anchor_width(), scrollbar_anchor_height());
+ }
+ XSetForeground(Xdisplay, gc_top, get_top_shadow_color(images[image_sa].current->bg, ""));
+ XSetForeground(Xdisplay, gc_bottom, get_bottom_shadow_color(images[image_sa].current->bg, ""));
+ 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 {
+ draw_shadow(scrollbar.sa_win, gc_top, gc_bottom, 0, 0, scrollbar_anchor_width(), scrollbar_anchor_height(),
+ scrollbar_get_shadow());
+ }
+ }
#endif
- return;
- }
- if (!((images[image_sa].mode & MODE_MASK) & (force_modes))) {
- return;
- }
- if (scrollbar_anchor_height() > 1) {
- unsigned char thumb;
- Pixmap pmap;
-
- thumb = (images[image_st].current->iml) ? 1 : 0;
- render_simage(images[image_sa].current, scrollbar.sa_win, scrollbar_anchor_width(), scrollbar_anchor_height(), image_sa, thumb);
- pmap = images[image_sa].current->pmap->pixmap;
- /* Draw the thumb if there is one. */
- if (thumb) {
- unsigned short tw = 0, th = 0;
- imlib_t *iml = images[image_st].current->iml, *siml = images[image_sa].current->iml;
-
- if (image_mode_is(image_st, MODE_IMAGE) && iml->im) {
+ return;
+ }
+ if (!((images[image_sa].mode & MODE_MASK) & (force_modes))) {
+ return;
+ }
+ if (scrollbar_anchor_height() > 1) {
+ unsigned char thumb;
+ Pixmap pmap;
+
+ thumb = (images[image_st].current->iml) ? 1 : 0;
+ render_simage(images[image_sa].current, scrollbar.sa_win, scrollbar_anchor_width(), scrollbar_anchor_height(), image_sa, thumb);
+ pmap = images[image_sa].current->pmap->pixmap;
+ /* Draw the thumb if there is one. */
+ if (thumb) {
+ unsigned short tw = 0, th = 0;
+ imlib_t *iml = images[image_st].current->iml, *siml = images[image_sa].current->iml;
+
+ if (image_mode_is(image_st, MODE_IMAGE) && iml->im) {
#ifdef PIXMAP_SUPPORT
- imlib_context_set_image(iml->im);
- tw = imlib_image_get_width();
- th = imlib_image_get_height();
+ imlib_context_set_image(iml->im);
+ tw = imlib_image_get_width();
+ th = imlib_image_get_height();
#endif
- } else if (siml->bevel) {
- tw = scrollbar_anchor_width() - (siml->bevel->edges->left + siml->bevel->edges->right);
- th = scrollbar_anchor_width() - (siml->bevel->edges->top + siml->bevel->edges->bottom);
- } else if (siml->border) {
- tw = scrollbar_anchor_width() - (siml->border->left + siml->border->right);
- th = scrollbar_anchor_width() - (siml->border->top + siml->border->bottom);
- } else if (iml->bevel) {
- tw = iml->bevel->edges->left + iml->bevel->edges->right + 4;
- th = iml->bevel->edges->top + iml->bevel->edges->bottom + 4;
- }
- UPPER_BOUND(tw, scrollbar_anchor_width());
- UPPER_BOUND(th, scrollbar_anchor_height() >> 1);
- D_SCROLLBAR(("Thumb width/height has been calculated at %hux%hu.\n", tw, th));
- if ((tw > 0) && (th > 0)) {
- paste_simage(images[image_st].current, image_st, scrollbar.sa_win, pmap,
- (scrollbar_anchor_width() - tw) >> 1, (scrollbar_anchor_height() - th) >> 1, tw, th);
- XSetWindowBackgroundPixmap(Xdisplay, scrollbar.sa_win, pmap);
- XClearWindow(Xdisplay, scrollbar.sa_win);
- IMLIB_FREE_PIXMAP(pmap);
- images[image_sa].current->pmap->pixmap = None;
- }
+ } else if (siml->bevel) {
+ tw = scrollbar_anchor_width() - (siml->bevel->edges->left + siml->bevel->edges->right);
+ th = scrollbar_anchor_width() - (siml->bevel->edges->top + siml->bevel->edges->bottom);
+ } else if (siml->border) {
+ tw = scrollbar_anchor_width() - (siml->border->left + siml->border->right);
+ th = scrollbar_anchor_width() - (siml->border->top + siml->border->bottom);
+ } else if (iml->bevel) {
+ tw = iml->bevel->edges->left + iml->bevel->edges->right + 4;
+ th = iml->bevel->edges->top + iml->bevel->edges->bottom + 4;
+ }
+ UPPER_BOUND(tw, scrollbar_anchor_width());
+ UPPER_BOUND(th, scrollbar_anchor_height() >> 1);
+ D_SCROLLBAR(("Thumb width/height has been calculated at %hux%hu.\n", tw, th));
+ if ((tw > 0) && (th > 0)) {
+ paste_simage(images[image_st].current, image_st, scrollbar.sa_win, pmap,
+ (scrollbar_anchor_width() - tw) >> 1, (scrollbar_anchor_height() - th) >> 1, tw, th);
+ XSetWindowBackgroundPixmap(Xdisplay, scrollbar.sa_win, pmap);
+ XClearWindow(Xdisplay, scrollbar.sa_win);
+ IMLIB_FREE_PIXMAP(pmap);
+ images[image_sa].current->pmap->pixmap = None;
+ }
+ }
}
- }
}
unsigned char
-scrollbar_move_anchor(void) {
- static int last_x = -1, last_y = -1, last_w = -1, last_h = -1;
- int x, y, w, h;
-
- D_SCROLLBAR(("Last values: %d, %d, %d, %d\n", last_x, last_y, last_w, last_h));
- x = scrollbar_get_shadow();
- y = scrollbar.anchor_top;
- w = scrollbar_anchor_width();
- h = scrollbar_anchor_height();
- if ((last_x == x) && (last_y == y) && (last_w == w) && (last_h == h)) {
- D_SCROLLBAR((" -> No move required, returning 0.\n"));
- return 0;
- }
- D_SCROLLBAR((" -> XMoveResizeWindow(Xdisplay, 0x%08x, %d, %d, %d, %d)\n", scrollbar.sa_win, x, y, w, h));
- XMoveResizeWindow(Xdisplay, scrollbar.sa_win, x, y, w, h);
- last_x = x;
- last_y = y;
- last_w = w;
- last_h = h;
- return 1;
+scrollbar_move_anchor(void)
+{
+ static int last_x = -1, last_y = -1, last_w = -1, last_h = -1;
+ int x, y, w, h;
+
+ D_SCROLLBAR(("Last values: %d, %d, %d, %d\n", last_x, last_y, last_w, last_h));
+ x = scrollbar_get_shadow();
+ y = scrollbar.anchor_top;
+ w = scrollbar_anchor_width();
+ h = scrollbar_anchor_height();
+ if ((last_x == x) && (last_y == y) && (last_w == w) && (last_h == h)) {
+ D_SCROLLBAR((" -> No move required, returning 0.\n"));
+ return 0;
+ }
+ D_SCROLLBAR((" -> XMoveResizeWindow(Xdisplay, 0x%08x, %d, %d, %d, %d)\n", scrollbar.sa_win, x, y, w, h));
+ XMoveResizeWindow(Xdisplay, scrollbar.sa_win, x, y, w, h);
+ last_x = x;
+ last_y = y;
+ last_w = w;
+ last_h = h;
+ return 1;
}
void
-scrollbar_draw_trough(unsigned char image_state, unsigned char force_modes) {
-
- D_SCROLLBAR(("scrollbar_draw_trough(%u, 0x%02x)\n", (unsigned int) image_state, (unsigned int) force_modes));
- if (image_state != IMAGE_STATE_CURRENT) {
- if ((image_state == IMAGE_STATE_NORMAL) && (images[image_sb].current != images[image_sb].norm)) {
- images[image_sb].current = images[image_sb].norm;
- force_modes = MODE_MASK;
- } else if ((image_state == IMAGE_STATE_SELECTED) && (images[image_sb].current != images[image_sb].selected)) {
- images[image_sb].current = images[image_sb].selected;
- force_modes = MODE_MASK;
- } else if ((image_state == IMAGE_STATE_CLICKED) && (images[image_sb].current != images[image_sb].clicked)) {
- images[image_sb].current = images[image_sb].clicked;
- force_modes = MODE_MASK;
- } else if ((image_state == IMAGE_STATE_DISABLED) && (images[image_sb].current != images[image_sb].disabled)) {
- images[image_sb].current = images[image_sb].disabled;
- force_modes = MODE_MASK;
+scrollbar_draw_trough(unsigned char image_state, unsigned char force_modes)
+{
+
+ D_SCROLLBAR(("scrollbar_draw_trough(%u, 0x%02x)\n", (unsigned int) image_state, (unsigned int) force_modes));
+ if (image_state != IMAGE_STATE_CURRENT) {
+ if ((image_state == IMAGE_STATE_NORMAL) && (images[image_sb].current != images[image_sb].norm)) {
+ images[image_sb].current = images[image_sb].norm;
+ force_modes = MODE_MASK;
+ } else if ((image_state == IMAGE_STATE_SELECTED) && (images[image_sb].current != images[image_sb].selected)) {
+ images[image_sb].current = images[image_sb].selected;
+ force_modes = MODE_MASK;
+ } else if ((image_state == IMAGE_STATE_CLICKED) && (images[image_sb].current != images[image_sb].clicked)) {
+ images[image_sb].current = images[image_sb].clicked;
+ force_modes = MODE_MASK;
+ } else if ((image_state == IMAGE_STATE_DISABLED) && (images[image_sb].current != images[image_sb].disabled)) {
+ images[image_sb].current = images[image_sb].disabled;
+ force_modes = MODE_MASK;
+ }
}
- }
- if (!image_mode_is(image_sb, MODE_MASK)) {
- /* Solid mode. Redraw every time since it's cheap. */
- if ((Options & Opt_scrollbar_floating) || (scrollbar.type == SCROLLBAR_XTERM)) {
- XSetWindowBackground(Xdisplay, scrollbar.win, PixColors[bgColor]);
- XClearWindow(Xdisplay, scrollbar.win);
- } else {
- XSetForeground(Xdisplay, gc_scrollbar, images[image_sb].current->bg);
- XFillRectangle(Xdisplay, scrollbar.win, gc_scrollbar, 0, 0, scrollbar_trough_width(), scrollbar_trough_height());
- XSetForeground(Xdisplay, gc_top, get_top_shadow_color(images[image_sb].current->bg, ""));
- XSetForeground(Xdisplay, gc_bottom, get_bottom_shadow_color(images[image_sb].current->bg, ""));
- draw_shadow(scrollbar.win, gc_bottom, gc_top, 0, 0, scrollbar_trough_width(), scrollbar_trough_height(), scrollbar_get_shadow());
+ if (!image_mode_is(image_sb, MODE_MASK)) {
+ /* Solid mode. Redraw every time since it's cheap. */
+ if ((Options & Opt_scrollbar_floating) || (scrollbar.type == SCROLLBAR_XTERM)) {
+ XSetWindowBackground(Xdisplay, scrollbar.win, PixColors[bgColor]);
+ XClearWindow(Xdisplay, scrollbar.win);
+ } else {
+ XSetForeground(Xdisplay, gc_scrollbar, images[image_sb].current->bg);
+ XFillRectangle(Xdisplay, scrollbar.win, gc_scrollbar, 0, 0, scrollbar_trough_width(), scrollbar_trough_height());
+ XSetForeground(Xdisplay, gc_top, get_top_shadow_color(images[image_sb].current->bg, ""));
+ XSetForeground(Xdisplay, gc_bottom, get_bottom_shadow_color(images[image_sb].current->bg, ""));
+ draw_shadow(scrollbar.win, gc_bottom, gc_top, 0, 0, scrollbar_trough_width(), scrollbar_trough_height(),
+ scrollbar_get_shadow());
+ }
+ return;
}
- return;
- }
- if (!((images[image_sb].mode & MODE_MASK) & (force_modes))) {
- return;
- }
- render_simage(images[image_sb].current, scrollbar.win, scrollbar_trough_width(), scrollbar_trough_height(), image_sb, 0);
+ if (!((images[image_sb].mode & MODE_MASK) & (force_modes))) {
+ return;
+ }
+ render_simage(images[image_sb].current, scrollbar.win, scrollbar_trough_width(), scrollbar_trough_height(), image_sb, 0);
}
void
scrollbar_init(int width, int height)
{
- Cursor cursor;
- long mask;
-
- D_SCROLLBAR(("Initializing all scrollbar elements.\n"));
-
- Attributes.background_pixel = images[image_sb].norm->bg;
- Attributes.border_pixel = images[image_sb].norm->bg;
- Attributes.override_redirect = TRUE;
- Attributes.save_under = TRUE;
- cursor = XCreateFontCursor(Xdisplay, XC_left_ptr);
- mask = ExposureMask | EnterWindowMask | LeaveWindowMask | ButtonPressMask | ButtonReleaseMask
- | Button1MotionMask | Button2MotionMask | Button3MotionMask;
- scrollbar_calc_size(width, height);
- scrollbar.anchor_top = scrollbar.scrollarea_start;
- scrollbar.anchor_bottom = scrollbar.scrollarea_end;
-
- /* Create the scrollbar trough window. It will be the parent to the other windows. */
- scrollbar.win = XCreateWindow(Xdisplay, TermWin.parent, ((Options & Opt_scrollbar_right) ? (width - scrollbar_trough_width()) : (0)), bbar_calc_docked_height(BBAR_DOCKED_TOP),
- scrollbar_trough_width(), height, 0, Xdepth, InputOutput, CopyFromParent,
- CWOverrideRedirect | CWBackPixel | CWBorderPixel | CWColormap, &Attributes);
- XDefineCursor(Xdisplay, scrollbar.win, cursor);
- XSelectInput(Xdisplay, scrollbar.win, mask);
- D_SCROLLBAR(("Created scrollbar window 0x%08x\n", scrollbar.win));
-
- /* Now the up arrow window. */
- scrollbar.up_win = XCreateWindow(Xdisplay, scrollbar.win, scrollbar_get_shadow(), scrollbar_up_loc(), scrollbar_arrow_width(), scrollbar_arrow_height(),
- 0, Xdepth, InputOutput, CopyFromParent, CWOverrideRedirect | CWColormap, &Attributes);
- XSelectInput(Xdisplay, scrollbar.up_win, mask);
- D_SCROLLBAR(("Created scrollbar up arrow window 0x%08x\n", scrollbar.up_win));
-
- /* The down arrow window */
- scrollbar.dn_win = XCreateWindow(Xdisplay, scrollbar.win, scrollbar_get_shadow(), scrollbar_dn_loc(), scrollbar_arrow_width(), scrollbar_arrow_height(),
- 0, Xdepth, InputOutput, CopyFromParent, CWOverrideRedirect | CWColormap, &Attributes);
- XSelectInput(Xdisplay, scrollbar.dn_win, mask);
- D_SCROLLBAR(("Created scrollbar down arrow window 0x%08x\n", scrollbar.dn_win));
-
- /* The anchor window */
- scrollbar.sa_win = XCreateWindow(Xdisplay, scrollbar.win, scrollbar_get_shadow(), scrollbar.anchor_top, scrollbar_anchor_width(), scrollbar_anchor_height(),
- 0, Xdepth, InputOutput, CopyFromParent, CWOverrideRedirect | CWSaveUnder | CWColormap, &Attributes);
- XSelectInput(Xdisplay, scrollbar.sa_win, mask);
- XMapWindow(Xdisplay, scrollbar.sa_win);
- D_SCROLLBAR(("Created scrollbar anchor window 0x%08x\n", scrollbar.sa_win));
-
- if (scrollbar_get_type() != SCROLLBAR_XTERM) {
- scrollbar_map_arrows();
- }
- event_register_dispatcher(scrollbar_dispatch_event, scrollbar_event_init_dispatcher);
-
- scrollbar_drawing_init();
- scrollbar_draw(IMAGE_STATE_CURRENT, MODE_MASK);
+ Cursor cursor;
+ long mask;
+
+ D_SCROLLBAR(("Initializing all scrollbar elements.\n"));
+
+ Attributes.background_pixel = images[image_sb].norm->bg;
+ Attributes.border_pixel = images[image_sb].norm->bg;
+ Attributes.override_redirect = TRUE;
+ Attributes.save_under = TRUE;
+ cursor = XCreateFontCursor(Xdisplay, XC_left_ptr);
+ mask = ExposureMask | EnterWindowMask | LeaveWindowMask | ButtonPressMask | ButtonReleaseMask
+ | Button1MotionMask | Button2MotionMask | Button3MotionMask;
+ scrollbar_calc_size(width, height);
+ scrollbar.anchor_top = scrollbar.scrollarea_start;
+ scrollbar.anchor_bottom = scrollbar.scrollarea_end;
+
+ /* Create the scrollbar trough window. It will be the parent to the other windows. */
+ scrollbar.win =
+ XCreateWindow(Xdisplay, TermWin.parent, ((Options & Opt_scrollbar_right) ? (width - scrollbar_trough_width()) : (0)),
+ bbar_calc_docked_height(BBAR_DOCKED_TOP), scrollbar_trough_width(), height, 0, Xdepth, InputOutput, CopyFromParent,
+ CWOverrideRedirect | CWBackPixel | CWBorderPixel | CWColormap, &Attributes);
+ XDefineCursor(Xdisplay, scrollbar.win, cursor);
+ XSelectInput(Xdisplay, scrollbar.win, mask);
+ D_SCROLLBAR(("Created scrollbar window 0x%08x\n", scrollbar.win));
+
+ /* Now the up arrow window. */
+ scrollbar.up_win =
+ XCreateWindow(Xdisplay, scrollbar.win, scrollbar_get_shadow(), scrollbar_up_loc(), scrollbar_arrow_width(),
+ scrollbar_arrow_height(), 0, Xdepth, InputOutput, CopyFromParent, CWOverrideRedirect | CWColormap, &Attributes);
+ XSelectInput(Xdisplay, scrollbar.up_win, mask);
+ D_SCROLLBAR(("Created scrollbar up arrow window 0x%08x\n", scrollbar.up_win));
+
+ /* The down arrow window */
+ scrollbar.dn_win =
+ XCreateWindow(Xdisplay, scrollbar.win, scrollbar_get_shadow(), scrollbar_dn_loc(), scrollbar_arrow_width(),
+ scrollbar_arrow_height(), 0, Xdepth, InputOutput, CopyFromParent, CWOverrideRedirect | CWColormap, &Attributes);
+ XSelectInput(Xdisplay, scrollbar.dn_win, mask);
+ D_SCROLLBAR(("Created scrollbar down arrow window 0x%08x\n", scrollbar.dn_win));
+
+ /* The anchor window */
+ scrollbar.sa_win =
+ XCreateWindow(Xdisplay, scrollbar.win, scrollbar_get_shadow(), scrollbar.anchor_top, scrollbar_anchor_width(),
+ scrollbar_anchor_height(), 0, Xdepth, InputOutput, CopyFromParent, CWOverrideRedirect | CWSaveUnder | CWColormap,
+ &Attributes);
+ XSelectInput(Xdisplay, scrollbar.sa_win, mask);
+ XMapWindow(Xdisplay, scrollbar.sa_win);
+ D_SCROLLBAR(("Created scrollbar anchor window 0x%08x\n", scrollbar.sa_win));
+
+ if (scrollbar_get_type() != SCROLLBAR_XTERM) {
+ scrollbar_map_arrows();
+ }
+ event_register_dispatcher(scrollbar_dispatch_event, scrollbar_event_init_dispatcher);
+
+ scrollbar_drawing_init();
+ scrollbar_draw(IMAGE_STATE_CURRENT, MODE_MASK);
}
unsigned char
scrollbar_mapping(unsigned char show)
{
- unsigned char change = 0;
-
- D_SCROLLBAR(("scrollbar_mapping(%d)\n", show));
-
- if (show && !scrollbar_is_visible()) {
- D_SCROLLBAR((" -> Mapping scrollbar window. Returning 1.\n"));
- scrollbar_set_visible(1);
- XMapWindow(Xdisplay, scrollbar.win);
- change = 1;
- } else if (!show && scrollbar_is_visible()) {
- D_SCROLLBAR((" -> Unmapping scrollbar window. Returning 1.\n"));
- scrollbar_set_visible(0);
- XUnmapWindow(Xdisplay, scrollbar.win);
- change = 1;
- } else {
- D_SCROLLBAR((" -> No action required. Returning 0.\n"));
- }
- return change;
+ unsigned char change = 0;
+
+ D_SCROLLBAR(("scrollbar_mapping(%d)\n", show));
+
+ if (show && !scrollbar_is_visible()) {
+ D_SCROLLBAR((" -> Mapping scrollbar window. Returning 1.\n"));
+ scrollbar_set_visible(1);
+ XMapWindow(Xdisplay, scrollbar.win);
+ change = 1;
+ } else if (!show && scrollbar_is_visible()) {
+ D_SCROLLBAR((" -> Unmapping scrollbar window. Returning 1.\n"));
+ scrollbar_set_visible(0);
+ XUnmapWindow(Xdisplay, scrollbar.win);
+ change = 1;
+ } else {
+ D_SCROLLBAR((" -> No action required. Returning 0.\n"));
+ }
+ return change;
}
void
scrollbar_reset(void)
{
- D_SCROLLBAR(("scrollbar_reset()\n"));
- last_top = last_bot = 0;
- scrollbar.init = 0;
+ D_SCROLLBAR(("scrollbar_reset()\n"));
+ last_top = last_bot = 0;
+ scrollbar.init = 0;
}
void
scrollbar_calc_size(int width, int height)
{
- D_SCROLLBAR(("scrollbar_calc_size(%d, %d), type == %u\n", width, height, scrollbar_get_type()));
- scrollbar.scrollarea_start = 0;
- scrollbar.scrollarea_end = height;
- scrollbar.up_arrow_loc = 0;
- scrollbar.down_arrow_loc = 0;
+ D_SCROLLBAR(("scrollbar_calc_size(%d, %d), type == %u\n", width, height, scrollbar_get_type()));
+ scrollbar.scrollarea_start = 0;
+ scrollbar.scrollarea_end = height;
+ scrollbar.up_arrow_loc = 0;
+ scrollbar.down_arrow_loc = 0;
#ifdef MOTIF_SCROLLBAR
- if (scrollbar.type == SCROLLBAR_MOTIF) {
- /* arrows are as high as wide - leave 1 pixel gap */
- scrollbar.scrollarea_start += scrollbar_arrow_height() + scrollbar_get_shadow() + 1;
- scrollbar.scrollarea_end -= scrollbar_arrow_height() + scrollbar_get_shadow() + 1;
- scrollbar.up_arrow_loc = scrollbar_get_shadow();
- scrollbar.down_arrow_loc = scrollbar.scrollarea_end + 1;
- }
+ if (scrollbar.type == SCROLLBAR_MOTIF) {
+ /* arrows are as high as wide - leave 1 pixel gap */
+ scrollbar.scrollarea_start += scrollbar_arrow_height() + scrollbar_get_shadow() + 1;
+ scrollbar.scrollarea_end -= scrollbar_arrow_height() + scrollbar_get_shadow() + 1;
+ scrollbar.up_arrow_loc = scrollbar_get_shadow();
+ scrollbar.down_arrow_loc = scrollbar.scrollarea_end + 1;
+ }
#endif
#ifdef NEXT_SCROLLBAR
- if (scrollbar.type == SCROLLBAR_NEXT) {
- scrollbar.scrollarea_start = scrollbar_get_shadow();
- scrollbar.scrollarea_end -= (scrollbar.width * 2 + (scrollbar_get_shadow() ? scrollbar_get_shadow() : 1) + 2);
- scrollbar.up_arrow_loc = scrollbar.scrollarea_end + 1;
- scrollbar.down_arrow_loc = scrollbar.scrollarea_end + scrollbar.width + 2;
- }
+ if (scrollbar.type == SCROLLBAR_NEXT) {
+ scrollbar.scrollarea_start = scrollbar_get_shadow();
+ scrollbar.scrollarea_end -= (scrollbar.width * 2 + (scrollbar_get_shadow()? scrollbar_get_shadow() : 1) + 2);
+ scrollbar.up_arrow_loc = scrollbar.scrollarea_end + 1;
+ scrollbar.down_arrow_loc = scrollbar.scrollarea_end + scrollbar.width + 2;
+ }
#endif
- scrollbar.height = height - (2 * scrollbar_get_shadow());
- scrollbar.win_width = scrollbar.width + (2 * scrollbar_get_shadow());
- scrollbar.win_height = height;
- D_X11((" -> New scrollbar width/height == %hux%hu, win_width/height == %hux%hu\n", scrollbar.width, scrollbar.height, scrollbar.win_width, scrollbar.win_height));
- D_X11((" -> New scroll area start/end == %hu - %hu, up_arrow_loc == %hu, down_arrow_loc == %hu\n", scrollbar.scrollarea_start, scrollbar.scrollarea_end,
- scrollbar.up_arrow_loc, scrollbar.down_arrow_loc));
+ scrollbar.height = height - (2 * scrollbar_get_shadow());
+ scrollbar.win_width = scrollbar.width + (2 * scrollbar_get_shadow());
+ scrollbar.win_height = height;
+ D_X11((" -> New scrollbar width/height == %hux%hu, win_width/height == %hux%hu\n", scrollbar.width, scrollbar.height,
+ scrollbar.win_width, scrollbar.win_height));
+ D_X11((" -> New scroll area start/end == %hu - %hu, up_arrow_loc == %hu, down_arrow_loc == %hu\n", scrollbar.scrollarea_start,
+ scrollbar.scrollarea_end, scrollbar.up_arrow_loc, scrollbar.down_arrow_loc));
}
void
scrollbar_resize(int width, int height)
{
- if (!scrollbar_is_visible()) {
- return;
- }
-
- D_SCROLLBAR(("scrollbar_resize(%d, %d)\n", width, height));
- scrollbar_calc_size(width, height);
- D_SCROLLBAR((" -> XMoveResizeWindow(Xdisplay, 0x%08x, %d, y, %d, %d)\n", scrollbar.win, ((Options & Opt_scrollbar_right) ? (width - scrollbar_trough_width()) : (0)),
- scrollbar_trough_width(), scrollbar.win_height));
- XMoveResizeWindow(Xdisplay, scrollbar.win, ((Options & Opt_scrollbar_right) ? (width - scrollbar_trough_width()) : (0)), bbar_calc_docked_height(BBAR_DOCKED_TOP),
- scrollbar_trough_width(), scrollbar.win_height);
- scrollbar_draw_trough(IMAGE_STATE_CURRENT, MODE_MASK);
- scrollbar_reposition_and_draw(MODE_MASK);
- scrollbar.init = 0;
+ if (!scrollbar_is_visible()) {
+ return;
+ }
+
+ D_SCROLLBAR(("scrollbar_resize(%d, %d)\n", width, height));
+ scrollbar_calc_size(width, height);
+ D_SCROLLBAR((" -> XMoveResizeWindow(Xdisplay, 0x%08x, %d, y, %d, %d)\n", scrollbar.win,
+ ((Options & Opt_scrollbar_right) ? (width - scrollbar_trough_width()) : (0)), scrollbar_trough_width(),
+ scrollbar.win_height));
+ XMoveResizeWindow(Xdisplay, scrollbar.win, ((Options & Opt_scrollbar_right) ? (width - scrollbar_trough_width()) : (0)),
+ bbar_calc_docked_height(BBAR_DOCKED_TOP), scrollbar_trough_width(), scrollbar.win_height);
+ scrollbar_draw_trough(IMAGE_STATE_CURRENT, MODE_MASK);
+ scrollbar_reposition_and_draw(MODE_MASK);
+ scrollbar.init = 0;
}
void
scrollbar_change_type(unsigned int type)
{
- D_SCROLLBAR(("scrollbar_change_type(0x%02x): Current scrollbar type is 0x%02x\n", type, scrollbar_get_type()));
- if (scrollbar_get_type() == type) {
- /* Nothing to do. */
- return;
- }
+ D_SCROLLBAR(("scrollbar_change_type(0x%02x): Current scrollbar type is 0x%02x\n", type, scrollbar_get_type()));
+ if (scrollbar_get_type() == type) {
+ /* Nothing to do. */
+ return;
+ }
#ifdef XTERM_SCROLLBAR
- if (scrollbar.type == SCROLLBAR_XTERM) {
- scrollbar_map_arrows();
- }
+ if (scrollbar.type == SCROLLBAR_XTERM) {
+ scrollbar_map_arrows();
+ }
#endif
#ifdef MOTIF_SCROLLBAR
- if (scrollbar.type == SCROLLBAR_MOTIF) {
- /* arrows are as high as wide - leave 1 pixel gap */
- scrollbar.scrollarea_start -= scrollbar_arrow_height() + scrollbar_get_shadow() + 1;
- scrollbar.scrollarea_end += scrollbar_arrow_height() + scrollbar_get_shadow() + 1;
- }
+ if (scrollbar.type == SCROLLBAR_MOTIF) {
+ /* arrows are as high as wide - leave 1 pixel gap */
+ scrollbar.scrollarea_start -= scrollbar_arrow_height() + scrollbar_get_shadow() + 1;
+ scrollbar.scrollarea_end += scrollbar_arrow_height() + scrollbar_get_shadow() + 1;
+ }
#endif
#ifdef NEXT_SCROLLBAR
- if (scrollbar.type == SCROLLBAR_NEXT) {
- scrollbar.scrollarea_start = 0;
- scrollbar.scrollarea_end += (scrollbar.width * 2 + (scrollbar_get_shadow() ? scrollbar_get_shadow() : 1) + 2);
- }
+ if (scrollbar.type == SCROLLBAR_NEXT) {
+ scrollbar.scrollarea_start = 0;
+ scrollbar.scrollarea_end += (scrollbar.width * 2 + (scrollbar_get_shadow()? scrollbar_get_shadow() : 1) + 2);
+ }
#endif
- scrollbar_reset();
- scrollbar.type = type;
+ scrollbar_reset();
+ scrollbar.type = type;
#ifdef XTERM_SCROLLBAR
- if (scrollbar.type == SCROLLBAR_XTERM) {
- scrollbar_unmap_arrows();
- }
+ if (scrollbar.type == SCROLLBAR_XTERM) {
+ scrollbar_unmap_arrows();
+ }
#endif
#ifdef MOTIF_SCROLLBAR
- if (type == SCROLLBAR_MOTIF) {
- scrollbar.scrollarea_start += scrollbar_arrow_height() + scrollbar_get_shadow() + 1;
- scrollbar.scrollarea_end -= scrollbar_arrow_height() + scrollbar_get_shadow() + 1;
- scrollbar.up_arrow_loc = scrollbar_get_shadow();
- scrollbar.down_arrow_loc = scrollbar.scrollarea_end + 1;
- }
+ if (type == SCROLLBAR_MOTIF) {
+ scrollbar.scrollarea_start += scrollbar_arrow_height() + scrollbar_get_shadow() + 1;
+ scrollbar.scrollarea_end -= scrollbar_arrow_height() + scrollbar_get_shadow() + 1;
+ scrollbar.up_arrow_loc = scrollbar_get_shadow();
+ scrollbar.down_arrow_loc = scrollbar.scrollarea_end + 1;
+ }
#endif
#ifdef NEXT_SCROLLBAR
- if (type == SCROLLBAR_NEXT) {
- scrollbar.scrollarea_start = scrollbar_get_shadow();
- scrollbar.scrollarea_end -= (scrollbar.width * 2 + (scrollbar_get_shadow() ? scrollbar_get_shadow() : 1) + 2);
- scrollbar.up_arrow_loc = scrollbar.scrollarea_end + 1;
- scrollbar.down_arrow_loc = scrollbar.scrollarea_end + scrollbar.width + 2;
- }
+ if (type == SCROLLBAR_NEXT) {
+ scrollbar.scrollarea_start = scrollbar_get_shadow();
+ scrollbar.scrollarea_end -= (scrollbar.width * 2 + (scrollbar_get_shadow()? scrollbar_get_shadow() : 1) + 2);
+ scrollbar.up_arrow_loc = scrollbar.scrollarea_end + 1;
+ scrollbar.down_arrow_loc = scrollbar.scrollarea_end + scrollbar.width + 2;
+ }
#endif
- scrollbar_reposition_and_draw(MODE_MASK);
+ scrollbar_reposition_and_draw(MODE_MASK);
}
void
scrollbar_change_width(unsigned short width)
{
- D_SCROLLBAR(("scrollbar_change_width(%hu): Current width is %hu\n", width, scrollbar_get_width()));
- if (width == 0) {
- width = SB_WIDTH;
- }
- if (width == scrollbar.width) {
- /* Nothing to do, so return. */
- return;
- }
- scrollbar_reset();
- scrollbar.width = width;
- parent_resize();
+ D_SCROLLBAR(("scrollbar_change_width(%hu): Current width is %hu\n", width, scrollbar_get_width()));
+ if (width == 0) {
+ width = SB_WIDTH;
+ }
+ if (width == scrollbar.width) {
+ /* Nothing to do, so return. */
+ return;
+ }
+ scrollbar_reset();
+ scrollbar.width = width;
+ parent_resize();
}
void
-scrollbar_drawing_init(void) {
+scrollbar_drawing_init(void)
+{
- XGCValues gcvalue;
+ XGCValues gcvalue;
- D_SCROLLBAR(("Called.\n"));
+ D_SCROLLBAR(("Called.\n"));
#ifdef XTERM_SCROLLBAR
- gcvalue.stipple = XCreateBitmapFromData(Xdisplay, scrollbar.win, (char *) xterm_sb_bits, 12, 2);
- if (!gcvalue.stipple) {
- print_error("Unable to create xterm scrollbar bitmap.\n\n");
- if (scrollbar_get_type() == SCROLLBAR_XTERM) {
- scrollbar_set_type(SCROLLBAR_MOTIF);
+ gcvalue.stipple = XCreateBitmapFromData(Xdisplay, scrollbar.win, (char *) xterm_sb_bits, 12, 2);
+ if (!gcvalue.stipple) {
+ print_error("Unable to create xterm scrollbar bitmap.\n\n");
+ if (scrollbar_get_type() == SCROLLBAR_XTERM) {
+ scrollbar_set_type(SCROLLBAR_MOTIF);
+ }
+ } else {
+ gcvalue.fill_style = FillOpaqueStippled;
+ gcvalue.foreground = PixColors[fgColor];
+ gcvalue.background = PixColors[bgColor];
+ gc_stipple = LIBAST_X_CREATE_GC(GCForeground | GCBackground | GCFillStyle | GCStipple, &gcvalue);
+ gcvalue.foreground = PixColors[borderColor];
+ gc_border = LIBAST_X_CREATE_GC(GCForeground, &gcvalue);
}
- } else {
- gcvalue.fill_style = FillOpaqueStippled;
- gcvalue.foreground = PixColors[fgColor];
- gcvalue.background = PixColors[bgColor];
- gc_stipple = LIBAST_X_CREATE_GC(GCForeground | GCBackground | GCFillStyle | GCStipple, &gcvalue);
- gcvalue.foreground = PixColors[borderColor];
- gc_border = LIBAST_X_CREATE_GC(GCForeground, &gcvalue);
- }
#endif /* XTERM_SCROLLBAR */
#if defined(MOTIF_SCROLLBAR) || defined(NEXT_SCROLLBAR)
- gcvalue.foreground = images[image_sb].norm->bg;
- gc_scrollbar = LIBAST_X_CREATE_GC(GCForeground, &gcvalue);
- gcvalue.foreground = PixColors[topShadowColor];
- gc_top = LIBAST_X_CREATE_GC(GCForeground, &gcvalue);
- gcvalue.foreground = PixColors[bottomShadowColor];
- gc_bottom = LIBAST_X_CREATE_GC(GCForeground, &gcvalue);
+ gcvalue.foreground = images[image_sb].norm->bg;
+ gc_scrollbar = LIBAST_X_CREATE_GC(GCForeground, &gcvalue);
+ gcvalue.foreground = PixColors[topShadowColor];
+ gc_top = LIBAST_X_CREATE_GC(GCForeground, &gcvalue);
+ gcvalue.foreground = PixColors[bottomShadowColor];
+ gc_bottom = LIBAST_X_CREATE_GC(GCForeground, &gcvalue);
#endif /* MOTIF_SCROLLBAR || NEXT_SCROLLBAR */
}
unsigned char
-scrollbar_set_focus(short has_focus) {
-
- static short focus = -1;
- XGCValues gcvalue;
-
- D_SCROLLBAR(("scrollbar_set_focus(%hd): focus == %hd\n", has_focus, focus));
- if (focus != has_focus) {
- focus = has_focus;
- gcvalue.foreground = (focus ? (images[image_sb].norm->bg) : (images[image_sb].disabled->bg));
- XChangeGC(Xdisplay, gc_scrollbar, GCForeground, &gcvalue);
- gcvalue.foreground = PixColors[focus ? topShadowColor : unfocusedTopShadowColor];
- XChangeGC(Xdisplay, gc_top, GCForeground, &gcvalue);
- gcvalue.foreground = PixColors[focus ? bottomShadowColor : unfocusedBottomShadowColor];
- XChangeGC(Xdisplay, gc_bottom, GCForeground, &gcvalue);
- return (1);
- }
- return (0);
+scrollbar_set_focus(short has_focus)
+{
+
+ static short focus = -1;
+ XGCValues gcvalue;
+
+ D_SCROLLBAR(("scrollbar_set_focus(%hd): focus == %hd\n", has_focus, focus));
+ if (focus != has_focus) {
+ focus = has_focus;
+ gcvalue.foreground = (focus ? (images[image_sb].norm->bg) : (images[image_sb].disabled->bg));
+ XChangeGC(Xdisplay, gc_scrollbar, GCForeground, &gcvalue);
+ gcvalue.foreground = PixColors[focus ? topShadowColor : unfocusedTopShadowColor];
+ XChangeGC(Xdisplay, gc_top, GCForeground, &gcvalue);
+ gcvalue.foreground = PixColors[focus ? bottomShadowColor : unfocusedBottomShadowColor];
+ XChangeGC(Xdisplay, gc_bottom, GCForeground, &gcvalue);
+ return (1);
+ }
+ return (0);
}
unsigned char
-scrollbar_anchor_update_position(short mouseoffset) {
-
- int top = (TermWin.nscrolled - TermWin.view_start);
- int bot = top + (TermWin.nrow - 1);
- int len = MAX((TermWin.nscrolled + (TermWin.nrow - 1)), 1);
-
- D_SCROLLBAR(("scrollbar_anchor_update_position(%hd): top == %d, bot == %d, len == %d\n", mouseoffset, top, bot, len));
- scrollbar.anchor_top = (scrollbar.scrollarea_start + (top * scrollbar_scrollarea_height()) / len);
- scrollbar.anchor_bottom = (scrollbar.scrollarea_start + (bot * scrollbar_scrollarea_height()) / len);
-
- if (rs_min_anchor_size && scrollbar.type != SCROLLBAR_XTERM) {
- if ((scrollbar_scrollarea_height() > rs_min_anchor_size) && (scrollbar_anchor_height() < rs_min_anchor_size)) {
-
- int grab_point = scrollbar.anchor_top + mouseoffset;
-
- if (grab_point - mouseoffset < scrollbar.scrollarea_start) {
- scrollbar.anchor_top = scrollbar.scrollarea_start;
- scrollbar.anchor_bottom = rs_min_anchor_size + scrollbar.scrollarea_start;
- } else if (scrollbar.anchor_top + rs_min_anchor_size > scrollbar.scrollarea_end) {
- scrollbar.anchor_top = scrollbar.scrollarea_end - rs_min_anchor_size;
- scrollbar.anchor_bottom = scrollbar.scrollarea_end;
- } else {
- scrollbar.anchor_top = grab_point - mouseoffset;
- scrollbar.anchor_bottom = scrollbar.anchor_top + rs_min_anchor_size;
- }
- if (scrollbar.anchor_bottom == scrollbar.scrollarea_end) {
- scr_move_to(scrollbar.scrollarea_end, scrollbar_scrollarea_height());
- scr_refresh(DEFAULT_REFRESH);
- }
+scrollbar_anchor_update_position(short mouseoffset)
+{
+
+ int top = (TermWin.nscrolled - TermWin.view_start);
+ int bot = top + (TermWin.nrow - 1);
+ int len = MAX((TermWin.nscrolled + (TermWin.nrow - 1)), 1);
+
+ D_SCROLLBAR(("scrollbar_anchor_update_position(%hd): top == %d, bot == %d, len == %d\n", mouseoffset, top, bot, len));
+ scrollbar.anchor_top = (scrollbar.scrollarea_start + (top * scrollbar_scrollarea_height()) / len);
+ scrollbar.anchor_bottom = (scrollbar.scrollarea_start + (bot * scrollbar_scrollarea_height()) / len);
+
+ if (rs_min_anchor_size && scrollbar.type != SCROLLBAR_XTERM) {
+ if ((scrollbar_scrollarea_height() > rs_min_anchor_size) && (scrollbar_anchor_height() < rs_min_anchor_size)) {
+
+ int grab_point = scrollbar.anchor_top + mouseoffset;
+
+ if (grab_point - mouseoffset < scrollbar.scrollarea_start) {
+ scrollbar.anchor_top = scrollbar.scrollarea_start;
+ scrollbar.anchor_bottom = rs_min_anchor_size + scrollbar.scrollarea_start;
+ } else if (scrollbar.anchor_top + rs_min_anchor_size > scrollbar.scrollarea_end) {
+ scrollbar.anchor_top = scrollbar.scrollarea_end - rs_min_anchor_size;
+ scrollbar.anchor_bottom = scrollbar.scrollarea_end;
+ } else {
+ scrollbar.anchor_top = grab_point - mouseoffset;
+ scrollbar.anchor_bottom = scrollbar.anchor_top + rs_min_anchor_size;
+ }
+ if (scrollbar.anchor_bottom == scrollbar.scrollarea_end) {
+ scr_move_to(scrollbar.scrollarea_end, scrollbar_scrollarea_height());
+ scr_refresh(DEFAULT_REFRESH);
+ }
+ }
+ }
+ if ((scrollbar.anchor_top == last_top) && (scrollbar.anchor_bottom == last_bot) && (scrollbar.init)) {
+ return 0;
+ }
+ if (scrollbar_move_anchor()) {
+ scrollbar_draw_anchor(IMAGE_STATE_CURRENT, MODE_MASK);
}
- }
- if ((scrollbar.anchor_top == last_top) && (scrollbar.anchor_bottom == last_bot) && (scrollbar.init)) {
- return 0;
- }
- if (scrollbar_move_anchor()) {
- scrollbar_draw_anchor(IMAGE_STATE_CURRENT, MODE_MASK);
- }
- last_top = scrollbar.anchor_top;
- last_bot = scrollbar.anchor_bottom;
- return 1;
+ last_top = scrollbar.anchor_top;
+ last_bot = scrollbar.anchor_bottom;
+ return 1;
}
void
scrollbar_draw(unsigned char image_state, unsigned char force_modes)
{
- D_SCROLLBAR(("scrollbar_draw(%d, 0x%02x)\n", image_state, force_modes));
- scrollbar_draw_trough(image_state, force_modes);
- scrollbar_draw_anchor(image_state, force_modes);
- scrollbar_draw_uparrow(image_state, force_modes);
- scrollbar_draw_downarrow(image_state, force_modes);
- scrollbar.init = 1;
+ D_SCROLLBAR(("scrollbar_draw(%d, 0x%02x)\n", image_state, force_modes));
+ scrollbar_draw_trough(image_state, force_modes);
+ scrollbar_draw_anchor(image_state, force_modes);
+ scrollbar_draw_uparrow(image_state, force_modes);
+ scrollbar_draw_downarrow(image_state, force_modes);
+ scrollbar.init = 1;
}
void
scrollbar_reposition_and_draw(unsigned char force_modes)
{
- D_SCROLLBAR(("scrollbar_reposition_and_draw(0x%02x)\n", force_modes));
- if (scrollbar_move_uparrow()) {
- scrollbar_draw_uparrow(IMAGE_STATE_CURRENT, force_modes);
- }
- if (scrollbar_move_downarrow()) {
- scrollbar_draw_downarrow(IMAGE_STATE_CURRENT, force_modes);
- }
- if (!scrollbar_anchor_update_position(1)) {
- scrollbar_draw_anchor(IMAGE_STATE_CURRENT, force_modes);
- }
- scrollbar.init = 1;
+ D_SCROLLBAR(("scrollbar_reposition_and_draw(0x%02x)\n", force_modes));
+ if (scrollbar_move_uparrow()) {
+ scrollbar_draw_uparrow(IMAGE_STATE_CURRENT, force_modes);
+ }
+ if (scrollbar_move_downarrow()) {
+ scrollbar_draw_downarrow(IMAGE_STATE_CURRENT, force_modes);
+ }
+ if (!scrollbar_anchor_update_position(1)) {
+ scrollbar_draw_anchor(IMAGE_STATE_CURRENT, 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;
+ 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)
{
- unsigned char force_update = 0;
-
- if (!scrollbar_is_visible()) {
- return 0;
- }
-
- D_SCROLLBAR(("scrollbar_show(%hd)\n", mouseoffset));
-
- force_update = scrollbar_set_focus(TermWin.focus);
- if (!(scrollbar.init)) {
- force_update++;
- }
- if (mouseoffset) {
- force_update += scrollbar_anchor_update_position(mouseoffset);
- }
- scrollbar_draw_trough(IMAGE_STATE_CURRENT, (force_update) ? (MODE_TRANS | MODE_VIEWPORT) : (MODE_MASK));
- scrollbar_draw_uparrow(IMAGE_STATE_CURRENT, (force_update) ? (MODE_TRANS | MODE_VIEWPORT) : (MODE_MASK));
- scrollbar_draw_downarrow(IMAGE_STATE_CURRENT, (force_update) ? (MODE_TRANS | MODE_VIEWPORT) : (MODE_MASK));
- scrollbar.init = 1;
- return 1;
+ unsigned char force_update = 0;
+
+ if (!scrollbar_is_visible()) {
+ return 0;
+ }
+
+ D_SCROLLBAR(("scrollbar_show(%hd)\n", mouseoffset));
+
+ force_update = scrollbar_set_focus(TermWin.focus);
+ if (!(scrollbar.init)) {
+ force_update++;
+ }
+ if (mouseoffset) {
+ force_update += scrollbar_anchor_update_position(mouseoffset);
+ }
+ scrollbar_draw_trough(IMAGE_STATE_CURRENT, (force_update) ? (MODE_TRANS | MODE_VIEWPORT) : (MODE_MASK));
+ scrollbar_draw_uparrow(IMAGE_STATE_CURRENT, (force_update) ? (MODE_TRANS | MODE_VIEWPORT) : (MODE_MASK));
+ scrollbar_draw_downarrow(IMAGE_STATE_CURRENT, (force_update) ? (MODE_TRANS | MODE_VIEWPORT) : (MODE_MASK));
+ scrollbar.init = 1;
+ return 1;
}