comparison src/xterm.h @ 1721:6ba3bca4c3de

* 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. * xterm.h (PIXEL_WIDTH, PIXEL_HEIGHT): Change name of parameter from `s' to `f'; it's a frame pointer.
author Jim Blandy <jimb@redhat.com>
date Thu, 24 Dec 1992 06:23:08 +0000
parents 86202f01266d
children aaccd635fb71
comparison
equal deleted inserted replaced
1720:4f5e3ac5d822 1721:6ba3bca4c3de
237 237
238 enum text_cursor_kinds { 238 enum text_cursor_kinds {
239 filled_box_cursor, hollow_box_cursor, bar_cursor 239 filled_box_cursor, hollow_box_cursor, bar_cursor
240 }; 240 };
241 241
242 #define PIXEL_WIDTH(s) ((s)->display.x->pixel_width) 242 #define PIXEL_WIDTH(f) ((f)->display.x->pixel_width)
243 #define PIXEL_HEIGHT(s) ((s)->display.x->pixel_height) 243 #define PIXEL_HEIGHT(f) ((f)->display.x->pixel_height)
244 244
245 /* Each X frame object points to its own struct x_display object 245 /* Each X frame object points to its own struct x_display object
246 in the display.x field. The x_display structure contains all 246 in the display.x field. The x_display structure contains all
247 the information that is specific to X windows. */ 247 the information that is specific to X windows. */
248 248
296 PIX_TYPE background_pixel; 296 PIX_TYPE background_pixel;
297 PIX_TYPE foreground_pixel; 297 PIX_TYPE foreground_pixel;
298 PIX_TYPE cursor_pixel; 298 PIX_TYPE cursor_pixel;
299 PIX_TYPE border_pixel; 299 PIX_TYPE border_pixel;
300 PIX_TYPE mouse_pixel; 300 PIX_TYPE mouse_pixel;
301
302 /* Windows for scrollbars */
303 Window v_scrollbar;
304 Window v_thumbup;
305 Window v_thumbdown;
306 Window v_slider;
307
308 Window h_scrollbar;
309 Window h_thumbleft;
310 Window h_thumbright;
311 Window h_slider;
312
313 /* Scrollbar info */
314
315 int v_scrollbar_width;
316 int h_scrollbar_height;
317 301
318 /* Descriptor for the cursor in use for this window. */ 302 /* Descriptor for the cursor in use for this window. */
319 #ifdef HAVE_X11 303 #ifdef HAVE_X11
320 Cursor text_cursor; 304 Cursor text_cursor;
321 Cursor nontext_cursor; 305 Cursor nontext_cursor;
346 the members (for example, `input' and `icon_pixmap') want to stay 330 the members (for example, `input' and `icon_pixmap') want to stay
347 the same throughout the execution of Emacs. So, we keep this 331 the same throughout the execution of Emacs. So, we keep this
348 structure around, just leaving values in it and adding new bits 332 structure around, just leaving values in it and adding new bits
349 to the mask as we go. */ 333 to the mask as we go. */
350 XWMHints wm_hints; 334 XWMHints wm_hints;
335
336 /* The list of vertical scrollbars currently being displayed in this
337 frame. */
338 struct scrollbar *vertical_scrollbars;
339
340 /* The timestamp used to implement the condemn/redeem/judge functions. */
341 int judge_timestamp;
342
343 /* The size of the extra width currently allotted for vertical
344 scrollbars, in pixels. */
345 int vertical_scrollbar_extra;
351 }; 346 };
352 347
353 /* Return the window associated with the frame F. */ 348 /* Return the window associated with the frame F. */
354 #define FRAME_X_WINDOW(f) ((f)->display.x->window_desc) 349 #define FRAME_X_WINDOW(f) ((f)->display.x->window_desc)
355 350
378 }; 373 };
379 #endif /* X10 */ 374 #endif /* X10 */
380 375
381 #define MAX_FACES_AND_GLYPHS 256 376 #define MAX_FACES_AND_GLYPHS 256
382 extern struct face *x_face_table[]; 377 extern struct face *x_face_table[];
378
379
380 /* X-specific scrollbar stuff. */
381
382 struct scrollbar {
383
384 /* The frame we're displayed on. */
385 struct frame *frame;
386
387 /* The next in the chain of scrollbars in this frame. */
388 struct scrollbar *next;
389
390 /* The window representing this scrollbar. */
391 Window window;
392
393 /* The position and size of the scrollbar in pixels, relative to the
394 frame. */
395 int top, left;
396 int width, height;
397
398 /* The starting and ending positions of the handle, relative to
399 the handle area. If they're equal, that means the handle
400 hasn't been drawn yet. */
401 int start, end;
402
403 /* The timestamp for judgement. If this is less than
404 judge_timestamp in the x_display structure, this scrollbar is
405 damned. */
406 int judge_timestamp;
407
408 /* If the scrollbar handle is currently being dragged by the user,
409 this is the number of pixels from the top of the handle to the
410 place where the user grabbed it. If the handle isn't currently
411 being dragged, this is -1. */
412 int dragging;
413 };
414
415 /* Return the outside pixel width for a vertical scrollbar on frame F. */
416 #define VERTICAL_SCROLLBAR_PIXEL_WIDTH(f) (2*FONT_WIDTH ((f)->display.x->font))
417
418 /* Return the outside pixel height for a vertical scrollbar HEIGHT
419 rows high on frame F. */
420 #define VERTICAL_SCROLLBAR_PIXEL_HEIGHT(f, height) \
421 ((height) * FONT_HEIGHT ((f)->display.x->font))
422
423
424 /* Border widths for scrollbars. */
425 #define VERTICAL_SCROLLBAR_LEFT_BORDER (1)
426 #define VERTICAL_SCROLLBAR_RIGHT_BORDER (2)
427 #define VERTICAL_SCROLLBAR_TOP_BORDER (1)
428 #define VERTICAL_SCROLLBAR_BOTTOM_BORDER (1)
429
430
431 /* Manipulating pixel sizes and character sizes.
432 Knowledge of which factors affect the overall size of the window should
433 be hidden in these macros, if that's possible.
434
435 /* Return the pixel width of frame F if it has WIDTH columns. */
436 #define CHAR_TO_PIXEL_WIDTH(f, width) \
437 ((width) * FONT_WIDTH ((f)->display.x->font) \
438 + 2 * (f)->display.x->internal_border_width \
439 + (f)->display.x->vertical_scrollbar_extra)
440
441 /* Return the pixel height of frame F if it has HEIGHT rows. */
442 #define CHAR_TO_PIXEL_HEIGHT(f, height) \
443 ((height) * FONT_HEIGHT ((f)->display.x->font) \
444 + 2 * (f)->display.x->internal_border_width)
445
446 /* How many columns of text can we fit in WIDTH pixels on frame F? */
447 #define PIXEL_TO_CHAR_WIDTH(f, width) \
448 (((width) \
449 - (f)->display.x->vertical_scrollbar_extra \
450 - 2 * (f)->display.x->internal_border_width) \
451 / FONT_WIDTH ((f)->display.x->font))
452
453 /* How many rows of text can we fit in HEIGHT pixels on frame F? */
454 #define PIXEL_TO_CHAR_HEIGHT(f, height) \
455 (((height) \
456 - 2 * (f)->display.x->internal_border_width) \
457 / FONT_HEIGHT ((f)->display.x->font))
458