diff options
| author | Gerd Moellmann | 1999-09-03 12:43:32 +0000 |
|---|---|---|
| committer | Gerd Moellmann | 1999-09-03 12:43:32 +0000 |
| commit | 3c6ede7b9181b7a0baada934bb01693a73aae688 (patch) | |
| tree | 1e8cdb1645074d5c677c6124d1e69ec1861e7be1 /src | |
| parent | c6e9d03b5deb4689e600f165f9497cae147dedd5 (diff) | |
| download | emacs-3c6ede7b9181b7a0baada934bb01693a73aae688.tar.gz emacs-3c6ede7b9181b7a0baada934bb01693a73aae688.zip | |
(x_scroll_bar_create): Don't clear under scroll bar
here.
(XTset_vertical_scroll_bar): Clarify position computations. Clear
under newly created scroll bar. Put toolkit scroll bars in the
middle of the area reserved for the scroll bar.
Diffstat (limited to 'src')
| -rw-r--r-- | src/xterm.c | 114 |
1 files changed, 57 insertions, 57 deletions
diff --git a/src/xterm.c b/src/xterm.c index 99a935b2609..19c0dae49d7 100644 --- a/src/xterm.c +++ b/src/xterm.c | |||
| @@ -7704,10 +7704,6 @@ x_scroll_bar_create (w, top, left, width, height) | |||
| 7704 | 7704 | ||
| 7705 | /* Map the window/widget. */ | 7705 | /* Map the window/widget. */ |
| 7706 | #if USE_TOOLKIT_SCROLL_BARS | 7706 | #if USE_TOOLKIT_SCROLL_BARS |
| 7707 | XClearArea (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), | ||
| 7708 | left, top, | ||
| 7709 | FRAME_SCROLL_BAR_COLS (f) * CANON_X_UNIT (f), | ||
| 7710 | window_box_height (w), False); | ||
| 7711 | XtMapWidget (SCROLL_BAR_X_WIDGET (bar)); | 7707 | XtMapWidget (SCROLL_BAR_X_WIDGET (bar)); |
| 7712 | XtConfigureWidget (SCROLL_BAR_X_WIDGET (bar), | 7708 | XtConfigureWidget (SCROLL_BAR_X_WIDGET (bar), |
| 7713 | left + VERTICAL_SCROLL_BAR_WIDTH_TRIM, | 7709 | left + VERTICAL_SCROLL_BAR_WIDTH_TRIM, |
| @@ -7874,41 +7870,50 @@ XTset_vertical_scroll_bar (w, portion, whole, position) | |||
| 7874 | { | 7870 | { |
| 7875 | struct frame *f = XFRAME (w->frame); | 7871 | struct frame *f = XFRAME (w->frame); |
| 7876 | struct scroll_bar *bar; | 7872 | struct scroll_bar *bar; |
| 7877 | int pixel_top, pixel_left, pixel_width, pixel_height; | 7873 | int top, height, left, sb_left, width, sb_width; |
| 7878 | int window_x, window_y, window_width, window_height; | 7874 | int window_x, window_y, window_width, window_height; |
| 7879 | int scroll_bar_area_width; | ||
| 7880 | 7875 | ||
| 7876 | /* Get window dimensions. */ | ||
| 7881 | window_box (w, -1, &window_x, &window_y, &window_width, &window_height); | 7877 | window_box (w, -1, &window_x, &window_y, &window_width, &window_height); |
| 7882 | 7878 | top = window_y; | |
| 7883 | /* Where should this scroll bar be, pixel-wise? */ | 7879 | width = FRAME_SCROLL_BAR_COLS (f) * CANON_X_UNIT (f); |
| 7884 | pixel_top = window_y; | 7880 | height = window_height; |
| 7885 | pixel_height = window_height; | ||
| 7886 | |||
| 7887 | /* The width of the scroll bar itself. */ | ||
| 7888 | pixel_width = (FRAME_SCROLL_BAR_PIXEL_WIDTH (f) > 0 | ||
| 7889 | ? FRAME_SCROLL_BAR_PIXEL_WIDTH (f) | ||
| 7890 | : (FRAME_SCROLL_BAR_COLS (f) | ||
| 7891 | * FONT_WIDTH (FRAME_FONT (f)))); | ||
| 7892 | |||
| 7893 | /* The width on the screen reserved for the scroll bar plus maybe | ||
| 7894 | some empty room at both sides of the scroll bar. */ | ||
| 7895 | scroll_bar_area_width = FRAME_SCROLL_BAR_COLS (f) * CANON_X_UNIT (f); | ||
| 7896 | 7881 | ||
| 7882 | /* Compute the left edge of the scroll bar area. */ | ||
| 7897 | if (FRAME_HAS_VERTICAL_SCROLL_BARS_ON_RIGHT (f)) | 7883 | if (FRAME_HAS_VERTICAL_SCROLL_BARS_ON_RIGHT (f)) |
| 7898 | pixel_left = (window_x | 7884 | left = XINT (w->left) + XINT (w->width) - FRAME_SCROLL_BAR_COLS (f); |
| 7899 | + window_width | 7885 | else |
| 7900 | + FRAME_LEFT_FLAGS_AREA_WIDTH (f) | 7886 | left = XFASTINT (w->left); |
| 7901 | + scroll_bar_area_width | 7887 | left *= CANON_X_UNIT (f); |
| 7902 | - pixel_width + 1); | 7888 | left += FRAME_INTERNAL_BORDER_WIDTH (f); |
| 7889 | |||
| 7890 | /* Compute the width of the scroll bar which might be less than | ||
| 7891 | the width of the area reserved for the scroll bar. */ | ||
| 7892 | if (FRAME_SCROLL_BAR_PIXEL_WIDTH (f) > 0) | ||
| 7893 | sb_width = FRAME_SCROLL_BAR_PIXEL_WIDTH (f); | ||
| 7903 | else | 7894 | else |
| 7904 | pixel_left = (window_x | 7895 | sb_width = width; |
| 7905 | - FRAME_LEFT_FLAGS_AREA_WIDTH (f) | ||
| 7906 | - scroll_bar_area_width); | ||
| 7907 | 7896 | ||
| 7897 | /* Compute the left edge of the scroll bar. */ | ||
| 7898 | #ifdef USE_TOOLKIT_SCROLL_BARS | ||
| 7899 | if (FRAME_HAS_VERTICAL_SCROLL_BARS_ON_RIGHT (f)) | ||
| 7900 | sb_left = left + width - sb_width - (width - sb_width) / 2; | ||
| 7901 | else | ||
| 7902 | sb_left = left + (width - sb_width) / 2; | ||
| 7903 | #else | ||
| 7904 | if (FRAME_HAS_VERTICAL_SCROLL_BARS_ON_RIGHT (f)) | ||
| 7905 | sb_left = left + width - sb_width; | ||
| 7906 | else | ||
| 7907 | sb_left = left; | ||
| 7908 | #endif | ||
| 7909 | |||
| 7908 | /* Does the scroll bar exist yet? */ | 7910 | /* Does the scroll bar exist yet? */ |
| 7909 | if (NILP (w->vertical_scroll_bar)) | 7911 | if (NILP (w->vertical_scroll_bar)) |
| 7910 | bar = x_scroll_bar_create (w, pixel_top, pixel_left, pixel_width, | 7912 | { |
| 7911 | pixel_height); | 7913 | XClearArea (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
| 7914 | left, top, width, height, False); | ||
| 7915 | bar = x_scroll_bar_create (w, top, sb_left, sb_width, height); | ||
| 7916 | } | ||
| 7912 | else | 7917 | else |
| 7913 | { | 7918 | { |
| 7914 | /* It may just need to be moved and resized. */ | 7919 | /* It may just need to be moved and resized. */ |
| @@ -7918,13 +7923,13 @@ XTset_vertical_scroll_bar (w, portion, whole, position) | |||
| 7918 | 7923 | ||
| 7919 | BLOCK_INPUT; | 7924 | BLOCK_INPUT; |
| 7920 | 7925 | ||
| 7921 | if (pixel_left != XINT (bar->left)) | 7926 | if (sb_left != XINT (bar->left)) |
| 7922 | mask |= CWX; | 7927 | mask |= CWX; |
| 7923 | if (pixel_top != XINT (bar->top)) | 7928 | if (top != XINT (bar->top)) |
| 7924 | mask |= CWY; | 7929 | mask |= CWY; |
| 7925 | if (pixel_width != XINT (bar->width)) | 7930 | if (sb_width != XINT (bar->width)) |
| 7926 | mask |= CWWidth; | 7931 | mask |= CWWidth; |
| 7927 | if (pixel_height != XINT (bar->height)) | 7932 | if (height != XINT (bar->height)) |
| 7928 | mask |= CWHeight; | 7933 | mask |= CWHeight; |
| 7929 | 7934 | ||
| 7930 | #ifdef USE_TOOLKIT_SCROLL_BARS | 7935 | #ifdef USE_TOOLKIT_SCROLL_BARS |
| @@ -7932,17 +7937,15 @@ XTset_vertical_scroll_bar (w, portion, whole, position) | |||
| 7932 | /* Since toolkit scroll bars are smaller than the space reserved | 7937 | /* Since toolkit scroll bars are smaller than the space reserved |
| 7933 | for them on the frame, we have to clear "under" them. */ | 7938 | for them on the frame, we have to clear "under" them. */ |
| 7934 | XClearArea (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), | 7939 | XClearArea (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
| 7935 | pixel_left, pixel_top, | 7940 | left, top, width, height, False); |
| 7936 | FRAME_SCROLL_BAR_COLS (f) * CANON_X_UNIT (f), | ||
| 7937 | pixel_height, False); | ||
| 7938 | 7941 | ||
| 7939 | /* Move/size the scroll bar widget. */ | 7942 | /* Move/size the scroll bar widget. */ |
| 7940 | if (mask) | 7943 | if (mask) |
| 7941 | XtConfigureWidget (SCROLL_BAR_X_WIDGET (bar), | 7944 | XtConfigureWidget (SCROLL_BAR_X_WIDGET (bar), |
| 7942 | pixel_left + VERTICAL_SCROLL_BAR_WIDTH_TRIM, | 7945 | sb_left + VERTICAL_SCROLL_BAR_WIDTH_TRIM, |
| 7943 | pixel_top, | 7946 | top, |
| 7944 | pixel_width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2, | 7947 | sb_width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2, |
| 7945 | pixel_height, 0); | 7948 | height, 0); |
| 7946 | 7949 | ||
| 7947 | #else /* not USE_TOOLKIT_SCROLL_BARS */ | 7950 | #else /* not USE_TOOLKIT_SCROLL_BARS */ |
| 7948 | 7951 | ||
| @@ -7951,25 +7954,22 @@ XTset_vertical_scroll_bar (w, portion, whole, position) | |||
| 7951 | example. Non-toolkit scroll bars are as wide as the area | 7954 | example. Non-toolkit scroll bars are as wide as the area |
| 7952 | reserved for scroll bars - trim at both sides. */ | 7955 | reserved for scroll bars - trim at both sides. */ |
| 7953 | XClearArea (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), | 7956 | XClearArea (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
| 7954 | pixel_left, pixel_top, VERTICAL_SCROLL_BAR_WIDTH_TRIM, | 7957 | left, top, VERTICAL_SCROLL_BAR_WIDTH_TRIM, |
| 7955 | pixel_height, False); | 7958 | height, False); |
| 7956 | XClearArea (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), | 7959 | XClearArea (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
| 7957 | (pixel_left | 7960 | left + width - VERTICAL_SCROLL_BAR_WIDTH_TRIM, |
| 7958 | + pixel_width | 7961 | top, VERTICAL_SCROLL_BAR_WIDTH_TRIM, |
| 7959 | - VERTICAL_SCROLL_BAR_WIDTH_TRIM), | 7962 | height, False); |
| 7960 | pixel_top, | ||
| 7961 | VERTICAL_SCROLL_BAR_WIDTH_TRIM, | ||
| 7962 | pixel_height, False); | ||
| 7963 | 7963 | ||
| 7964 | /* Move/size the scroll bar window. */ | 7964 | /* Move/size the scroll bar window. */ |
| 7965 | if (mask) | 7965 | if (mask) |
| 7966 | { | 7966 | { |
| 7967 | XWindowChanges wc; | 7967 | XWindowChanges wc; |
| 7968 | 7968 | ||
| 7969 | wc.x = pixel_left + VERTICAL_SCROLL_BAR_WIDTH_TRIM; | 7969 | wc.x = sb_left + VERTICAL_SCROLL_BAR_WIDTH_TRIM; |
| 7970 | wc.y = pixel_top; | 7970 | wc.y = top; |
| 7971 | wc.width = pixel_width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2; | 7971 | wc.width = sb_width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2; |
| 7972 | wc.height = pixel_height; | 7972 | wc.height = height; |
| 7973 | XConfigureWindow (FRAME_X_DISPLAY (f), SCROLL_BAR_X_WINDOW (bar), | 7973 | XConfigureWindow (FRAME_X_DISPLAY (f), SCROLL_BAR_X_WINDOW (bar), |
| 7974 | mask, &wc); | 7974 | mask, &wc); |
| 7975 | } | 7975 | } |
| @@ -7977,10 +7977,10 @@ XTset_vertical_scroll_bar (w, portion, whole, position) | |||
| 7977 | #endif /* not USE_TOOLKIT_SCROLL_BARS */ | 7977 | #endif /* not USE_TOOLKIT_SCROLL_BARS */ |
| 7978 | 7978 | ||
| 7979 | /* Remember new settings. */ | 7979 | /* Remember new settings. */ |
| 7980 | XSETINT (bar->left, pixel_left); | 7980 | XSETINT (bar->left, sb_left); |
| 7981 | XSETINT (bar->top, pixel_top); | 7981 | XSETINT (bar->top, top); |
| 7982 | XSETINT (bar->width, pixel_width); | 7982 | XSETINT (bar->width, sb_width); |
| 7983 | XSETINT (bar->height, pixel_height); | 7983 | XSETINT (bar->height, height); |
| 7984 | 7984 | ||
| 7985 | UNBLOCK_INPUT; | 7985 | UNBLOCK_INPUT; |
| 7986 | } | 7986 | } |