X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/e7474cdda81b597b32ddffe6e20040c08e3abadf..0924e3f6e1b5749019ac7f69765af355623c9db8:/src/macgui.h diff --git a/src/macgui.h b/src/macgui.h index 96fd54a603..1ea53af59b 100644 --- a/src/macgui.h +++ b/src/macgui.h @@ -1,5 +1,6 @@ /* Definitions and headers for communication on the Mac OS. - Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Copyright (C) 2000, 2001, 2002, 2003, 2004, + 2005, 2006 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -15,8 +16,8 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs; see the file COPYING. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ +the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +Boston, MA 02110-1301, USA. */ /* Contributed by Andrew Choi (akochoi@mac.com). */ @@ -32,7 +33,9 @@ typedef unsigned long Time; #ifdef HAVE_CARBON #undef Z #ifdef MAC_OSX +#if ! HAVE_MKTIME || BROKEN_MKTIME #undef mktime +#endif #undef DEBUG #undef free #undef malloc @@ -43,8 +46,10 @@ typedef unsigned long Time; #undef min #undef init_process #include +#if ! HAVE_MKTIME || BROKEN_MKTIME #undef mktime #define mktime emacs_mktime +#endif #undef free #define free unexec_free #undef malloc @@ -74,6 +79,44 @@ typedef unsigned long Time; #include #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; @@ -82,17 +125,32 @@ typedef GWorldPtr Pixmap; #define FACE_DEFAULT (~0) +#if !TARGET_API_MAC_CARBON +#define GetPixDepth(pmh) ((*(pmh))->pixelSize) +#endif + /* Emulate XCharStruct. */ +/* If the sum of ascent and descent is negative, that means some + special status specified by enum pcm_status. */ typedef struct _XCharStruct { - int rbearing; - int lbearing; - int width; - int ascent; - int descent; + short lbearing; /* origin to left edge of raster */ + short rbearing; /* origin to right edge of raster */ + short width; /* advance to next char's origin */ + short ascent; /* baseline to top edge of raster */ + short descent; /* baseline to bottom edge of raster */ +#if 0 + unsigned short attributes; /* per char flags (not predefined) */ +#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, \ @@ -101,25 +159,23 @@ typedef struct _XCharStruct (xcs).descent = (bds).bottom) struct MacFontStruct { - char *fontname; + char *full_name; short mac_fontnum; /* font number of font used in this window */ int mac_fontsize; /* size of font */ short mac_fontface; /* plain, bold, italics, etc. */ +#if TARGET_API_MAC_CARBON + int mac_scriptcode; /* Mac OS script code for font used */ +#else short mac_scriptcode; /* Mac OS script code for font used */ - -#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 */ +#endif +#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 @@ -139,7 +195,10 @@ struct MacFontStruct { #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 */ }; @@ -172,15 +231,37 @@ typedef struct _XGCValues XFontStruct *font; } XGCValues; -typedef XGCValues *GC; +typedef struct _XGC +{ + /* Original value. */ + XGCValues xgcv; + + /* Cached data members follow. */ + + /* QuickDraw foreground color. */ + RGBColor fore_color; + + /* QuickDraw background color. */ + RGBColor back_color; -extern XGCValues * -XCreateGC (void *, Window, unsigned long, XGCValues *); +#define MAX_CLIP_RECTS 2 + /* Number of clipping rectangles. */ + int n_clip_rects; -#define GCForeground 0x01 -#define GCBackground 0x02 -#define GCFont 0x03 -#define GCGraphicsExposures 0 + /* 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) +#define GCBackground (1L<<3) +#define GCFont (1L<<14) +#define GCGraphicsExposures 0 /* Bit Gravity */ @@ -240,8 +321,6 @@ typedef struct { #define PBaseSize (1L << 8) /* program specified base for incrementing */ #define PWinGravity (1L << 9) /* program specified window gravity */ -extern int XParseGeometry (); - typedef struct { int x, y; unsigned width, height;