(linenum→info "unix/slp.c:2238")

emacs/22.1/src/macgui.h

    1: /* Definitions and headers for communication on the Mac OS.
    2:    Copyright (C) 2000, 2001, 2002, 2003, 2004,
    3:                  2005, 2006, 2007 Free Software Foundation, Inc.
    4: 
    5: This file is part of GNU Emacs.
    6: 
    7: GNU Emacs is free software; you can redistribute it and/or modify
    8: it under the terms of the GNU General Public License as published by
    9: the Free Software Foundation; either version 2, or (at your option)
   10: any later version.
   11: 
   12: GNU Emacs is distributed in the hope that it will be useful,
   13: but WITHOUT ANY WARRANTY; without even the implied warranty of
   14: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   15: GNU General Public License for more details.
   16: 
   17: You should have received a copy of the GNU General Public License
   18: along with GNU Emacs; see the file COPYING.  If not, write to
   19: the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
   20: Boston, MA 02110-1301, USA.  */
   21: 
   22: /* Contributed by Andrew Choi (akochoi@mac.com).  */
   23: 
   24: #ifndef EMACS_MACGUI_H
   25: #define EMACS_MACGUI_H
   26: 
   27: typedef struct _XDisplay Display; /* opaque */
   28: 
   29: typedef Lisp_Object XrmDatabase;
   30: 
   31: typedef unsigned long Time;
   32: 
   33: #ifdef HAVE_CARBON
   34: #undef Z
   35: #ifdef MAC_OSX
   36: #if ! HAVE_MKTIME || BROKEN_MKTIME
   37: #undef mktime
   38: #endif
   39: #undef DEBUG
   40: #undef free
   41: #undef malloc
   42: #undef realloc
   43: /* Macros max and min defined in lisp.h conflict with those in
   44:    precompiled header Carbon.h.  */
   45: #undef max
   46: #undef min
   47: #undef init_process
   48: #include <Carbon/Carbon.h>
   49: #if ! HAVE_MKTIME || BROKEN_MKTIME
   50: #undef mktime
   51: #define mktime emacs_mktime
   52: #endif
   53: #undef free
   54: #define free unexec_free
   55: #undef malloc
   56: #define malloc unexec_malloc
   57: #undef realloc
   58: #define realloc unexec_realloc
   59: #undef min
   60: #define min(a, b) ((a) < (b) ? (a) : (b))
   61: #undef max
   62: #define max(a, b) ((a) > (b) ? (a) : (b))
   63: #undef init_process
   64: #define init_process emacs_init_process
   65: #undef INFINITY
   66: #else  /* not MAC_OSX */
   67: #undef SIGHUP
   68: #define OLDP2C 1
   69: #include <Carbon.h>
   70: #endif  /* not MAC_OSX */
   71: #undef Z
   72: #define Z (current_buffer->text->z)
   73: #else /* not HAVE_CARBON */
   74: #include <QuickDraw.h>          /* for WindowPtr */
   75: #include <QDOffscreen.h>        /* for GWorldPtr */
   76: #include <Appearance.h>         /* for ThemeCursor */
   77: #include <Windows.h>
   78: #include <Controls.h>
   79: #include <Gestalt.h>
   80: #endif /* not HAVE_CARBON */
   81: 
   82: /* Whether to use ATSUI (Apple Type Services for Unicode Imaging) for
   83:    text drawing.  */
   84: #ifndef USE_ATSUI
   85: #ifdef MAC_OSX
   86: #define USE_ATSUI 1
   87: #endif
   88: #endif
   89: 
   90: /* Whether to use low-level Quartz 2D (aka Core Graphics) text drawing
   91:    in preference to ATSUI for ASCII and Latin-1 characters.  */
   92: #ifndef USE_CG_TEXT_DRAWING
   93: #if USE_ATSUI && MAC_OS_X_VERSION_MAX_ALLOWED >= 1030
   94: #define USE_CG_TEXT_DRAWING 1
   95: #endif
   96: #endif
   97: 
   98: /* Whether to use Quartz 2D routines for drawing operations other than
   99:    texts.  */
  100: #ifndef USE_CG_DRAWING
  101: #if USE_ATSUI && MAC_OS_X_VERSION_MAX_ALLOWED >= 1020
  102: #define USE_CG_DRAWING 1
  103: #endif
  104: #endif
  105: 
  106: /* Whether to use the standard Font Panel floating dialog.  */
  107: #ifndef USE_MAC_FONT_PANEL
  108: #if USE_ATSUI && MAC_OS_X_VERSION_MAX_ALLOWED >= 1020
  109: #define USE_MAC_FONT_PANEL 1
  110: #endif
  111: #endif
  112: 
  113: /* Whether to use Text Services Manager.  */
  114: #ifndef USE_MAC_TSM
  115: #if TARGET_API_MAC_CARBON
  116: #define USE_MAC_TSM 1
  117: #endif
  118: #endif
  119: 
  120: typedef WindowPtr Window;
  121: typedef GWorldPtr Pixmap;
  122: 
  123: #define Cursor ThemeCursor
  124: #define No_Cursor (-1)
  125: 
  126: #define FACE_DEFAULT (~0)
  127: 
  128: #if !TARGET_API_MAC_CARBON
  129: #define GetPixDepth(pmh) ((*(pmh))->pixelSize)
  130: #endif
  131: 
  132: 
  133: /* Emulate XCharStruct.  */
  134: /* If the sum of ascent and descent is negative, that means some
  135:    special status specified by enum pcm_status.  */
  136: typedef struct _XCharStruct
  137: {
  138:   short lbearing;               /* origin to left edge of raster */
  139:   short rbearing;               /* origin to right edge of raster */
  140:   short width;                  /* advance to next char's origin */
  141:   short ascent;                 /* baseline to top edge of raster */
  142:   short descent;                /* baseline to bottom edge of raster */
  143: #if 0
  144:   unsigned short attributes;    /* per char flags (not predefined) */
  145: #endif
  146: } XCharStruct;
  147: 
  148: enum pcm_status
  149:   {
  150:     PCM_VALID = 0,              /* pcm data is valid */
  151:     PCM_INVALID = -1,           /* pcm data is invalid */
  152:   };
  153: 
  154: #define STORE_XCHARSTRUCT(xcs, w, bds)                  \
  155:   ((xcs).width = (w),                                   \
  156:    (xcs).lbearing = (bds).left,                         \
  157:    (xcs).rbearing = (bds).right,                        \
  158:    (xcs).ascent = -(bds).top,                           \
  159:    (xcs).descent = (bds).bottom)
  160: 
  161: struct MacFontStruct {
  162:   char *full_name;
  163: 
  164:   short mac_fontnum;  /* font number of font used in this window */
  165:   int mac_fontsize;  /* size of font */
  166:   short mac_fontface;  /* plain, bold, italics, etc. */
  167: #if TARGET_API_MAC_CARBON
  168:   int mac_scriptcode;  /* Mac OS script code for font used */
  169: #else
  170:   short mac_scriptcode;  /* Mac OS script code for font used */
  171: #endif
  172: #if USE_ATSUI
  173:   ATSUStyle mac_style;          /* NULL if QuickDraw Text is used */
  174: #if USE_CG_TEXT_DRAWING
  175:   CGFontRef cg_font;            /* NULL if ATSUI text drawing is used */
  176:   CGGlyph *cg_glyphs;           /* Likewise  */
  177: #endif
  178: #endif
  179: 
  180: /* from Xlib.h */
  181: #if 0
  182:   XExtData *ext_data;      /* hook for extension to hang data */
  183:   Font fid;                /* Font id for this font */
  184:   unsigned direction;      /* hint about the direction font is painted */
  185: #endif /* 0 */
  186:   unsigned min_char_or_byte2;/* first character */
  187:   unsigned max_char_or_byte2;/* last character */
  188:   unsigned min_byte1;      /* first row that exists */
  189:   unsigned max_byte1;      /* last row that exists */
  190: #if 0
  191:   Bool all_chars_exist;    /* flag if all characters have nonzero size */
  192:   unsigned default_char;   /* char to print for undefined character */
  193:   int n_properties;        /* how many properties there are */
  194:   XFontProp *properties;   /* pointer to array of additional properties */
  195: #endif /* 0 */
  196:   XCharStruct min_bounds;  /* minimum bounds over all existing char */
  197:   XCharStruct max_bounds;  /* maximum bounds over all existing char */
  198:   union {
  199:     XCharStruct *per_char; /* first_char to last_char information */
  200:     XCharStruct **rows;    /* first row to last row information */
  201:   } bounds;
  202:   int ascent;              /* logical extent above baseline for spacing */
  203:   int descent;             /* logical decent below baseline for spacing */
  204: };
  205: 
  206: typedef struct MacFontStruct MacFontStruct;
  207: typedef struct MacFontStruct XFontStruct;
  208: 
  209: /* Structure borrowed from Xlib.h to represent two-byte characters.  */
  210: 
  211: typedef struct {
  212:   unsigned char byte1;
  213:   unsigned char byte2;
  214: } XChar2b;
  215: 
  216: #define STORE_XCHAR2B(chp, b1, b2) \
  217:   ((chp)->byte1 = (b1), (chp)->byte2 = (b2))
  218: 
  219: #define XCHAR2B_BYTE1(chp) \
  220:   ((chp)->byte1)
  221: 
  222: #define XCHAR2B_BYTE2(chp) \
  223:   ((chp)->byte2)
  224: 
  225: 
  226: /* Emulate X GC's by keeping color and font info in a structure.  */
  227: typedef struct _XGCValues
  228: {
  229:   unsigned long foreground;
  230:   unsigned long background;
  231:   XFontStruct *font;
  232: } XGCValues;
  233: 
  234: typedef struct _XGC
  235: {
  236:   /* Original value.  */
  237:   XGCValues xgcv;
  238: 
  239:   /* Cached data members follow.  */
  240: 
  241:   /* QuickDraw foreground color.  */
  242:   RGBColor fore_color;
  243: 
  244:   /* QuickDraw background color.  */
  245:   RGBColor back_color;
  246: 
  247: #if USE_CG_DRAWING && MAC_OS_X_VERSION_MAX_ALLOWED >= 1030
  248:   /* Quartz 2D foreground color.  */
  249:   CGColorRef cg_fore_color;
  250: 
  251:   /* Quartz 2D background color.  */
  252:   CGColorRef cg_back_color;
  253: #endif
  254: 
  255: #define MAX_CLIP_RECTS 2
  256:   /* Number of clipping rectangles.  */
  257:   int n_clip_rects;
  258: 
  259:   /* QuickDraw clipping region.  Ignored if n_clip_rects == 0.  */
  260:   RgnHandle clip_region;
  261: 
  262: #if defined (MAC_OSX) && (USE_ATSUI || USE_CG_DRAWING)
  263:   /* Clipping rectangles used in Quartz 2D drawing.  The y-coordinate
  264:      is in QuickDraw's.  */
  265:   CGRect clip_rects[MAX_CLIP_RECTS];
  266: #endif
  267: } *GC;
  268: 
  269: #define GCForeground            (1L<<2)
  270: #define GCBackground            (1L<<3)
  271: #define GCFont                  (1L<<14)
  272: #define GCGraphicsExposures     0
  273: 
  274: /* Bit Gravity */
  275: 
  276: #define ForgetGravity           0
  277: #define NorthWestGravity        1
  278: #define NorthGravity            2
  279: #define NorthEastGravity        3
  280: #define WestGravity             4
  281: #define CenterGravity           5
  282: #define EastGravity             6
  283: #define SouthWestGravity        7
  284: #define SouthGravity            8
  285: #define SouthEastGravity        9
  286: #define StaticGravity           10
  287: 
  288: #define NoValue         0x0000
  289: #define XValue          0x0001
  290: #define YValue          0x0002
  291: #define WidthValue      0x0004
  292: #define HeightValue     0x0008
  293: #define AllValues       0x000F
  294: #define XNegative       0x0010
  295: #define YNegative       0x0020
  296: 
  297: typedef struct {
  298:         long flags;        /* marks which fields in this structure are defined */
  299: #if 0
  300:         int x, y;              /* obsolete for new window mgrs, but clients */
  301:         int width, height;     /* should set so old wm's don't mess up */
  302: #endif
  303:         int min_width, min_height;
  304: #if 0
  305:         int max_width, max_height;
  306: #endif
  307:         int width_inc, height_inc;
  308: #if 0
  309:         struct {
  310:                 int x;        /* numerator */
  311:                 int y;        /* denominator */
  312:         } min_aspect, max_aspect;
  313: #endif
  314:         int base_width, base_height;           /* added by ICCCM version 1 */
  315: #if 0
  316:         int win_gravity;                       /* added by ICCCM version 1 */
  317: #endif
  318: } XSizeHints;
  319: 
  320: #define USPosition      (1L << 0) /* user specified x, y */
  321: #define USSize          (1L << 1) /* user specified width, height */
  322: 
  323: #define PPosition       (1L << 2) /* program specified position */
  324: #define PSize           (1L << 3) /* program specified size */
  325: #define PMinSize        (1L << 4) /* program specified minimum size */
  326: #define PMaxSize        (1L << 5) /* program specified maximum size */
  327: #define PResizeInc      (1L << 6) /* program specified resize increments */
  328: #define PAspect         (1L << 7) /* program specified min and max aspect ratios */
  329: #define PBaseSize       (1L << 8) /* program specified base for incrementing */
  330: #define PWinGravity     (1L << 9) /* program specified window gravity */
  331: 
  332: typedef struct {
  333:     int x, y;
  334:     unsigned width, height;
  335: } XRectangle;
  336: 
  337: #define NativeRectangle Rect
  338: 
  339: #define CONVERT_TO_XRECT(xr,nr)                 \
  340:   ((xr).x = (nr).left,                          \
  341:    (xr).y = (nr).top,                           \
  342:    (xr).width = ((nr).right - (nr).left),       \
  343:    (xr).height = ((nr).bottom - (nr).top))
  344: 
  345: #define CONVERT_FROM_XRECT(xr,nr)               \
  346:   ((nr).left = (xr).x,                          \
  347:    (nr).top = (xr).y,                           \
  348:    (nr).right = ((xr).x + (xr).width),          \
  349:    (nr).bottom = ((xr).y + (xr).height))
  350: 
  351: #define STORE_NATIVE_RECT(nr,x,y,width,height)  \
  352:   ((nr).left = (x),                             \
  353:    (nr).top = (y),                              \
  354:    (nr).right = ((nr).left + (width)),          \
  355:    (nr).bottom = ((nr).top + (height)))
  356: 
  357: #endif /* EMACS_MACGUI_H */
  358: 
  359: /* arch-tag: 5a0da49a-35e2-418b-a58c-8a55778ae849
  360:    (do not change this comment) */
Syntax (Markdown)