From 7db47798f82694ea85003f3ea004600ab6a68fc3 Mon Sep 17 00:00:00 2001 From: YAMAMOTO Mitsuharu Date: Wed, 11 May 2011 12:13:58 +0900 Subject: [PATCH] Take account of fringe background extension in scroll_run_hook. * w32term.c (w32_draw_fringe_bitmap): Rename local vars `left' and `width' to `bar_area_x' and `bar_area_width', respectively. (x_scroll_run): Take account of fringe background extension. * xterm.c (x_draw_fringe_bitmap) [USE_TOOLKIT_SCROLL_BARS]: Rename local vars `left' and `width' to `bar_area_x' and `bar_area_width', respectively. (x_scroll_run) [USE_TOOLKIT_SCROLL_BARS]: Take account of fringe background extension. --- src/ChangeLog | 12 ++++++++++++ src/w32term.c | 52 ++++++++++++++++++++++++++++++++++++------------- src/xterm.c | 54 ++++++++++++++++++++++++++++++++++++++------------- 3 files changed, 92 insertions(+), 26 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 4ab5b4e64f1..6ed7883ded4 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,15 @@ +2011-05-11 YAMAMOTO Mitsuharu + + * w32term.c (w32_draw_fringe_bitmap): Rename local vars `left' and + `width' to `bar_area_x' and `bar_area_width', respectively. + (x_scroll_run): Take account of fringe background extension. + + * xterm.c (x_draw_fringe_bitmap) [USE_TOOLKIT_SCROLL_BARS]: Rename + local vars `left' and `width' to `bar_area_x' and + `bar_area_width', respectively. + (x_scroll_run) [USE_TOOLKIT_SCROLL_BARS]: Take account of fringe + background extension. + 2011-05-09 Andreas Schwab * xmenu.c (set_frame_menubar): Fix submenu loops. diff --git a/src/w32term.c b/src/w32term.c index 387f2b5c59f..83789788b3c 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -781,22 +781,22 @@ w32_draw_fringe_bitmap (w, row, p) if (sb_width > 0) { - int left = WINDOW_SCROLL_BAR_AREA_X (w); - int width = (WINDOW_CONFIG_SCROLL_BAR_COLS (w) - * FRAME_COLUMN_WIDTH (f)); + int bar_area_x = WINDOW_SCROLL_BAR_AREA_X (w); + int bar_area_width = (WINDOW_CONFIG_SCROLL_BAR_COLS (w) + * FRAME_COLUMN_WIDTH (f)); if (bx < 0) { /* Bitmap fills the fringe. */ - if (left + width == p->x) - bx = left + sb_width; - else if (p->x + p->wd == left) - bx = left; + if (bar_area_x + bar_area_width == p->x) + bx = bar_area_x + sb_width; + else if (p->x + p->wd == bar_area_x) + bx = bar_area_x; if (bx >= 0) { int header_line_height = WINDOW_HEADER_LINE_HEIGHT (w); - nx = width - sb_width; + nx = bar_area_width - sb_width; by = WINDOW_TO_FRAME_PIXEL_Y (w, max (header_line_height, row->y)); ny = row->visible_height; @@ -804,13 +804,13 @@ w32_draw_fringe_bitmap (w, row, p) } else { - if (left + width == bx) + if (bar_area_x + bar_area_width == bx) { - bx = left + sb_width; - nx += width - sb_width; + bx = bar_area_x + sb_width; + nx += bar_area_width - sb_width; } - else if (bx + nx == left) - nx += width - sb_width; + else if (bx + nx == bar_area_x) + nx += bar_area_width - sb_width; } } } @@ -2625,6 +2625,32 @@ x_scroll_run (w, run) fringes of W. */ window_box (w, -1, &x, &y, &width, &height); + /* If the fringe is adjacent to the left (right) scroll bar of a + leftmost (rightmost, respectively) window, then extend its + background to the gap between the fringe and the bar. */ + if ((WINDOW_LEFTMOST_P (w) + && WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT (w)) + || (WINDOW_RIGHTMOST_P (w) + && WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_RIGHT (w))) + { + int sb_width = WINDOW_CONFIG_SCROLL_BAR_WIDTH (w); + + if (sb_width > 0) + { + int bar_area_x = WINDOW_SCROLL_BAR_AREA_X (w); + int bar_area_width = (WINDOW_CONFIG_SCROLL_BAR_COLS (w) + * FRAME_COLUMN_WIDTH (f)); + + if (bar_area_x + bar_area_width == x) + { + x = bar_area_x + sb_width; + width += bar_area_width - sb_width; + } + else if (x + width == bar_area_x) + width += bar_area_width - sb_width; + } + } + from_y = WINDOW_TO_FRAME_PIXEL_Y (w, run->current_y); to_y = WINDOW_TO_FRAME_PIXEL_Y (w, run->desired_y); bottom_y = y + height; diff --git a/src/xterm.c b/src/xterm.c index be7fde03c58..f6b6dcef7a2 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -804,22 +804,22 @@ x_draw_fringe_bitmap (w, row, p) if (sb_width > 0) { - int left = WINDOW_SCROLL_BAR_AREA_X (w); - int width = (WINDOW_CONFIG_SCROLL_BAR_COLS (w) - * FRAME_COLUMN_WIDTH (f)); + int bar_area_x = WINDOW_SCROLL_BAR_AREA_X (w); + int bar_area_width = (WINDOW_CONFIG_SCROLL_BAR_COLS (w) + * FRAME_COLUMN_WIDTH (f)); if (bx < 0) { /* Bitmap fills the fringe. */ - if (left + width == p->x) - bx = left + sb_width; - else if (p->x + p->wd == left) - bx = left; + if (bar_area_x + bar_area_width == p->x) + bx = bar_area_x + sb_width; + else if (p->x + p->wd == bar_area_x) + bx = bar_area_x; if (bx >= 0) { int header_line_height = WINDOW_HEADER_LINE_HEIGHT (w); - nx = width - sb_width; + nx = bar_area_width - sb_width; by = WINDOW_TO_FRAME_PIXEL_Y (w, max (header_line_height, row->y)); ny = row->visible_height; @@ -827,13 +827,13 @@ x_draw_fringe_bitmap (w, row, p) } else { - if (left + width == bx) + if (bar_area_x + bar_area_width == bx) { - bx = left + sb_width; - nx += width - sb_width; + bx = bar_area_x + sb_width; + nx += bar_area_width - sb_width; } - else if (bx + nx == left) - nx += width - sb_width; + else if (bx + nx == bar_area_x) + nx += bar_area_width - sb_width; } } } @@ -3240,6 +3240,34 @@ x_scroll_run (w, run) fringe of W. */ window_box (w, -1, &x, &y, &width, &height); +#ifdef USE_TOOLKIT_SCROLL_BARS + /* If the fringe is adjacent to the left (right) scroll bar of a + leftmost (rightmost, respectively) window, then extend its + background to the gap between the fringe and the bar. */ + if ((WINDOW_LEFTMOST_P (w) + && WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT (w)) + || (WINDOW_RIGHTMOST_P (w) + && WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_RIGHT (w))) + { + int sb_width = WINDOW_CONFIG_SCROLL_BAR_WIDTH (w); + + if (sb_width > 0) + { + int bar_area_x = WINDOW_SCROLL_BAR_AREA_X (w); + int bar_area_width = (WINDOW_CONFIG_SCROLL_BAR_COLS (w) + * FRAME_COLUMN_WIDTH (f)); + + if (bar_area_x + bar_area_width == x) + { + x = bar_area_x + sb_width; + width += bar_area_width - sb_width; + } + else if (x + width == bar_area_x) + width += bar_area_width - sb_width; + } + } +#endif + from_y = WINDOW_TO_FRAME_PIXEL_Y (w, run->current_y); to_y = WINDOW_TO_FRAME_PIXEL_Y (w, run->desired_y); bottom_y = y + height; -- 2.39.5