#include "macgui.h"
#include "frame.h"
#define RGB_TO_ULONG(r, g, b) (((r) << 16) | ((g) << 8) | (b))
#define RED_FROM_ULONG(color) ((color) >> 16)
#define GREEN_FROM_ULONG(color) (((color) >> 8) & 0xff)
#define BLUE_FROM_ULONG(color) ((color) & 0xff)
#define RED16_FROM_ULONG(color) (RED_FROM_ULONG(color) * 0x101)
#define GREEN16_FROM_ULONG(color) (GREEN_FROM_ULONG(color) * 0x101)
#define BLUE16_FROM_ULONG(color) (BLUE_FROM_ULONG(color) * 0x101)
#define BLACK_PIX_DEFAULT(f) RGB_TO_ULONG(0,0,0)
#define WHITE_PIX_DEFAULT(f) RGB_TO_ULONG(255,255,255)
#define FONT_WIDTH(f) ((f)->max_bounds.width)
#define FONT_HEIGHT(f) ((f)->ascent + (f)->descent)
#define FONT_BASE(f) ((f)->ascent)
#define FONT_DESCENT(f) ((f)->descent)
struct mac_bitmap_record
{
char *bitmap_data;
char *file;
int refcount;
int height, width;
};
struct mac_display_info
{
struct mac_display_info *next;
Lisp_Object name_list_element;
int reference_count;
double resx, resy;
int n_planes;
int color_p;
int height, width;
int grabbed;
#if 0
int icon_bitmap_id;
#endif
Window root_window;
Cursor vertical_scroll_bar_cursor;
XrmDatabase xrdb;
struct font_info *font_table;
int font_table_size;
int smallest_char_width;
int smallest_font_height;
GC scratch_cursor_gc;
int mouse_face_beg_row, mouse_face_beg_col;
int mouse_face_beg_x, mouse_face_beg_y;
int mouse_face_end_row, mouse_face_end_col;
int mouse_face_end_x, mouse_face_end_y;
int mouse_face_past_end;
Lisp_Object mouse_face_window;
int mouse_face_face_id;
Lisp_Object mouse_face_overlay;
int mouse_face_deferred_gc;
struct frame *mouse_face_mouse_frame;
int mouse_face_mouse_x, mouse_face_mouse_y;
int mouse_face_defer;
int mouse_face_hidden;
int mouse_face_image_state;
char *mac_id_name;
int n_fonts;
struct mac_bitmap_record *bitmaps;
int bitmaps_size;
int bitmaps_last;
struct frame *x_focus_frame;
struct frame *x_focus_event_frame;
struct frame *x_highlight_frame;
struct image_cache *image_cache;
};
extern void check_mac P_ ((void));
#define x_display_info mac_display_info
extern struct x_display_info *x_display_list;
extern struct mac_display_info one_mac_display_info;
extern Lisp_Object x_display_name_list;
extern struct x_display_info *x_display_info_for_name P_ ((Lisp_Object));
extern struct mac_display_info *mac_term_init P_ ((Lisp_Object, char *, char *));
extern Lisp_Object x_list_fonts P_ ((struct frame *, Lisp_Object, int, int));
extern struct font_info *x_get_font_info P_ ((struct frame *f, int));
extern struct font_info *x_load_font P_ ((struct frame *, char *, int));
extern struct font_info *x_query_font P_ ((struct frame *, char *));
extern void x_find_ccl_program P_ ((struct font_info *));
struct x_output
{
unsigned long background_pixel;
unsigned long foreground_pixel;
};
struct mac_output
{
struct x_output x_compatible;
int menubar_widget;
FRAME_PTR mFP;
GC normal_gc;
GC reverse_gc;
GC cursor_gc;
Window window_desc;
Window parent_desc;
XFontStruct *font;
int baseline_offset;
int fontset;
unsigned long cursor_pixel;
unsigned long border_pixel;
unsigned long mouse_pixel;
unsigned long cursor_foreground_pixel;
#if 0
unsigned long scroll_bar_foreground_pixel;
unsigned long scroll_bar_background_pixel;
#endif
Cursor text_cursor;
Cursor nontext_cursor;
Cursor modeline_cursor;
Cursor hand_cursor;
Cursor hourglass_cursor;
Cursor horizontal_drag_cursor;
#if 0
Window hourglass_window;
unsigned hourglass_p : 1;
int needs_exposure;
#endif
#if TARGET_API_MAC_CARBON
ControlRef hourglass_control;
#endif
char explicit_parent;
char asked_for_visible;
struct relief
{
GC gc;
unsigned long pixel;
int allocated_p;
}
black_relief, white_relief;
unsigned long relief_background;
int internal_border_width;
XSizeHints *size_hints;
#if USE_CG_DRAWING
CGContextRef cg_context;
#endif
};
typedef struct mac_output mac_output;
#define FRAME_X_OUTPUT(f) ((f)->output_data.mac)
#define FRAME_MAC_WINDOW(f) ((f)->output_data.mac->window_desc)
#define FRAME_X_WINDOW(f) ((f)->output_data.mac->window_desc)
#define FRAME_FOREGROUND_PIXEL(f) ((f)->output_data.x->foreground_pixel)
#define FRAME_BACKGROUND_PIXEL(f) ((f)->output_data.x->background_pixel)
#define FRAME_FONT(f) ((f)->output_data.mac->font)
#define FRAME_FONTSET(f) ((f)->output_data.mac->fontset)
#define FRAME_BASELINE_OFFSET(f) ((f)->output_data.mac->baseline_offset)
#define FRAME_SIZE_HINTS(f) ((f)->output_data.mac->size_hints)
#define FRAME_MAC_DISPLAY_INFO(f) (&one_mac_display_info)
#define FRAME_X_DISPLAY_INFO(f) (&one_mac_display_info)
#define FRAME_MAC_DISPLAY(f) (0)
#define FRAME_X_DISPLAY(f) (0)
#define FRAME_MAC_FONT_TABLE(f) (FRAME_MAC_DISPLAY_INFO (f)->font_table)
#define FRAME_SMALLEST_CHAR_WIDTH(F) \
FRAME_MAC_DISPLAY_INFO(F)->smallest_char_width
#define FRAME_SMALLEST_FONT_HEIGHT(F) \
FRAME_MAC_DISPLAY_INFO(F)->smallest_font_height
#define FRAME_X_IMAGE_CACHE(F) FRAME_MAC_DISPLAY_INFO ((F))->image_cache
struct scroll_bar {
EMACS_INT size_from_Lisp_Vector_struct;
struct Lisp_Vector *next_from_Lisp_Vector_struct;
Lisp_Object window;
Lisp_Object next, prev;
Lisp_Object control_handle_low, control_handle_high;
Lisp_Object top, left, width, height;
Lisp_Object start, end;
Lisp_Object dragging;
#ifdef USE_TOOLKIT_SCROLL_BARS
Lisp_Object track_top, track_height;
Lisp_Object min_handle;
#endif
};
#define SCROLL_BAR_VEC_SIZE \
((sizeof (struct scroll_bar) \
- sizeof (EMACS_INT) - sizeof (struct Lisp_Vector *)) \
/ sizeof (Lisp_Object))
#define XSCROLL_BAR(vec) ((struct scroll_bar *) XVECTOR (vec))
#define SCROLL_BAR_PACK(low, high) (XINT (high) << 16 | XINT (low))
#define SCROLL_BAR_UNPACK(low, high, ulong) \
(XSETINT ((low), (ulong) & 0xffff), \
XSETINT ((high), (ulong) >> 16))
#define SCROLL_BAR_CONTROL_HANDLE(ptr) \
((ControlHandle) SCROLL_BAR_PACK ((ptr)->control_handle_low, \
(ptr)->control_handle_high))
#define SET_SCROLL_BAR_CONTROL_HANDLE(ptr, handle) \
(SCROLL_BAR_UNPACK ((ptr)->control_handle_low, \
(ptr)->control_handle_high, (unsigned long) (handle)))
#define VERTICAL_SCROLL_BAR_INSIDE_WIDTH(f, width) \
((width) \
- VERTICAL_SCROLL_BAR_LEFT_BORDER \
- VERTICAL_SCROLL_BAR_RIGHT_BORDER \
- VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2)
#define VERTICAL_SCROLL_BAR_TOP_RANGE(f,height) \
(VERTICAL_SCROLL_BAR_INSIDE_HEIGHT (f, height) \
- VERTICAL_SCROLL_BAR_MIN_HANDLE - UP_AND_DOWN_ARROWS)
#define VERTICAL_SCROLL_BAR_INSIDE_HEIGHT(f,height) \
((height) - VERTICAL_SCROLL_BAR_TOP_BORDER \
- VERTICAL_SCROLL_BAR_BOTTOM_BORDER)
#define VERTICAL_SCROLL_BAR_LEFT_BORDER (0)
#define VERTICAL_SCROLL_BAR_RIGHT_BORDER (0)
#define VERTICAL_SCROLL_BAR_TOP_BORDER (0)
#define VERTICAL_SCROLL_BAR_BOTTOM_BORDER (0)
#define VERTICAL_SCROLL_BAR_MIN_HANDLE (16)
#define UP_AND_DOWN_ARROWS (32)
#define VERTICAL_SCROLL_BAR_WIDTH_TRIM (0)
#define MAC_AQUA_VERTICAL_SCROLL_BAR_WIDTH (15)
#define MAC_AQUA_SMALL_VERTICAL_SCROLL_BAR_WIDTH (11)
#define HOURGLASS_WIDTH (16)
#define HOURGLASS_HEIGHT (16)
enum {
MAC_EMACS_CREATOR_CODE = 'EMAx'
};
enum {
TYPE_FILE_NAME = 'fNam'
};
enum {
KEY_EMACS_SUSPENSION_ID_ATTR = 'esId'
};
enum {
EVENT_PARAM_TEXT_INPUT_SEQUENCE_NUMBER = 'tsSn'
};
#if MAC_OS_X_VERSION_MAX_ALLOWED < 1030
enum {
keyReplyRequestedAttr = 'repq'
};
#endif
#if MAC_OS_X_VERSION_MAX_ALLOWED < 1040
enum {
gestaltSystemVersionMajor = 'sys1',
gestaltSystemVersionMinor = 'sys2',
gestaltSystemVersionBugFix = 'sys3'
};
#endif
#ifdef MAC_OSX
#if MAC_OS_X_VERSION_MAX_ALLOWED < 1020
enum {
typeUTF8Text = 'utf8'
};
enum {
kEventParamWindowMouseLocation = 'wmou'
};
#endif
#endif
struct frame;
struct face;
struct image;
Lisp_Object display_x_get_resource P_ ((struct x_display_info *,
Lisp_Object, Lisp_Object,
Lisp_Object, Lisp_Object));
struct frame *check_x_frame P_ ((Lisp_Object));
EXFUN (Fx_display_color_p, 1);
EXFUN (Fx_display_grayscale_p, 1);
EXFUN (Fx_display_planes, 1);
extern void x_free_gcs P_ ((struct frame *));
extern int XParseGeometry P_ ((char *, int *, int *, unsigned int *,
unsigned int *));
extern void x_set_window_size P_ ((struct frame *, int, int, int));
extern void x_set_mouse_position P_ ((struct frame *, int, int));
extern void x_set_mouse_pixel_position P_ ((struct frame *, int, int));
extern void x_make_frame_visible P_ ((struct frame *));
extern void x_make_frame_invisible P_ ((struct frame *));
extern void x_iconify_frame P_ ((struct frame *));
extern void x_free_frame_resources P_ ((struct frame *));
extern void x_destroy_window P_ ((struct frame *));
extern void x_wm_set_size_hint P_ ((struct frame *, long, int));
extern void x_delete_display P_ ((struct x_display_info *));
extern void mac_initialize P_ ((void));
extern Pixmap XCreatePixmap P_ ((Display *, WindowPtr, unsigned int,
unsigned int, unsigned int));
extern Pixmap XCreatePixmapFromBitmapData P_ ((Display *, WindowPtr, char *,
unsigned int, unsigned int,
unsigned long, unsigned long,
unsigned int));
extern void XFreePixmap P_ ((Display *, Pixmap));
extern GC XCreateGC P_ ((Display *, void *, unsigned long, XGCValues *));
extern void XFreeGC P_ ((Display *, GC));
extern void XSetForeground P_ ((Display *, GC, unsigned long));
extern void XSetBackground P_ ((Display *, GC, unsigned long));
extern void XSetWindowBackground P_ ((Display *, WindowPtr, unsigned long));
extern void XDrawLine P_ ((Display *, Pixmap, GC, int, int, int, int));
extern void mac_clear_area P_ ((struct frame *, int, int,
unsigned int, unsigned int));
extern void mac_unload_font P_ ((struct mac_display_info *, XFontStruct *));
extern int mac_font_panel_visible_p P_ ((void));
extern OSStatus mac_show_hide_font_panel P_ ((void));
extern OSStatus mac_set_font_info_for_selection P_ ((struct frame *, int, int));
extern OSStatus install_window_handler P_ ((WindowPtr));
extern void remove_window_handler P_ ((WindowPtr));
extern OSStatus mac_post_mouse_moved_event P_ ((void));
#if !TARGET_API_MAC_CARBON
extern void do_apple_menu P_ ((SInt16));
#endif
#if USE_CG_DRAWING
extern void mac_prepare_for_quickdraw P_ ((struct frame *));
#endif
extern int mac_quit_char_key_p P_ ((UInt32, UInt32));
#define FONT_TYPE_FOR_UNIBYTE(font, ch) 0
#define FONT_TYPE_FOR_MULTIBYTE(font, ch) 0
extern void x_clear_frame_selections P_ ((struct frame *));
extern int have_menus_p P_ ((void));
extern void x_real_positions P_ ((struct frame *, int *, int *));
extern void x_set_menu_bar_lines P_ ((struct frame *, Lisp_Object, Lisp_Object));
extern int x_pixel_width P_ ((struct frame *));
extern int x_pixel_height P_ ((struct frame *));
extern int x_char_width P_ ((struct frame *));
extern int x_char_height P_ ((struct frame *));
extern void x_sync P_ ((struct frame *));
extern void x_set_tool_bar_lines P_ ((struct frame *, Lisp_Object, Lisp_Object));
extern void mac_update_title_bar P_ ((struct frame *, int));
extern Lisp_Object x_get_focus_frame P_ ((struct frame *));
extern void x_activate_menubar P_ ((struct frame *));
extern void free_frame_menubar P_ ((struct frame *));
extern void mac_clear_font_name_table P_ ((void));
extern Lisp_Object mac_aedesc_to_lisp P_ ((const AEDesc *));
extern OSErr mac_ae_put_lisp P_ ((AEDescList *, UInt32, Lisp_Object));
#if TARGET_API_MAC_CARBON
extern OSStatus create_apple_event_from_event_ref P_ ((EventRef, UInt32,
const EventParamName *,
const EventParamType *,
AppleEvent *));
extern OSErr create_apple_event_from_drag_ref P_ ((DragRef, UInt32,
const FlavorType *,
AppleEvent *));
extern CFStringRef cfstring_create_with_utf8_cstring P_ ((const char *));
extern CFStringRef cfstring_create_with_string P_ ((Lisp_Object));
extern Lisp_Object cfdata_to_lisp P_ ((CFDataRef));
extern Lisp_Object cfstring_to_lisp_nodecode P_ ((CFStringRef));
extern Lisp_Object cfstring_to_lisp P_ ((CFStringRef));
extern Lisp_Object cfnumber_to_lisp P_ ((CFNumberRef));
extern Lisp_Object cfdate_to_lisp P_ ((CFDateRef));
extern Lisp_Object cfboolean_to_lisp P_ ((CFBooleanRef));
extern Lisp_Object cfobject_desc_to_lisp P_ ((CFTypeRef));
extern Lisp_Object cfproperty_list_to_lisp P_ ((CFPropertyListRef, int, int));
extern void mac_wakeup_from_rne P_ ((void));
#endif
extern void xrm_merge_string_database P_ ((XrmDatabase, const char *));
extern Lisp_Object xrm_get_resource P_ ((XrmDatabase, const char *,
const char *));
extern XrmDatabase xrm_get_preference_database P_ ((const char *));
EXFUN (Fmac_get_preference, 4);