Mercurial > emacs
annotate src/=XTests.c @ 1719:48f539ac6921
* frame.h (struct frame): New fields `can_have_scrollbars' and
`has_vertical_scrollbars'.
(FRAME_CAN_HAVE_SCROLLBARS, FRAME_HAS_VERTICAL_SCROLLBARS): New
accessors, for both the MULTI_FRAME and non-MULTI_FRAME.
(VERTICAL_SCROLLBAR_WIDTH, WINDOW_VERTICAL_SCROLLBAR,
WINDOW_VERTICAL_SCROLLBAR_COLUMN,
WINDOW_VERTICAL_SCROLLBAR_HEIGHT): New macros.
* window.h (struct window): New field `vertical_scrollbar'.
* xterm.h (struct x_display): vertical_scrollbars,
judge_timestamp, vertical_scrollbar_extra: New fields.
(struct scrollbar): New struct.
(VERTICAL_SCROLLBAR_PIXEL_WIDTH, VERTICAL_SCROLLBAR_PIXEL_HEIGHT,
VERTICAL_SCROLLBAR_LEFT_BORDER, VERTICAL_SCROLLBAR_RIGHT_BORDER,
VERTICAL_SCROLLBAR_TOP_BORDER, VERTICAL_SCROLLBAR_BOTTOM_BORDER,
CHAR_TO_PIXEL_WIDTH, CHAR_TO_PIXEL_HEIGHT, PIXEL_TO_CHAR_WIDTH,
PIXEL_TO_CHAR_HEIGHT): New accessors and macros.
* frame.c (make_frame): Initialize the `can_have_scrollbars' and
`has_vertical_scrollbars' fields of the frame.
* term.c (term_init): Note that TERMCAP terminals don't support
scrollbars.
(mouse_position_hook): Document new args.
(set_vertical_scrollbar_hook, condemn_scrollbars_hook,
redeem_scrollbar_hook, judge_scrollbars_hook): New hooks.
* termhooks.h: Declare and document them.
(enum scrollbar_part): New type.
(struct input_event): Describe the new form of the scrollbar_click
event type. Change `part' from a Lisp_Object to an enum
scrollbar_part. Add a new field `scrollbar'.
* keyboard.c (kbd_buffer_get_event): Pass appropriate new
parameters to *mouse_position_hook, and make_lispy_movement.
* xfns.c (x_set_vertical_scrollbar): New function.
(x_figure_window_size): Use new macros to calculate frame size.
(Fx_create_frame): Note that X Windows frames do support scroll
bars. Default to "yes".
* xterm.c: #include <X11/cursorfont.h> and "window.h".
(x_vertical_scrollbar_cursor): New variable.
(x_term_init): Initialize it.
(last_mouse_bar, last_mouse_bar_frame, last_mouse_part,
last_mouse_scroll_range_start, last_mouse_scroll_range_end): New
variables.
(XTmouse_position): Use them to return scrollbar movement events.
Take new arguments, for that purpose.
(x_window_to_scrollbar, x_scrollbar_create,
x_scrollbar_set_handle, x_scrollbar_remove, x_scrollbar_move,
XTset_scrollbar, XTcondemn_scrollbars, XTredeem_scrollbar,
XTjudge_scrollbars, x_scrollbar_expose,
x_scrollbar_background_expose, x_scrollbar_handle_click,
x_scrollbar_handle_motion): New functions to implement scrollbars.
(x_term_init): Set the termhooks.h hooks to point to them.
(x_set_window_size): Use new macros to calculate frame size. Set
vertical_scrollbar_extra field.
(x_make_frame_visible): Use the frame accessor
FRAME_HAS_VERTICAL_SCROLLBARS to decide if we need to map the
frame's subwindows as well.
(XTread_socket): Use new size-calculation macros from xterm.h when
processing ConfigureNotify events.
(x_wm_set_size_hint): Use PIXEL_TO_CHAR_WIDTH and
PIXEL_TO_CHAR_HEIGHT macros.
* ymakefile (xdisp.o): This now depends on termhooks.h.
(xterm.o): This now depends on window.h.
* xterm.h (struct x_display): Delete v_scrollbar, v_thumbup,
v_thumbdown, v_slider, h_scrollbar, h_thumbup,
h_thumbdown, h_slider, v_scrollbar_width, h_scrollbar_height
fields.
* keyboard.c (Qvscrollbar_part, Qvslider_part, Qvthumbup_part,
Qvthumbdown_part, Qhscrollbar_part, Qhslider_part, Qhthumbup_part,
Qhthumbdown_part, Qscrollbar_click): Deleted; part of an obsolete
interface.
(head_table): Removed from here as well.
(syms_of_keyboard): And here.
* keyboard.h: And here.
(POSN_SCROLLBAR_BUTTON): Removed.
* xscrollbar.h: File removed - no longer necessary.
* xfns.c: Don't #include it any more.
(Qhorizontal_scroll_bar, Qvertical_scroll_bar): Deleted.
(syms_of_xfns): Don't initialize or staticpro them.
(gray_bits): Salvaged from xscrollbar.h.
(x_window_to_scrollbar): Deleted.
(x_set_horizontal_scrollbar): Deleted.
(enum x_frame_parm, x_frame_parms): Remove references to
x_set_horizontal_scrollbar.
(x_set_foreground_color, x_set_background_color,
x_set_border_pixel): Remove special code to support scrollbars.
(Fx_create_frame): Remove old scrollbar setup code.
(install_vertical_scrollbar, install_horizontal_scrollbar,
adjust_scrollbars, x_resize_scrollbars): Deleted.
* xterm.c (construct_mouse_click): This doesn't need to take care of
scrollbar clicks anymore.
(XTread_socket): Remove old code to support scrollbars. Call new
functions instead for events which occur in scrollbar windows.
(XTupdate_end): Remove call to adjust_scrollbars; the main
redisplay code takes care of that now.
(enum window_type): Deleted.
* ymakefile: Note that xfns.o no longer depends on xscrollbar.h.
* xfns.c (syms_of_xfns): Delete defvars for x_mouse_x and
x_mouse_y. That interface hasn't been live for years.
(x_mouse_x, x_mouse_y): Delete these variables.
* xfns.c (Fx_create_frame): Don't initialize the wm_hints field here.
(x_window): Do it here, along with all the similar stuff.
It's a pain to remember that you can't assign to FRAME->visible.
Let's change all references to the `visible' member of struct
frame to use the accessor macros, and then write a setter for the
`visible' field that does the right thing.
* frame.h (FRAME_VISIBLE_P): Make this not an l-value.
(FRAME_SET_VISIBLE): New macro.
* frame.c (make_terminal_frame, Fdelete_frame): Use FRAME_SET_VISIBLE.
(Fframe_visible_p, Fvisible_frame_list): Use FRAME_VISIBLE_P and
FRAME_ICONIFIED_P.
* dispnew.c (Fredraw_display): Use the FRAME_VISIBLE_P and
FRAME_GARBAGED_P accessors.
* xdisp.c (redisplay): Use the FRAME_VISIBLE_P accessor.
* xfns.c (x_set_foreground_color, x_set_background_color,
x_set_cursor_color, x_set_border_pixel, x_set_icon_type): Use the
FRAME_VISIBLE_P accessor.
(Fx_create_frame): Use FRAME_SET_VISIBILITY.
* xterm.c (clear_cursor, x_display_bar_cursor,
x_display_box_cursor): Use FRAME_SET_VISIBILITY.
author | Jim Blandy <jimb@redhat.com> |
---|---|
date | Thu, 24 Dec 1992 06:19:31 +0000 |
parents | 3165b2697c78 |
children |
rev | line source |
---|---|
78 | 1 #include <X11/Xlib.h> |
2 #include <X11/X.h> | |
3 #include <X11/Xutil.h> | |
4 #include <X11/Xresource.h> | |
5 #include "XTests.h" | |
6 #include <stdio.h> | |
7 | |
8 static Display *dpy; | |
9 | |
10 static void | |
11 quit (dpy) | |
12 Display *dpy; | |
13 { | |
14 XCloseDisplay (dpy); | |
15 exit (0); | |
16 } | |
17 | |
18 static Colormap screen_colormap; | |
19 | |
20 static unsigned long | |
21 obtain_color (color) | |
22 char *color; | |
23 { | |
24 int exists; | |
25 XColor color_def; | |
26 | |
27 if (!screen_colormap) | |
28 screen_colormap = DefaultColormap (dpy, DefaultScreen (dpy)); | |
29 | |
30 exists = XParseColor (dpy, screen_colormap, color, &color_def) | |
31 && XAllocColor (dpy, screen_colormap, &color_def); | |
32 if (exists) | |
33 return color_def.pixel; | |
34 | |
35 fprintf (stderr, "Can't get color; using black."); | |
36 return BlackPixel (dpy, DefaultScreen (dpy)); | |
37 } | |
38 | |
39 static char *visual_strings[] = | |
40 { | |
41 "StaticGray ", | |
42 "GrayScale ", | |
43 "StaticColor", | |
44 "PseudoColor", | |
45 "TrueColor ", | |
46 "DirectColor" | |
47 }; | |
48 | |
49 main (argc,argv) | |
50 int argc; | |
51 char *argv[]; | |
52 { | |
53 char *dpy_string; | |
54 int n; | |
55 long mask; | |
56 Visual *my_visual; | |
57 XVisualInfo *vinfo, visual_template; | |
58 XEvent event; | |
59 Window window; | |
60 Screen *scr; | |
61 XGCValues gc_values; | |
62 GC fill_gc, pix_gc, line_xor_gc, line_xor_inv_gc; | |
63 int i; | |
64 int x, y, width, height, geometry, gravity; | |
65 char *geo; | |
66 char default_geo[] = "80x40+0+0"; | |
67 int depth; | |
68 Pixmap pix; | |
69 char *string = "Kill the head and the body will die."; | |
484 | 70 char dash_list[] = {4, 4}; |
71 int dashes = 2; | |
78 | 72 |
73 if (argc < 2) | |
74 dpy_string = "localhost:0.0"; | |
75 else | |
76 dpy_string = argv[1]; | |
77 | |
78 if (argc >= 3) | |
79 { | |
80 XSizeHints hints; | |
81 | |
82 printf ("Geometry: %s\t(default: %s)\n", argv[2], default_geo); | |
83 geo = argv[2]; | |
84 XWMGeometry (dpy, DefaultScreen (dpy), geo, default_geo, | |
85 3, &hints, &x, &y, &width, &height, &gravity); | |
86 } | |
87 | |
88 dpy = XOpenDisplay (dpy_string); | |
89 if (!dpy) | |
90 { | |
91 printf ("Can' open display %s\n", dpy_string); | |
92 exit (1); | |
93 } | |
94 | |
95 window = XCreateSimpleWindow (dpy, DefaultRootWindow (dpy), | |
96 300, 300, 300, 300, 1, | |
97 BlackPixel (dpy, DefaultScreen (dpy)), | |
98 WhitePixel (dpy, DefaultScreen (dpy))); | |
99 XSelectInput (dpy, window, ButtonPressMask | KeyPressMask | |
100 | EnterWindowMask | LeaveWindowMask); | |
101 | |
102 gc_values.foreground = obtain_color ("blue"); | |
103 gc_values.background = WhitePixel (dpy, DefaultScreen (dpy)); | |
104 fill_gc = XCreateGC (dpy, window, GCForeground | GCBackground, | |
105 &gc_values); | |
106 | |
107 gc_values.foreground = obtain_color ("red"); | |
108 gc_values.line_width = 3; | |
109 gc_values.line_style = LineOnOffDash; | |
110 gc_values.cap_style = CapRound; | |
111 gc_values.join_style = JoinRound; | |
112 line_xor_gc = XCreateGC (dpy, window, | |
113 GCForeground | GCBackground | GCLineStyle | |
484 | 114 | GCJoinStyle | GCCapStyle | GCLineWidth, |
78 | 115 &gc_values); |
116 XSetDashes (dpy, line_xor_gc, 0, dash_list, dashes); | |
117 | |
118 line_xor_inv_gc = XCreateGC (dpy, window, | |
484 | 119 GCForeground | GCBackground | GCLineWidth, |
120 &gc_values); | |
78 | 121 |
122 depth = DefaultDepthOfScreen (ScreenOfDisplay (dpy, DefaultScreen (dpy))); | |
123 pix = XCreateBitmapFromData (dpy, window, page_glyf_bits, | |
124 page_glyf_width, page_glyf_height); | |
125 | |
126 XMapWindow (dpy, window); | |
127 XFlush (dpy); | |
128 | |
129 while (1) | |
130 { | |
131 XNextEvent (dpy, &event); | |
132 switch (event.type) | |
133 { | |
134 case ButtonPress: | |
484 | 135 switch (event.xbutton.button) |
136 { | |
137 case Button1: | |
138 XDrawLine (dpy, window, line_xor_gc, 25, 75, 300, 75); | |
139 break; | |
78 | 140 |
484 | 141 case Button2: |
142 XDrawLine (dpy, window, line_xor_inv_gc, 25, 25, 300, 25); | |
143 break; | |
78 | 144 |
484 | 145 case Button3: |
146 XDrawLine (dpy, window, line_xor_gc, 25, 25, 25, 125); | |
147 break; | |
148 } | |
78 | 149 break; |
150 | |
151 case KeyPress: | |
152 { | |
153 char buf[20]; | |
154 int n; | |
155 XComposeStatus status; | |
156 KeySym keysym; | |
157 | |
158 n = XLookupString (&event, buf, 20, &keysym, | |
159 (XComposeStatus *) &status); | |
160 | |
161 if (n == 1 && buf[0] == 'q') | |
162 quit (dpy); | |
163 } | |
164 break; | |
165 | |
166 case EnterNotify: | |
167 XCopyPlane (dpy, pix, window, fill_gc, 0, 0, | |
168 page_glyf_width, page_glyf_height, 100, 100, 1L); | |
169 XFillRectangle (dpy, window, fill_gc, 50, 50, 50, 50); | |
170 break; | |
171 | |
172 case LeaveNotify: | |
173 XClearWindow (dpy, window); | |
174 break; | |
175 } | |
176 | |
177 XFlush (dpy); | |
178 } | |
179 } |