Mercurial > emacs
comparison src/xterm.c @ 25512:8d013f20532c
(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.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Fri, 03 Sep 1999 12:43:32 +0000 |
parents | 1b6d98e8c3ac |
children | 7ae6423812ae |
comparison
equal
deleted
inserted
replaced
25511:9bc9d4d6c716 | 25512:8d013f20532c |
---|---|
7702 if (!NILP (bar->next)) | 7702 if (!NILP (bar->next)) |
7703 XSETVECTOR (XSCROLL_BAR (bar->next)->prev, bar); | 7703 XSETVECTOR (XSCROLL_BAR (bar->next)->prev, bar); |
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, |
7714 top, | 7710 top, |
7715 width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2, | 7711 width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2, |
7872 struct window *w; | 7868 struct window *w; |
7873 int portion, whole, position; | 7869 int 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; | 7875 |
7880 | 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); |
7878 top = window_y; | |
7879 width = FRAME_SCROLL_BAR_COLS (f) * CANON_X_UNIT (f); | |
7880 height = window_height; | |
7881 | |
7882 /* Compute the left edge of the scroll bar area. */ | |
7883 if (FRAME_HAS_VERTICAL_SCROLL_BARS_ON_RIGHT (f)) | |
7884 left = XINT (w->left) + XINT (w->width) - FRAME_SCROLL_BAR_COLS (f); | |
7885 else | |
7886 left = XFASTINT (w->left); | |
7887 left *= CANON_X_UNIT (f); | |
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); | |
7894 else | |
7895 sb_width = width; | |
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 | |
7882 | 7909 |
7883 /* Where should this scroll bar be, pixel-wise? */ | |
7884 pixel_top = window_y; | |
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 | |
7897 if (FRAME_HAS_VERTICAL_SCROLL_BARS_ON_RIGHT (f)) | |
7898 pixel_left = (window_x | |
7899 + window_width | |
7900 + FRAME_LEFT_FLAGS_AREA_WIDTH (f) | |
7901 + scroll_bar_area_width | |
7902 - pixel_width + 1); | |
7903 else | |
7904 pixel_left = (window_x | |
7905 - FRAME_LEFT_FLAGS_AREA_WIDTH (f) | |
7906 - scroll_bar_area_width); | |
7907 | |
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. */ |
7915 unsigned int mask = 0; | 7920 unsigned int mask = 0; |
7916 | 7921 |
7917 bar = XSCROLL_BAR (w->vertical_scroll_bar); | 7922 bar = XSCROLL_BAR (w->vertical_scroll_bar); |
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 |
7931 | 7936 |
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 |
7949 /* Clear areas not covered by the scroll bar. This makes sure a | 7952 /* Clear areas not covered by the scroll bar. This makes sure a |
7950 previous mode line display is cleared after C-x 2 C-x 1, for | 7953 previous mode line display is cleared after C-x 2 C-x 1, for |
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 } |
7976 | 7976 |
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 } |
7987 | 7987 |
7988 #if USE_TOOLKIT_SCROLL_BARS | 7988 #if USE_TOOLKIT_SCROLL_BARS |