diff options
Diffstat (limited to 'macosx/tkMacOSXInt.h')
-rw-r--r-- | macosx/tkMacOSXInt.h | 180 |
1 files changed, 109 insertions, 71 deletions
diff --git a/macosx/tkMacOSXInt.h b/macosx/tkMacOSXInt.h index f3bb504..289f47b 100644 --- a/macosx/tkMacOSXInt.h +++ b/macosx/tkMacOSXInt.h @@ -6,10 +6,10 @@ * Copyright (c) 1995-1997 Sun Microsystems, Inc. * Copyright 2001, Apple Computer, Inc. * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkMacOSXInt.h,v 1.20 2006/10/31 22:33:34 das Exp $ + * RCS: @(#) $Id: tkMacOSXInt.h,v 1.21 2007/04/13 14:51:18 dkf Exp $ */ #ifndef _TKMACINT @@ -32,64 +32,63 @@ #endif struct TkWindowPrivate { - TkWindow *winPtr; /* Ptr to tk window or NULL if Pixmap */ - CGrafPtr grafPtr; + TkWindow *winPtr; /* Ptr to tk window or NULL if Pixmap */ + CGrafPtr grafPtr; ControlRef rootControl; - int xOff; /* X offset from toplevel window */ - int yOff; /* Y offset from toplevel window */ + int xOff; /* X offset from toplevel window */ + int yOff; /* Y offset from toplevel window */ RgnHandle clipRgn; /* Visible region of window */ RgnHandle aboveClipRgn; /* Visible region of window & it's children */ int referenceCount; /* Don't delete toplevel until children are * gone. */ - struct TkWindowPrivate *toplevel; /* Pointer to the toplevel - * datastruct. */ + struct TkWindowPrivate *toplevel; + /* Pointer to the toplevel datastruct. */ int flags; /* Various state see defines below. */ }; typedef struct TkWindowPrivate MacDrawable; /* - * This list is used to keep track of toplevel windows that have a Mac - * window attached. This is useful for several things, not the least - * of which is maintaining floating windows. + * This list is used to keep track of toplevel windows that have a Mac window + * attached. This is useful for several things, not the least of which is + * maintaining floating windows. */ typedef struct TkMacOSXWindowList { - struct TkMacOSXWindowList *nextPtr; /* The next window in the list. */ - TkWindow *winPtr; /* This window */ + struct TkMacOSXWindowList *nextPtr; + /* The next window in the list. */ + TkWindow *winPtr; /* This window */ } TkMacOSXWindowList; /* * Defines use for the flags field of the MacDrawable data structure. */ - + #define TK_SCROLLBAR_GROW 1 #define TK_CLIP_INVALID 2 #define TK_HOST_EXISTS 4 #define TK_DRAWN_UNDER_MENU 8 /* - * I am reserving TK_EMBEDDED = 0x100 in the MacDrawable flags - * This is defined in tk.h. We need to duplicate the TK_EMBEDDED flag in the - * TkWindow structure for the window, but in the MacWin. This way we can - * still tell what the correct port is after the TKWindow structure has been - * freed. This actually happens when you bind destroy of a toplevel to - * Destroy of a child. + * I am reserving TK_EMBEDDED = 0x100 in the MacDrawable flags. This is + * defined in tk.h. We need to duplicate the TK_EMBEDDED flag in the TkWindow + * structure for the window, but in the MacWin. This way we can still tell + * what the correct port is after the TKWindow structure has been freed. This + * actually happens when you bind destroy of a toplevel to Destroy of a child. */ /* - * This structure is for handling Netscape-type in process - * embedding where Tk does not control the top-level. It contains - * various functions that are needed by Mac specific routines, like - * TkMacOSXGetDrawablePort. The definitions of the function types - * are in tkMacOSX.h. + * This structure is for handling Netscape-type in process embedding where Tk + * does not control the top-level. It contains various functions that are + * needed by Mac specific routines, like TkMacOSXGetDrawablePort. The + * definitions of the function types are in tkMacOSX.h. */ typedef struct { - Tk_MacOSXEmbedRegisterWinProc *registerWinProc; - Tk_MacOSXEmbedGetGrafPortProc *getPortProc; - Tk_MacOSXEmbedMakeContainerExistProc *containerExistProc; - Tk_MacOSXEmbedGetClipProc *getClipProc; - Tk_MacOSXEmbedGetOffsetInParentProc *getOffsetProc; + Tk_MacOSXEmbedRegisterWinProc *registerWinProc; + Tk_MacOSXEmbedGetGrafPortProc *getPortProc; + Tk_MacOSXEmbedMakeContainerExistProc *containerExistProc; + Tk_MacOSXEmbedGetClipProc *getClipProc; + Tk_MacOSXEmbedGetOffsetInParentProc *getOffsetProc; } TkMacOSXEmbedHandler; MODULE_SCOPE TkMacOSXEmbedHandler *tkMacOSXEmbedHandler; @@ -97,7 +96,7 @@ MODULE_SCOPE TkMacOSXEmbedHandler *tkMacOSXEmbedHandler; /* * Defines used for TkMacOSXInvalidateWindow */ - + #define TK_WINDOW_ONLY 0 #define TK_PARENT_WINDOW 1 @@ -120,65 +119,104 @@ MODULE_SCOPE TkMacOSXEmbedHandler *tkMacOSXEmbedHandler; * Defines for tkTextDisp.c */ -#define TK_LAYOUT_WITH_BASE_CHUNKS 1 -#define TK_DRAW_IN_CONTEXT 1 +#define TK_LAYOUT_WITH_BASE_CHUNKS 1 +#define TK_DRAW_IN_CONTEXT 1 /* - * Variables shared among various Mac Tk modules but are not - * exported to the outside world. + * Variables shared among various Mac Tk modules but are not exported to the + * outside world. */ /* * Globals shared among Macintosh Tk */ -MODULE_SCOPE MenuHandle tkCurrentAppleMenu; /* Handle to current Apple Menu */ -MODULE_SCOPE MenuHandle tkAppleMenu; /* Handle to default Apple Menu */ -MODULE_SCOPE MenuHandle tkFileMenu; /* Handles to menus */ -MODULE_SCOPE MenuHandle tkEditMenu; /* Handles to menus */ -MODULE_SCOPE RgnHandle tkMenuCascadeRgn;/* A region to clip with. */ -MODULE_SCOPE int tkUseMenuCascadeRgn; /* If this is 1, clipping code - * should intersect tkMenuCascadeRgn - * before drawing occurs. - * tkMenuCascadeRgn will only - * be valid when the value of this - * variable is 1. */ -MODULE_SCOPE int tkPictureIsOpen; /* If this is 1, we are drawing to a - * picture The clipping should then be - * done relative to the bounds of the - * picture rather than the window. As - * of OS X.0.4, something is seriously - * wrong: The clipping bounds only - * seem to work if the top,left values - * are 0,0 The destination rectangle - * for CopyBits should also have - * top,left values of 0,0 - */ +MODULE_SCOPE MenuHandle tkCurrentAppleMenu; + /* Handle to current Apple Menu */ +MODULE_SCOPE MenuHandle tkAppleMenu; + /* Handle to default Apple Menu */ +MODULE_SCOPE MenuHandle tkFileMenu; + /* Handles to menus */ +MODULE_SCOPE MenuHandle tkEditMenu; + /* Handles to menus */ +MODULE_SCOPE RgnHandle tkMenuCascadeRgn; + /* A region to clip with. */ +MODULE_SCOPE int tkUseMenuCascadeRgn; + /* If this is 1, clipping code should + * intersect tkMenuCascadeRgn before drawing + * occurs. tkMenuCascadeRgn will only be valid + * when the value of this variable is 1. */ +MODULE_SCOPE int tkPictureIsOpen; + /* If this is 1, we are drawing to a picture + * The clipping should then be done relative + * to the bounds of the picture rather than + * the window. As of OS X.0.4, something is + * seriously wrong: The clipping bounds only + * seem to work if the top,left values are 0,0 + * The destination rectangle for CopyBits + * should also have top,left values of 0,0 */ MODULE_SCOPE TkMacOSXWindowList *tkMacOSXWindowListPtr; - /* The list of toplevels */ + /* The list of toplevels */ MODULE_SCOPE Tcl_Encoding TkMacOSXCarbonEncoding; -MODULE_SCOPE void TkMacOSXDisplayChanged(Display *display); -MODULE_SCOPE int TkMacOSXUseAntialiasedText(Tcl_Interp *interp, int enable); -MODULE_SCOPE void TkMacOSXInitCarbonEvents(Tcl_Interp *interp); -MODULE_SCOPE int TkMacOSXInitCGDrawing(Tcl_Interp *interp, int enable, int antiAlias); -MODULE_SCOPE void TkMacOSXInitKeyboard(Tcl_Interp *interp); -MODULE_SCOPE void TkMacOSXDefaultStartupScript(void); -MODULE_SCOPE int TkMacOSXGenerateFocusEvent( Window window, int activeFlag); +MODULE_SCOPE void TkMacOSXDisplayChanged(Display *display); +MODULE_SCOPE int TkMacOSXUseAntialiasedText(Tcl_Interp *interp, + int enable); +MODULE_SCOPE void TkMacOSXInitCarbonEvents(Tcl_Interp *interp); +MODULE_SCOPE int TkMacOSXInitCGDrawing(Tcl_Interp *interp, int enable, + int antiAlias); +MODULE_SCOPE void TkMacOSXInitKeyboard(Tcl_Interp *interp); +MODULE_SCOPE void TkMacOSXDefaultStartupScript(void); +MODULE_SCOPE int TkMacOSXGenerateFocusEvent(Window window, + int activeFlag); MODULE_SCOPE WindowClass TkMacOSXWindowClass(TkWindow *winPtr); -MODULE_SCOPE int TkMacOSXIsWindowZoomed(TkWindow *winPtr); -MODULE_SCOPE int TkGenerateButtonEventForXPointer(Window window); -MODULE_SCOPE int TkMacOSXCompareColors(unsigned long c1, unsigned long c2); +MODULE_SCOPE int TkMacOSXIsWindowZoomed(TkWindow *winPtr); +MODULE_SCOPE int TkGenerateButtonEventForXPointer(Window window); +MODULE_SCOPE int TkMacOSXCompareColors(unsigned long c1, + unsigned long c2); +MODULE_SCOPE void * TkMacOSXGetNamedSymbol(const char *module, + const char *symbol); + +/* + * Macro to abstract common use of TkMacOSXGetNamedSymbol to initialize named + * symbols. + */ -MODULE_SCOPE void* TkMacOSXGetNamedSymbol(const char* module, const char* symbol); -/* Macro to abstract common use of TkMacOSXGetNamedSymbol to initialize named symbols */ #define TkMacOSXInitNamedSymbol(module, ret, symbol, ...) \ static ret (* symbol)(__VA_ARGS__) = (void*)(-1L); \ if (symbol == (void*)(-1L)) { \ symbol = TkMacOSXGetNamedSymbol(STRINGIFY(module), STRINGIFY(_##symbol));\ } +/* + * Macro to make handling failed events a little bit less verbose. Assumes + * that error values are always in the (local) variable 'err'. + */ + +#ifdef TK_MAC_DEBUG +#define LOG_MSG(msg, ...) fprintf(stderr, msg "\n", __VA_ARGS__) +#define LOG_ON_ERROR(msg) \ + if (err != noErr) { \ + fprintf(stderr, ##msg " failed, %d\n", (int) err); \ + } +#else +#define LOG_MSG(msg, ...) /* do nothing */ +#define LOG_ON_ERROR(msg) /* do nothing */ +#endif + +/* + * Include the stubbed internal platform-specific API. + */ + #include "tkIntPlatDecls.h" #endif /* _TKMACINT */ + +/* + * Local Variables: + * mode: c + * c-basic-offset: 4 + * fill-column: 78 + * End: + */ |