+/* Don't multiply include: dispextern.h includes macterm.h which includes frame.h
+ some emacs source includes both dispextern.h and frame.h */
+#ifndef _XFRAME_H_
+#define _XFRAME_H_
+
/* Define frame-object for GNU Emacs.
Copyright (C) 1993, 1994 Free Software Foundation, Inc.
output_termcap,
output_x_window,
output_msdos_raw,
- output_w32
+ output_w32,
+ output_mac
};
enum vertical_scroll_bar_type
toolkit support is available. */
Lisp_Object menu_bar_window;
- /* A window used to display the toolbar of a frame. */
- Lisp_Object toolbar_window;
+ /* A window used to display the tool-bar of a frame. */
+ Lisp_Object tool_bar_window;
- /* Desired and current toolbar items. */
- Lisp_Object desired_toolbar_items, current_toolbar_items;
+ /* Desired and current tool-bar items. */
+ Lisp_Object desired_tool_bar_items, current_tool_bar_items;
- /* Desired and current contents displayed in toolbar_window. */
- Lisp_Object desired_toolbar_string, current_toolbar_string;
+ /* Desired and current contents displayed in tool_bar_window. */
+ Lisp_Object desired_tool_bar_string, current_tool_bar_string;
/* beyond here, there should be no more Lisp_Object components. */
be used for output. */
unsigned glyphs_initialized_p : 1;
- /* Margin at the top of the frame. Used to display the toolbar. */
- int toolbar_lines;
+ /* Margin at the top of the frame. Used to display the tool-bar. */
+ int tool_bar_lines;
- int n_desired_toolbar_items;
- int n_current_toolbar_items;
+ int n_desired_tool_bar_items;
+ int n_current_tool_bar_items;
/* A buffer for decode_mode_line. */
char *decode_mode_spec_buffer;
{
struct x_output *x;
struct w32_output *w32;
+ struct mac_output *mac;
int nothing;
}
output_data;
/* Nonzero if the mouse has moved on this display
since the last time we checked. */
char mouse_moved;
+
+ /* Exponent for gamma correction of colors. 1/(VIEWING_GAMMA *
+ SCREEN_GAMMA) where viewing_gamma is 0.4545 and SCREEN_GAMMA is a
+ frame parameter. 0 means don't do gamma correction. */
+ double gamma;
};
#ifdef MULTI_KBOARD
#define FRAME_X_P(f) ((f)->output_method == output_x_window)
#define FRAME_W32_P(f) ((f)->output_method == output_w32)
#define FRAME_MSDOS_P(f) ((f)->output_method == output_msdos_raw)
+#define FRAME_MAC_P(f) ((f)->output_method == output_mac)
/* FRAME_WINDOW_P tests whether the frame is a window, and is
defined to be the predicate for the window system being used. */
#ifdef HAVE_NTGUI
#define FRAME_WINDOW_P(f) FRAME_W32_P (f)
#endif
+#ifdef macintosh
+#define FRAME_WINDOW_P(f) FRAME_MAC_P (f)
+#endif
#ifndef FRAME_WINDOW_P
#define FRAME_WINDOW_P(f) (0)
#endif
These lines are counted in FRAME_HEIGHT. */
#define FRAME_MENU_BAR_LINES(f) (f)->menu_bar_lines
-/* Number of lines of frame F used for the toolbar. */
+/* Number of lines of frame F used for the tool-bar. */
-#define FRAME_TOOLBAR_LINES(f) (f)->toolbar_lines
+#define FRAME_TOOL_BAR_LINES(f) (f)->tool_bar_lines
/* Lines above the top-most window in frame F. */
#define FRAME_TOP_MARGIN(F) \
- (FRAME_MENU_BAR_LINES (F) + FRAME_TOOLBAR_LINES (F))
+ (FRAME_MENU_BAR_LINES (F) + FRAME_TOOL_BAR_LINES (F))
/* Nonzero if this frame should display a menu bar
in a way that does not use any text lines. */
#define FRAME_WINDOW_WIDTH_ARG(f, width) \
((width) \
+ FRAME_SCROLL_BAR_WIDTH (f) \
- + 2 * FRAME_FLAGS_AREA_COLS (f))
+ + FRAME_FLAGS_AREA_COLS (f))
/* Maximum + 1 legitimate value for FRAME_CURSOR_X. */
#define FRAME_CURSOR_X_LIMIT(f) \
(f)->visible = (f)->async_visible, \
(f)->iconified = (f)->async_iconified)
-#define CHECK_FRAME(x, i) \
- if (! FRAMEP (x)) \
- x = wrong_type_argument (Qframep, (x)); \
- else \
- (void) 0
+#define CHECK_FRAME(x, i) \
+ do { \
+ if (! FRAMEP (x)) \
+ x = wrong_type_argument (Qframep, (x)); \
+ } while (0)
#define CHECK_LIVE_FRAME(x, i) \
- if (! FRAMEP (x) \
- || ! FRAME_LIVE_P (XFRAME (x))) \
- x = wrong_type_argument (Qframe_live_p, (x)); \
- else \
- (void) 0
-
+ do { \
+ if (! FRAMEP (x) \
+ || ! FRAME_LIVE_P (XFRAME (x))) \
+ x = wrong_type_argument (Qframe_live_p, (x)); \
+ } while (0)
/* FOR_EACH_FRAME (LIST_VAR, FRAME_VAR) followed by a statement is a
`for' loop which iterates over the elements of Vframe_list. The
#define FOR_EACH_FRAME(list_var, frame_var) \
for ((list_var) = Vframe_list; \
(CONSP (list_var) \
- && (frame_var = XCONS (list_var)->car, 1)); \
- list_var = XCONS (list_var)->cdr)
+ && (frame_var = XCAR (list_var), 1)); \
+ list_var = XCDR (list_var))
extern Lisp_Object Qframep, Qframe_live_p, Qicon;
-extern struct frame *selected_frame;
extern struct frame *last_nonminibuf_frame;
extern struct frame *make_terminal_frame P_ ((void));
#define WINDOW_VERTICAL_SCROLL_BAR_HEIGHT(w) (window_internal_height (w))
+/* The currently selected frame. */
+
+extern Lisp_Object selected_frame;
+
+/* Value is a pointer to the selected frame. If the selected frame
+ isn't life, abort. */
+
+#define SELECTED_FRAME() \
+ ((FRAMEP (selected_frame) \
+ && FRAME_LIVE_P (XFRAME (selected_frame))) \
+ ? XFRAME (selected_frame) \
+ : (struct frame *) (abort (), 0))
\f
/***********************************************************************
(FRAME_WINDOW_P (F) ? FRAME_DEFAULT_FONT_WIDTH (F) : 1)
/* Pixel width of areas used to display truncation marks, continuation
- marks, overlay arrows. This is 0 for terminal frames. Other
- terminal headers must define FRAME_X_TRUNC_WIDTH. */
+ marks, overlay arrows. This is 0 for terminal frames. */
#ifdef HAVE_WINDOW_SYSTEM
#define FRAME_FLAGS_AREA_COLS(F) \
(FRAME_WINDOW_P ((F)) ? FRAME_X_FLAGS_AREA_COLS ((F)) : 0)
-#define FRAME_FLAGS_AREA_WIDTH(F) \
- (FRAME_FLAGS_AREA_COLS ((F)) * CANON_X_UNIT ((F)))
+#define FRAME_FLAGS_AREA_WIDTH(F) FRAME_X_FLAGS_AREA_WIDTH (F)
+#define FRAME_LEFT_FLAGS_AREA_WIDTH(F) FRAME_X_LEFT_FLAGS_AREA_WIDTH (F)
+
#else
#define FRAME_FLAGS_AREA_WIDTH(F) 0
#define FRAME_FLAGS_AREA_COLS(F) 0
+#define FRAME_LEFT_FLAGS_AREA_WIDTH(F) 0
#endif
#define PIXEL_X_FROM_CANON_X(F, X) \
(INTEGERP (X) \
? XINT (X) * CANON_X_UNIT (F) \
- : (int) (XFLOAT (X)->data * CANON_X_UNIT (F)))
+ : (int) (XFLOAT_DATA (X) * CANON_X_UNIT (F)))
/* Convert canonical value Y to pixels. F is the frame whose
canonical character height is to be used. X must be a Lisp integer
#define PIXEL_Y_FROM_CANON_Y(F, Y) \
(INTEGERP (Y) \
? XINT (Y) * CANON_Y_UNIT (F) \
- : (int) (XFLOAT (Y)->data * CANON_Y_UNIT (F)))
+ : (int) (XFLOAT_DATA (Y) * CANON_Y_UNIT (F)))
/* Convert pixel-value X to canonical units. F is the frame whose
canonical character width is to be used. X is a C integer. Result
? make_float ((double) (Y) / CANON_Y_UNIT (F)) \
: make_number ((Y) / CANON_Y_UNIT (F)))
+#endif /* not defined _FRAME_H_ */