/* Definitions and headers for communication on the Mac OS.
Copyright (C) 2000, 2001, 2002, 2003, 2004,
- 2005 Free Software Foundation, Inc.
+ 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of GNU Emacs.
GNU Emacs is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
+the Free Software Foundation; either version 3, or (at your option)
any later version.
GNU Emacs is distributed in the hope that it will be useful,
#ifndef EMACS_MACGUI_H
#define EMACS_MACGUI_H
-typedef int Display; /* fix later */
+typedef struct _XDisplay Display; /* opaque */
typedef Lisp_Object XrmDatabase;
#include <Gestalt.h>
#endif /* not HAVE_CARBON */
+/* Whether to use ATSUI (Apple Type Services for Unicode Imaging) for
+ text drawing. */
+#ifndef USE_ATSUI
+#ifdef MAC_OSX
+#define USE_ATSUI 1
+#endif
+#endif
+
+/* Whether to use low-level Quartz 2D (aka Core Graphics) text drawing
+ in preference to ATSUI for ASCII and Latin-1 characters. */
+#ifndef USE_CG_TEXT_DRAWING
+#if USE_ATSUI && MAC_OS_X_VERSION_MAX_ALLOWED >= 1030
+#define USE_CG_TEXT_DRAWING 1
+#endif
+#endif
+
+/* Whether to use Quartz 2D routines for drawing operations other than
+ texts. */
+#ifndef USE_CG_DRAWING
+#if USE_ATSUI && MAC_OS_X_VERSION_MAX_ALLOWED >= 1020
+#define USE_CG_DRAWING 1
+#endif
+#endif
+
+/* Whether to use the standard Font Panel floating dialog. */
+#ifndef USE_MAC_FONT_PANEL
+#if USE_ATSUI && MAC_OS_X_VERSION_MAX_ALLOWED >= 1020
+#define USE_MAC_FONT_PANEL 1
+#endif
+#endif
+
+/* Whether to use Text Services Manager. */
+#ifndef USE_MAC_TSM
+#if TARGET_API_MAC_CARBON
+#define USE_MAC_TSM 1
+#endif
+#endif
+
typedef WindowPtr Window;
typedef GWorldPtr Pixmap;
/* Emulate XCharStruct. */
+/* If the sum of ascent and descent is negative, that means some
+ special status specified by enum pcm_status. */
typedef struct _XCharStruct
{
short lbearing; /* origin to left edge of raster */
#endif
} XCharStruct;
+enum pcm_status
+ {
+ PCM_VALID = 0, /* pcm data is valid */
+ PCM_INVALID = -1, /* pcm data is invalid */
+ };
+
#define STORE_XCHARSTRUCT(xcs, w, bds) \
((xcs).width = (w), \
(xcs).lbearing = (bds).left, \
#else
short mac_scriptcode; /* Mac OS script code for font used */
#endif
-
-#if 0
- SInt16 mFontNum; /* font number of font used in this window */
- short mScriptCode; /* Mac OS script code for font used */
- int mFontSize; /* size of font */
- Style mFontFace; /* plain, bold, italics, etc. */
- int mHeight; /* height of one line of text in pixels */
- int mWidth; /* width of one character in pixels */
- int mAscent;
- int mDescent;
- int mLeading;
- char mTwoByte; /* true for two-byte font */
-#endif /* 0 */
+#if USE_ATSUI
+ ATSUStyle mac_style; /* NULL if QuickDraw Text is used */
+#if USE_CG_TEXT_DRAWING
+ CGFontRef cg_font; /* NULL if ATSUI text drawing is used */
+ CGGlyph *cg_glyphs; /* Likewise */
+#endif
+#endif
/* from Xlib.h */
#if 0
#endif /* 0 */
XCharStruct min_bounds; /* minimum bounds over all existing char */
XCharStruct max_bounds; /* maximum bounds over all existing char */
- XCharStruct *per_char; /* first_char to last_char information */
+ union {
+ XCharStruct *per_char; /* first_char to last_char information */
+ XCharStruct **rows; /* first row to last row information */
+ } bounds;
int ascent; /* logical extent above baseline for spacing */
int descent; /* logical decent below baseline for spacing */
};
/* QuickDraw background color. */
RGBColor back_color;
+
+#if USE_CG_DRAWING && MAC_OS_X_VERSION_MAX_ALLOWED >= 1030
+ /* Quartz 2D foreground color. */
+ CGColorRef cg_fore_color;
+
+ /* Quartz 2D background color. */
+ CGColorRef cg_back_color;
+#endif
+
+#define MAX_CLIP_RECTS 2
+ /* Number of clipping rectangles. */
+ int n_clip_rects;
+
+ /* QuickDraw clipping region. Ignored if n_clip_rects == 0. */
+ RgnHandle clip_region;
+
+#if defined (MAC_OSX) && (USE_ATSUI || USE_CG_DRAWING)
+ /* Clipping rectangles used in Quartz 2D drawing. The y-coordinate
+ is in QuickDraw's. */
+ CGRect clip_rects[MAX_CLIP_RECTS];
+#endif
} *GC;
#define GCForeground (1L<<2)