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