1
Fork 0
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:
Kim F. Storm 2003-05-24 22:08:20 +00:00
parent 949cf20fe5
commit 6000501bd8

View file

@ -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. */