mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-25 06:50:46 -08:00
(struct window): Rename members left to left_col,
top to top_line, height to total_lines, width to total_cols, left_margin_width to left_margin_cols, right_margin_width to right_margin_cols, orig_height to orig_total_lines, orig_top to orig_top_line. All uses changed. (struct window): New members left_fringe_width, right_fringe_width, fringes_outside_margins, scroll_bar_width, vertical_scroll_bar_type. (WINDOW_XFRAME, WINDOW_FRAME_COLUMN_WIDTH, WINDOW_FRAME_LINE_HEIGHT): New macros primarily used to simplify other macros. (WINDOW_TOTAL_COLS): New macro. Change relevant code that referred to XINT (w->width). (WINDOW_TOTAL_LINES): New macro. Change relevant code that referred to XINT (w->height). (WINDOW_TOTAL_WIDTH): New macro. Change relevant code that referred to XINT (w->width) * canon_x_unit. (WINDOW_TOTAL_HEIGHT): New macro. Change relevant code that referred to XINT (w->height) * canon_y_unit. (WINDOW_LEFT_EDGE_COL): New macro. Change relevant code that referred to XINT (w->left). (WINDOW_RIGHT_EDGE_COL): Renamed from WINDOW_RIGHT_EDGE. Change all uses and code that referred to XINT (w->left) + XINT (w->width). (WINDOW_TOP_EDGE_LINE): New macro. Change relevant code that referred to XINT (w->top). (WINDOW_BOTTOM_EDGE_LINE): New macro. Change relevant code that referred to XINT (w->top) + XINT (w->height). (WINDOW_LEFT_EDGE_X): New macro. Change relevant code that referred to XINT (w->left) * canon_x_unit. (WINDOW_RIGHT_EDGE_X): New macro. Change relevant code that referred to (XINT (w->left) + XINT (w->width)) * canon_x_unit. (WINDOW_TOP_EDGE_Y): New macro. Change relevant code that referred to XINT (w->top) * canon_y_unit. (WINDOW_BOTTOM_EDGE_Y): New macro. Change relevant code that referred to (XINT (w->top) + XINT (w->height)) * canon_y_unit. (WINDOW_LEFTMOST_P): New macro. (WINDOW_BOX_LEFT_EDGE_COL): Renamed from WINDOW_LEFT_MARGIN. All uses changed. (WINDOW_BOX_RIGHT_EDGE_COL): Renamed from WINDOW_RIGHT_MARGIN. All uses changed. (WINDOW_BOX_LEFT_EDGE_X): Renamed from WINDOW_DISPLAY_LEFT_EDGE_PIXEL_X, moved from dispextern.h. Do not exclude left fringe width. (WINDOW_BOX_RIGHT_EDGE_X): Renamed from WINDOW_DISPLAY_RIGHT_EDGE_PIXEL_X, moved from dispextern.h. Do not exclude fringe widths. (WINDOW_LEFT_FRINGE_WIDTH, WINDOW_RIGHT_FRINGE_WIDTH) (WINDOW_FRINGE_COLS, WINDOW_TOTAL_FRINGE_WIDTH): New macros. Change relevant code that referred to FRAME_LEFT_FRINGE_WIDTH, FRAME_RIGHT_FRINGE_WIDTH, FRAME_FRINGE_COLS, and FRAME_TOTAL_FRINGE_WIDTH to allow per-window fringe settings. (WINDOW_HAS_FRINGES_OUTSIDE_MARGINS): New macro. (WINDOW_VERTICAL_SCROLL_BAR_TYPE, WINDOW_HAS_VERTICAL_SCROLL_BAR) (WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT) (WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_RIGHT) (WINDOW_CONFIG_SCROLL_BAR_WIDTH, WINDOW_CONFIG_SCROLL_BAR_COLS): New macros. Change code which referenced corresponding FRAME_VERTICAL_SCROLL_BAR_TYPE, FRAME_HAS_VERTICAL_SCROLL_BARS, FRAME_HAS_VERTICAL_SCROLL_BARS_ON_LEFT, FRAME_HAS_VERTICAL_SCROLL_BARS_ON_RIGHT, FRAME_SCROLL_BAR_PIXEL_WIDTH, and FRAME_SCROLL_BAR_COLS macros to allow per-window scroll-bar settings. (WINDOW_LEFT_SCROLL_BAR_COLS, WINDOW_RIGHT_SCROLL_BAR_COLS): New macros. (WINDOW_LEFT_SCROLL_BAR_AREA_WIDTH): New macro. Change code that referred to FRAME_LEFT_SCROLL_BAR_WIDTH. (WINDOW_RIGHT_SCROLL_BAR_AREA_WIDTH): New macro. Change code that referred to FRAME_HAS_VERTICAL_SCROLL_BARS_ON_RIGHT and FRAME_SCROLL_BAR_WIDTH. (WINDOW_SCROLL_BAR_COLS, WINDOW_SCROLL_BAR_AREA_WIDTH) (WINDOW_SCROLL_BAR_AREA_X): New macros. (WINDOW_HEADER_LINE_HEIGHT): Renamed from WINDOW_DISPLAY_HEADER_LINE_HEIGHT, moved from dispextern.h. (WINDOW_BOX_HEIGHT_NO_MODE_LINE): Renamed from WINDOW_DISPLAY_HEIGHT_NO_MODE_LINE, moved from dispextern.h. (WINDOW_BOX_TEXT_HEIGHT): Renamed from WINDOW_DISPLAY_PIXEL_WIDTH, moved from dispextern.h. (WINDOW_TO_FRAME_PIXEL_X, WINDOW_TO_FRAME_PIXEL_Y) (FRAME_TO_WINDOW_PIXEL_X, FRAME_TO_WINDOW_PIXEL_Y) (WINDOW_TEXT_TO_FRAME_PIXEL_X): Moved here from dispextern.h. (WINDOW_LEFT_MARGIN_WIDTH): Renamed from WINDOW_DISPLAY_LEFT_AREA_PIXEL_WIDTH, moved from dispextern.h. (WINDOW_RIGHT_MARGIN_WIDTH): Renamed from WINDOW_DISPLAY_RIGHT_AREA_PIXEL_WIDTH, moved from dispextern.h. (window_from_coordinates): Update prototype. (Fset_window_buffer): Update EXFUN. (set_window_buffer): Update prototype.
This commit is contained in:
parent
949cf20fe5
commit
6000501bd8
1 changed files with 406 additions and 29 deletions
435
src/window.h
435
src/window.h
|
|
@ -24,6 +24,8 @@ Boston, MA 02111-1307, USA. */
|
|||
|
||||
#include "dispextern.h"
|
||||
|
||||
extern Lisp_Object Qleft, Qright;
|
||||
|
||||
/* Windows are allocated as if they were vectors, but then the
|
||||
Lisp data type is changed to Lisp_Window. They are garbage
|
||||
collected along with the vectors.
|
||||
|
|
@ -108,11 +110,11 @@ struct window
|
|||
Lisp_Object parent;
|
||||
/* The upper left corner coordinates of this window,
|
||||
as integers relative to upper left corner of frame = 0, 0 */
|
||||
Lisp_Object left;
|
||||
Lisp_Object top;
|
||||
Lisp_Object left_col;
|
||||
Lisp_Object top_line;
|
||||
/* The size of the window */
|
||||
Lisp_Object height;
|
||||
Lisp_Object width;
|
||||
Lisp_Object total_lines;
|
||||
Lisp_Object total_cols;
|
||||
/* The buffer displayed in this window */
|
||||
/* Of the fields vchild, hchild and buffer, only one is non-nil. */
|
||||
Lisp_Object buffer;
|
||||
|
|
@ -160,8 +162,22 @@ struct window
|
|||
|
||||
/* Width of left and right marginal areas. A value of nil means
|
||||
no margin. */
|
||||
Lisp_Object left_margin_width;
|
||||
Lisp_Object right_margin_width;
|
||||
Lisp_Object left_margin_cols, right_margin_cols;
|
||||
|
||||
/* Width of left and right fringes.
|
||||
A value of nil or t means use frame values. */
|
||||
Lisp_Object left_fringe_width, right_fringe_width;
|
||||
|
||||
/* Non-nil means fringes are drawn outside display margins;
|
||||
othersize draw them between margin areas and text. */
|
||||
Lisp_Object fringes_outside_margins;
|
||||
|
||||
/* Pixel width of scroll bars.
|
||||
A value of nil or t means use frame values. */
|
||||
Lisp_Object scroll_bar_width;
|
||||
/* Type of vertical scroll bar. A value of nil means
|
||||
no scroll bar. A value of t means use frame value. */
|
||||
Lisp_Object vertical_scroll_bar_type;
|
||||
|
||||
/* The rest are currently not used or only half used */
|
||||
/* Frame coords of mark as of last time display completed */
|
||||
|
|
@ -211,7 +227,7 @@ struct window
|
|||
|
||||
/* Original window height and top before mini-window was
|
||||
enlarged. */
|
||||
Lisp_Object orig_height, orig_top;
|
||||
Lisp_Object orig_total_lines, orig_top_line;
|
||||
|
||||
/* No Lisp data may follow below this point without changing
|
||||
mark_object in alloc.c. The member current_matrix must be the
|
||||
|
|
@ -281,41 +297,401 @@ struct window
|
|||
|
||||
#define MINI_WINDOW_P(W) (!NILP ((W)->mini_p))
|
||||
|
||||
/* Return the window column at which the text in window W starts.
|
||||
This is different from the `left' field because it does not include
|
||||
a left-hand scroll bar if any. */
|
||||
/* General window layout:
|
||||
|
||||
#define WINDOW_LEFT_MARGIN(W) \
|
||||
(XFASTINT ((W)->left) \
|
||||
+ FRAME_LEFT_SCROLL_BAR_WIDTH (XFRAME (WINDOW_FRAME (W))))
|
||||
LEFT_EDGE_COL RIGHT_EDGE_COL
|
||||
| |
|
||||
| |
|
||||
| BOX_LEFT_EDGE_COL |
|
||||
| | BOX_RIGHT_EDGE_COL |
|
||||
| | | |
|
||||
v v v v
|
||||
<-><-><---><-----------><---><-><->
|
||||
^ ^ ^ ^ ^ ^ ^
|
||||
| | | | | | |
|
||||
| | | | | | +-- RIGHT_SCROLL_BAR_COLS
|
||||
| | | | | +----- RIGHT_FRINGE_WIDTH
|
||||
| | | | +--------- RIGHT_MARGIN_COLS
|
||||
| | | |
|
||||
| | | +------------------ TEXT_AREA_COLS
|
||||
| | |
|
||||
| | +--------------------------- LEFT_MARGIN_COLS
|
||||
| +------------------------------- LEFT_FRINGE_WIDTH
|
||||
+---------------------------------- LEFT_SCROLL_BAR_COLS
|
||||
|
||||
*/
|
||||
|
||||
/* Return the window column before which window W ends.
|
||||
|
||||
/* A handy macro. */
|
||||
|
||||
#define WINDOW_XFRAME(W) \
|
||||
(XFRAME (WINDOW_FRAME ((W))))
|
||||
|
||||
/* Return the canonical column width of the frame of window W. */
|
||||
|
||||
#define WINDOW_FRAME_COLUMN_WIDTH(W) \
|
||||
(FRAME_COLUMN_WIDTH (WINDOW_XFRAME ((W))))
|
||||
|
||||
/* Return the canonical column width of the frame of window W. */
|
||||
|
||||
#define WINDOW_FRAME_LINE_HEIGHT(W) \
|
||||
(FRAME_LINE_HEIGHT (WINDOW_XFRAME ((W))))
|
||||
|
||||
|
||||
/* Return the frame width in canonical column units.
|
||||
This includes scroll bars and fringes. */
|
||||
|
||||
#define WINDOW_TOTAL_COLS(W) \
|
||||
(XFASTINT ((W)->total_cols))
|
||||
|
||||
/* Return the frame height in canonical line units.
|
||||
This includes header and mode lines, if any. */
|
||||
|
||||
#define WINDOW_TOTAL_LINES(W) \
|
||||
(XFASTINT ((W)->total_lines))
|
||||
|
||||
|
||||
/* Return the total pixel width of window W. */
|
||||
|
||||
#define WINDOW_TOTAL_WIDTH(W) \
|
||||
(WINDOW_TOTAL_COLS (W) * WINDOW_FRAME_COLUMN_WIDTH (W))
|
||||
|
||||
/* Return the total pixel height of window W. */
|
||||
|
||||
#define WINDOW_TOTAL_HEIGHT(W) \
|
||||
(WINDOW_TOTAL_LINES (W) * WINDOW_FRAME_LINE_HEIGHT (W))
|
||||
|
||||
|
||||
/* Return the canonical frame column at which window W starts.
|
||||
This includes a left-hand scroll bar, if any. */
|
||||
|
||||
#define WINDOW_LEFT_EDGE_COL(W) \
|
||||
(XFASTINT ((W)->left_col))
|
||||
|
||||
/* Return the canonical frame column before which window W ends.
|
||||
This includes a right-hand scroll bar, if any. */
|
||||
|
||||
#define WINDOW_RIGHT_EDGE(W) \
|
||||
(XFASTINT ((W)->left) + XFASTINT ((W)->width))
|
||||
#define WINDOW_RIGHT_EDGE_COL(W) \
|
||||
(WINDOW_LEFT_EDGE_COL (W) + WINDOW_TOTAL_COLS (W))
|
||||
|
||||
/* Return the window column before which the text in window W ends.
|
||||
This is different from WINDOW_RIGHT_EDGE because it does not include
|
||||
a scroll bar or window-separating line on the right edge. */
|
||||
/* Return the canonical frame line at which window W starts.
|
||||
This includes a header line, if any. */
|
||||
|
||||
#define WINDOW_TOP_EDGE_LINE(W) \
|
||||
(XFASTINT ((W)->top_line))
|
||||
|
||||
/* Return the canonical frame line before which window W ends.
|
||||
This includes a mode line, if any. */
|
||||
|
||||
#define WINDOW_BOTTOM_EDGE_LINE(W) \
|
||||
(WINDOW_TOP_EDGE_LINE (W) + WINDOW_TOTAL_LINES (W))
|
||||
|
||||
|
||||
/* Return the frame x-position at which window W starts.
|
||||
This includes a left-hand scroll bar, if any. */
|
||||
|
||||
#define WINDOW_LEFT_EDGE_X(W) \
|
||||
(FRAME_INTERNAL_BORDER_WIDTH (WINDOW_XFRAME (W)) \
|
||||
+ WINDOW_LEFT_EDGE_COL (W) * WINDOW_FRAME_COLUMN_WIDTH (W))
|
||||
|
||||
/* Return the frame x- position before which window W ends.
|
||||
This includes a right-hand scroll bar, if any. */
|
||||
|
||||
#define WINDOW_RIGHT_EDGE_X(W) \
|
||||
(FRAME_INTERNAL_BORDER_WIDTH (WINDOW_XFRAME (W)) \
|
||||
+ WINDOW_RIGHT_EDGE_COL (W) * WINDOW_FRAME_COLUMN_WIDTH (W))
|
||||
|
||||
/* Return the frame y-position at which window W starts.
|
||||
This includes a header line, if any. */
|
||||
|
||||
#define WINDOW_TOP_EDGE_Y(W) \
|
||||
(FRAME_INTERNAL_BORDER_WIDTH (WINDOW_XFRAME (W)) \
|
||||
+ WINDOW_TOP_EDGE_LINE (W) * WINDOW_FRAME_LINE_HEIGHT (W))
|
||||
|
||||
/* Return the frame y-position before which window W ends.
|
||||
This includes a mode line, if any. */
|
||||
|
||||
#define WINDOW_BOTTOM_EDGE_Y(W) \
|
||||
(FRAME_INTERNAL_BORDER_WIDTH (WINDOW_XFRAME (W)) \
|
||||
+ WINDOW_BOTTOM_EDGE_LINE (W) * WINDOW_FRAME_LINE_HEIGHT (W))
|
||||
|
||||
#define WINDOW_RIGHT_MARGIN(W) \
|
||||
(WINDOW_RIGHT_EDGE (W) \
|
||||
- (FRAME_HAS_VERTICAL_SCROLL_BARS_ON_RIGHT (XFRAME (WINDOW_FRAME (W))) \
|
||||
? FRAME_SCROLL_BAR_COLS (XFRAME (WINDOW_FRAME (W))) \
|
||||
: 0))
|
||||
|
||||
/* 1 if window W takes up the full width of its frame. */
|
||||
|
||||
#define WINDOW_FULL_WIDTH_P(W) \
|
||||
(XFASTINT ((W)->width) == FRAME_WINDOW_WIDTH (XFRAME (WINDOW_FRAME (W))))
|
||||
(WINDOW_TOTAL_COLS (W) == FRAME_TOTAL_COLS (WINDOW_XFRAME (W)))
|
||||
|
||||
/* 1 if window W's has no other windows to its left in its frame. */
|
||||
|
||||
#define WINDOW_LEFTMOST_P(W) \
|
||||
(WINDOW_LEFT_EDGE_COL (W) == 0)
|
||||
|
||||
/* 1 if window W's has no other windows to its right in its frame. */
|
||||
|
||||
#define WINDOW_RIGHTMOST_P(W) \
|
||||
(WINDOW_RIGHT_EDGE (W) == FRAME_WINDOW_WIDTH (XFRAME (WINDOW_FRAME (W))))
|
||||
(WINDOW_RIGHT_EDGE_COL (W) == FRAME_TOTAL_COLS (WINDOW_XFRAME (W)))
|
||||
|
||||
|
||||
/* Return the frame column at which the text (or left fringe) in
|
||||
window W starts. This is different from the `LEFT_EDGE' because it
|
||||
does not include a left-hand scroll bar if any. */
|
||||
|
||||
#define WINDOW_BOX_LEFT_EDGE_COL(W) \
|
||||
(WINDOW_LEFT_EDGE_COL (W) \
|
||||
+ WINDOW_LEFT_SCROLL_BAR_COLS (W))
|
||||
|
||||
/* Return the window column before which the text in window W ends.
|
||||
This is different from WINDOW_RIGHT_EDGE_COL because it does not
|
||||
include a scroll bar or window-separating line on the right edge. */
|
||||
|
||||
#define WINDOW_BOX_RIGHT_EDGE_COL(W) \
|
||||
(WINDOW_RIGHT_EDGE_COL (W) \
|
||||
- WINDOW_RIGHT_SCROLL_BAR_COLS (W))
|
||||
|
||||
|
||||
/* Return the frame position at which the text (or left fringe) in
|
||||
window W starts. This is different from the `LEFT_EDGE' because it
|
||||
does not include a left-hand scroll bar if any. */
|
||||
|
||||
#define WINDOW_BOX_LEFT_EDGE_X(W) \
|
||||
(FRAME_INTERNAL_BORDER_WIDTH (WINDOW_XFRAME (W)) \
|
||||
+ WINDOW_BOX_LEFT_EDGE_COL (W) * WINDOW_FRAME_COLUMN_WIDTH (W))
|
||||
|
||||
/* Return the window column before which the text in window W ends.
|
||||
This is different from WINDOW_RIGHT_EDGE_COL because it does not
|
||||
include a scroll bar or window-separating line on the right edge. */
|
||||
|
||||
#define WINDOW_BOX_RIGHT_EDGE_X(W) \
|
||||
(FRAME_INTERNAL_BORDER_WIDTH (WINDOW_XFRAME (W)) \
|
||||
+ WINDOW_BOX_RIGHT_EDGE_COL (W) * WINDOW_FRAME_COLUMN_WIDTH (W))
|
||||
|
||||
|
||||
/* Width of left margin area in columns. */
|
||||
|
||||
#define WINDOW_LEFT_MARGIN_COLS(W) \
|
||||
(NILP ((W)->left_margin_cols) \
|
||||
? 0 \
|
||||
: XINT ((W)->left_margin_cols))
|
||||
|
||||
/* Width of right marginal area in columns. */
|
||||
|
||||
#define WINDOW_RIGHT_MARGIN_COLS(W) \
|
||||
(NILP ((W)->right_margin_cols) \
|
||||
? 0 \
|
||||
: XINT ((W)->right_margin_cols))
|
||||
|
||||
/* Width of left margin area in pixels. */
|
||||
|
||||
#define WINDOW_LEFT_MARGIN_WIDTH(W) \
|
||||
(NILP ((W)->left_margin_cols) \
|
||||
? 0 \
|
||||
: (XINT ((W)->left_margin_cols) \
|
||||
* WINDOW_FRAME_COLUMN_WIDTH (W)))
|
||||
|
||||
/* Width of right marginal area in pixels. */
|
||||
|
||||
#define WINDOW_RIGHT_MARGIN_WIDTH(W) \
|
||||
(NILP ((W)->right_margin_cols) \
|
||||
? 0 \
|
||||
: (XINT ((W)->right_margin_cols) \
|
||||
* WINDOW_FRAME_COLUMN_WIDTH (W)))
|
||||
|
||||
/* Total width of fringes reserved for drawing truncation bitmaps,
|
||||
continuation bitmaps and alike. The width is in canonical char
|
||||
units of the frame. This must currently be the case because window
|
||||
sizes aren't pixel values. If it weren't the case, we wouldn't be
|
||||
able to split windows horizontally nicely. */
|
||||
|
||||
#define WINDOW_FRINGE_COLS(W) \
|
||||
((INTEGERP ((W)->left_fringe_width) \
|
||||
|| INTEGERP ((W)->right_fringe_width)) \
|
||||
? ((WINDOW_LEFT_FRINGE_WIDTH (W) \
|
||||
+ WINDOW_RIGHT_FRINGE_WIDTH (W) \
|
||||
+ WINDOW_FRAME_COLUMN_WIDTH (W) - 1) \
|
||||
/ WINDOW_FRAME_COLUMN_WIDTH (W)) \
|
||||
: FRAME_FRINGE_COLS (WINDOW_XFRAME (W)))
|
||||
|
||||
/* Pixel-width of the left and right fringe. */
|
||||
|
||||
#define WINDOW_LEFT_FRINGE_WIDTH(W) \
|
||||
(INTEGERP ((W)->left_fringe_width) \
|
||||
? XFASTINT ((W)->left_fringe_width) \
|
||||
: FRAME_LEFT_FRINGE_WIDTH (WINDOW_XFRAME (W)))
|
||||
|
||||
#define WINDOW_RIGHT_FRINGE_WIDTH(W) \
|
||||
(INTEGERP ((W)->right_fringe_width) \
|
||||
? XFASTINT ((W)->right_fringe_width) \
|
||||
: FRAME_RIGHT_FRINGE_WIDTH (WINDOW_XFRAME (W)))
|
||||
|
||||
/* Total width of fringes in pixels. */
|
||||
|
||||
#define WINDOW_TOTAL_FRINGE_WIDTH(W) \
|
||||
(WINDOW_LEFT_FRINGE_WIDTH (W) + WINDOW_RIGHT_FRINGE_WIDTH (W))
|
||||
|
||||
/* Are fringes outside display margins in window W. */
|
||||
|
||||
#define WINDOW_HAS_FRINGES_OUTSIDE_MARGINS(W) \
|
||||
(!NILP ((W)->fringes_outside_margins))
|
||||
|
||||
/* Say whether scroll bars are currently enabled for window W,
|
||||
and which side they are on. */
|
||||
|
||||
#define WINDOW_VERTICAL_SCROLL_BAR_TYPE(w) \
|
||||
(EQ ((w)->vertical_scroll_bar_type, Qt) \
|
||||
? FRAME_VERTICAL_SCROLL_BAR_TYPE (WINDOW_XFRAME (w)) \
|
||||
: EQ ((w)->vertical_scroll_bar_type, Qleft) \
|
||||
? vertical_scroll_bar_left \
|
||||
: EQ ((w)->vertical_scroll_bar_type, Qright) \
|
||||
? vertical_scroll_bar_right \
|
||||
: vertical_scroll_bar_none) \
|
||||
|
||||
#define WINDOW_HAS_VERTICAL_SCROLL_BAR(w) \
|
||||
(EQ ((w)->vertical_scroll_bar_type, Qt) \
|
||||
? FRAME_HAS_VERTICAL_SCROLL_BARS (WINDOW_XFRAME (w)) \
|
||||
: !NILP ((w)->vertical_scroll_bar_type))
|
||||
|
||||
#define WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT(w) \
|
||||
(EQ ((w)->vertical_scroll_bar_type, Qt) \
|
||||
? FRAME_HAS_VERTICAL_SCROLL_BARS_ON_LEFT (WINDOW_XFRAME (w)) \
|
||||
: EQ ((w)->vertical_scroll_bar_type, Qleft))
|
||||
|
||||
#define WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_RIGHT(w) \
|
||||
(EQ ((w)->vertical_scroll_bar_type, Qt) \
|
||||
? FRAME_HAS_VERTICAL_SCROLL_BARS_ON_RIGHT (WINDOW_XFRAME (w))\
|
||||
: EQ ((w)->vertical_scroll_bar_type, Qright))
|
||||
|
||||
/* Width that a scroll bar in window W should have, if there is one.
|
||||
Measured in pixels. If scroll bars are turned off, this is still
|
||||
nonzero. */
|
||||
|
||||
#define WINDOW_CONFIG_SCROLL_BAR_WIDTH(w) \
|
||||
(INTEGERP ((w)->scroll_bar_width) \
|
||||
? XFASTINT ((w)->scroll_bar_width) \
|
||||
: FRAME_CONFIG_SCROLL_BAR_WIDTH (WINDOW_XFRAME (w)))
|
||||
|
||||
/* Width that a scroll bar in window W should have, if there is one.
|
||||
Measured in columns (characters). If scroll bars are turned off,
|
||||
this is still nonzero. */
|
||||
|
||||
#define WINDOW_CONFIG_SCROLL_BAR_COLS(w) \
|
||||
(INTEGERP ((w)->scroll_bar_width) \
|
||||
? ((XFASTINT ((w)->scroll_bar_width) \
|
||||
+ WINDOW_FRAME_COLUMN_WIDTH (w) - 1) \
|
||||
/ WINDOW_FRAME_COLUMN_WIDTH (w)) \
|
||||
: FRAME_CONFIG_SCROLL_BAR_COLS (WINDOW_XFRAME (w)))
|
||||
|
||||
/* Width of a scroll bar in window W, measured in columns (characters),
|
||||
but only if scroll bars are on the left. If scroll bars are on
|
||||
the right in this frame, or there are no scroll bars, value is 0. */
|
||||
|
||||
#define WINDOW_LEFT_SCROLL_BAR_COLS(w) \
|
||||
(WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT (w) \
|
||||
? (WINDOW_CONFIG_SCROLL_BAR_COLS (w)) \
|
||||
: 0)
|
||||
|
||||
/* Width of a left scroll bar area in window W , measured in pixels. */
|
||||
|
||||
#define WINDOW_LEFT_SCROLL_BAR_AREA_WIDTH(w) \
|
||||
(WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT (w) \
|
||||
? (WINDOW_CONFIG_SCROLL_BAR_COLS (w) * WINDOW_FRAME_COLUMN_WIDTH (w)) \
|
||||
: 0)
|
||||
|
||||
/* Width of a scroll bar in window W, measured in columns (characters),
|
||||
but only if scroll bars are on the right. If scroll bars are on
|
||||
the left in this frame, or there are no scroll bars, value is 0. */
|
||||
|
||||
#define WINDOW_RIGHT_SCROLL_BAR_COLS(w) \
|
||||
(WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_RIGHT (w) \
|
||||
? WINDOW_CONFIG_SCROLL_BAR_COLS (w) \
|
||||
: 0)
|
||||
|
||||
/* Width of a left scroll bar area in window W , measured in pixels. */
|
||||
|
||||
#define WINDOW_RIGHT_SCROLL_BAR_AREA_WIDTH(w) \
|
||||
(WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_RIGHT (w) \
|
||||
? (WINDOW_CONFIG_SCROLL_BAR_COLS (w) * WINDOW_FRAME_COLUMN_WIDTH (w)) \
|
||||
: 0)
|
||||
|
||||
|
||||
/* Actual width of a scroll bar in window W, measured in columns. */
|
||||
|
||||
#define WINDOW_SCROLL_BAR_COLS(w) \
|
||||
(WINDOW_HAS_VERTICAL_SCROLL_BAR (w) \
|
||||
? WINDOW_CONFIG_SCROLL_BAR_COLS (w) \
|
||||
: 0)
|
||||
|
||||
/* Width of a left scroll bar area in window W , measured in pixels. */
|
||||
|
||||
#define WINDOW_SCROLL_BAR_AREA_WIDTH(w) \
|
||||
(WINDOW_HAS_VERTICAL_SCROLL_BAR (w) \
|
||||
? (WINDOW_CONFIG_SCROLL_BAR_COLS (w) * WINDOW_FRAME_COLUMN_WIDTH (w)) \
|
||||
: 0)
|
||||
|
||||
|
||||
/* Return the frame position where the scroll bar of window W starts. */
|
||||
|
||||
#define WINDOW_SCROLL_BAR_AREA_X(W) \
|
||||
(WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_RIGHT (W) \
|
||||
? WINDOW_BOX_RIGHT_EDGE_X (W) \
|
||||
: WINDOW_LEFT_EDGE_X (W))
|
||||
|
||||
|
||||
/* Height in pixels of the mode line. May be zero if W doesn't have a
|
||||
mode line. */
|
||||
|
||||
#define WINDOW_MODE_LINE_HEIGHT(W) \
|
||||
(WINDOW_WANTS_MODELINE_P ((W)) \
|
||||
? CURRENT_MODE_LINE_HEIGHT (W) \
|
||||
: 0)
|
||||
|
||||
/* Height in pixels of the header line. Zero if W doesn't have a header
|
||||
line. */
|
||||
|
||||
#define WINDOW_HEADER_LINE_HEIGHT(W) \
|
||||
(WINDOW_WANTS_HEADER_LINE_P ((W)) \
|
||||
? CURRENT_HEADER_LINE_HEIGHT (W) \
|
||||
: 0)
|
||||
|
||||
/* Pixel height of window W without mode line. */
|
||||
|
||||
#define WINDOW_BOX_HEIGHT_NO_MODE_LINE(W) \
|
||||
(WINDOW_TOTAL_HEIGHT ((W)) \
|
||||
- WINDOW_MODE_LINE_HEIGHT ((W)))
|
||||
|
||||
/* Pixel height of window W without mode and header line. */
|
||||
|
||||
#define WINDOW_BOX_TEXT_HEIGHT(W) \
|
||||
(WINDOW_TOTAL_HEIGHT ((W)) \
|
||||
- WINDOW_MODE_LINE_HEIGHT ((W)) \
|
||||
- WINDOW_HEADER_LINE_HEIGHT ((W)))
|
||||
|
||||
|
||||
/* Convert window W relative pixel X to frame pixel coordinates. */
|
||||
|
||||
#define WINDOW_TO_FRAME_PIXEL_X(W, X) \
|
||||
((X) + WINDOW_BOX_LEFT_EDGE_X ((W)))
|
||||
|
||||
/* Convert window W relative pixel Y to frame pixel coordinates. */
|
||||
|
||||
#define WINDOW_TO_FRAME_PIXEL_Y(W, Y) \
|
||||
((Y) + WINDOW_TOP_EDGE_Y ((W)))
|
||||
|
||||
/* Convert frame relative pixel X to window relative pixel X. */
|
||||
|
||||
#define FRAME_TO_WINDOW_PIXEL_X(W, X) \
|
||||
((X) - WINDOW_BOX_LEFT_EDGE_X ((W)))
|
||||
|
||||
/* Convert frame relative pixel Y to window relative pixel Y. */
|
||||
|
||||
#define FRAME_TO_WINDOW_PIXEL_Y(W, Y) \
|
||||
((Y) - WINDOW_TOP_EDGE_Y ((W)))
|
||||
|
||||
/* Convert a text area relative x-position in window W to frame X
|
||||
pixel coordinates. */
|
||||
|
||||
#define WINDOW_TEXT_TO_FRAME_PIXEL_X(W, X) \
|
||||
(window_box_left ((W), TEXT_AREA) + (X))
|
||||
|
||||
/* This is the window in which the terminal's cursor should
|
||||
be left when nothing is being done with it. This must
|
||||
always be a leaf window, and its buffer is selected by
|
||||
|
|
@ -368,7 +744,7 @@ extern Lisp_Object Vmouse_event;
|
|||
EXFUN (Fnext_window, 3);
|
||||
EXFUN (Fselect_window, 2);
|
||||
EXFUN (Fdisplay_buffer, 3);
|
||||
EXFUN (Fset_window_buffer, 2);
|
||||
EXFUN (Fset_window_buffer, 3);
|
||||
EXFUN (Fset_window_hscroll, 2);
|
||||
EXFUN (Fwindow_hscroll, 1);
|
||||
EXFUN (Fset_window_vscroll, 2);
|
||||
|
|
@ -379,7 +755,8 @@ EXFUN (Fset_window_point, 2);
|
|||
extern Lisp_Object make_window P_ ((void));
|
||||
extern void delete_window P_ ((Lisp_Object));
|
||||
extern Lisp_Object window_from_coordinates P_ ((struct frame *, int, int,
|
||||
enum window_part *, int));
|
||||
enum window_part *,
|
||||
int *, int*, int));
|
||||
EXFUN (Fwindow_dedicated_p, 1);
|
||||
extern int window_height P_ ((Lisp_Object));
|
||||
extern int window_width P_ ((Lisp_Object));
|
||||
|
|
@ -400,7 +777,7 @@ extern void shrink_mini_window P_ ((struct window *));
|
|||
it's not allowed. */
|
||||
|
||||
void set_window_buffer P_ ((Lisp_Object window, Lisp_Object buffer,
|
||||
int run_hooks_p));
|
||||
int run_hooks_p, int keep_margins_p));
|
||||
|
||||
/* Prompt to display in front of the minibuffer contents. */
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue