diff options
Diffstat (limited to 'mac/tkMacInt.h')
-rw-r--r-- | mac/tkMacInt.h | 282 |
1 files changed, 282 insertions, 0 deletions
diff --git a/mac/tkMacInt.h b/mac/tkMacInt.h new file mode 100644 index 0000000..fcb8174 --- /dev/null +++ b/mac/tkMacInt.h @@ -0,0 +1,282 @@ +/* + * tkMacInt.h -- + * + * Declarations of Macintosh specific shared variables and procedures. + * + * Copyright (c) 1995-1997 Sun Microsystems, Inc. + * + * See the file "license.terms" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * + * SCCS: @(#) tkMacInt.h 1.67 97/11/20 18:30:38 + */ + +#ifndef _TKMACINT +#define _TKMACINT + +#include "tkInt.h" +#include "tkPort.h" + +#ifndef _TKMAC +# include "tkMac.h" +#endif /* _TKMAC */ + + +#include <AppleEvents.h> +#include <Windows.h> +#include <QDOffscreen.h> +#include <Menus.h> + +#define TK_MAC_68K_STACK_GROWTH (256*1024) + +struct TkWindowPrivate { + TkWindow *winPtr; /* Ptr to tk window or NULL if Pixmap */ + GWorldPtr portPtr; /* Either WindowRef or off screen world */ + int xOff; /* X offset from toplevel window */ + int yOff; /* Y offset from toplevel window */ + RgnHandle clipRgn; /* Visable region of window */ + RgnHandle aboveClipRgn; /* Visable region of window & it's children */ + int referenceCount; /* Don't delete toplevel until children are + * gone. */ + 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. + */ + +typedef struct TkMacWindowList { + struct TkMacWindowList *nextPtr; /* The next window in the list. */ + TkWindow *winPtr; /* This window */ +} TkMacWindowList; + +/* + * 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. + */ + +/* + * Defines used for TkMacInvalidateWindow + */ + +#define TK_WINDOW_ONLY 0 +#define TK_PARENT_WINDOW 1 + +/* + * Accessor for the privatePtr flags field for the TK_HOST_EXISTS field + */ + +#define TkMacHostToplevelExists(tkwin) \ + (((TkWindow *) (tkwin))->privatePtr->toplevel->flags & TK_HOST_EXISTS) + +/* + * Defines use for the flags argument to TkGenWMConfigureEvent. + */ + +#define TK_LOCATION_CHANGED 1 +#define TK_SIZE_CHANGED 2 +#define TK_BOTH_CHANGED 3 + +/* + * Variables shared among various Mac Tk modules but are not + * exported to the outside world. + */ + +extern int tkMacAppInFront; + +/* + * Globals shared among Macintosh Tk + */ + +extern MenuHandle tkAppleMenu; /* Handle to the Apple Menu */ +extern MenuHandle tkFileMenu; /* Handles to menus */ +extern MenuHandle tkEditMenu; /* Handles to menus */ +extern RgnHandle tkMenuCascadeRgn; /* A region to clip with. */ +extern 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. */ +extern TkMacWindowList *tkMacWindowListPtr; + /* The list of toplevels */ + +/* + * The following types and defines are for MDEF support. + */ + +#if STRUCTALIGNMENTSUPPORTED +#pragma options align=mac8k +#endif +typedef struct TkMenuLowMemGlobals { + long menuDisable; /* A combination of the menu and the item + * that the mouse is currently over. */ + short menuTop; /* Where in global coords the top of the + * menu is. */ + short menuBottom; /* Where in global coords the bottom of + * the menu is. */ + Rect itemRect; /* This is the rectangle of the currently + * selected item. */ + short scrollFlag; /* This is used by the MDEF and the + * Menu Manager to control when scrolling + * starts. With hierarchicals, an + * mChooseMsg can come before an + * mDrawMsg, and scrolling should not + * occur until after the mDrawMsg. + * The mDrawMsg sets this flag; + * mChooseMsg checks the flag and + * does not scroll if it is set; + * and then resets the flag. */ +} TkMenuLowMemGlobals; +#if STRUCTALIGNMENTSUPPORTED +#pragma options align=reset +#endif + +typedef pascal void (*TkMenuDefProcPtr) (short message, MenuHandle theMenu, + Rect *menuRectPtr, Point hitPt, short *whichItemPtr, + TkMenuLowMemGlobals *globalsPtr); +enum { + tkUppMenuDefProcInfo = kPascalStackBased + | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(short))) + | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(MenuRef))) + | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(Rect*))) + | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(Point))) + | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(short*))) + | STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(TkMenuLowMemGlobals *))) +}; + +#if GENERATINGCFM +typedef UniversalProcPtr TkMenuDefUPP; +#else +typedef TkMenuDefProcPtr TkMenuDefUPP; +#endif + +#if GENERATINGCFM +#define TkNewMenuDefProc(userRoutine) \ + (TkMenuDefUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), \ + tkUppMenuDefProcInfo, GetCurrentArchitecture()) +#else +#define TkNewMenuDefProc(userRoutine) \ + ((TkMenuDefUPP) (userRoutine)) +#endif + +#if GENERATINGCFM +#define TkCallMenuDefProc(userRoutine, message, theMenu, menuRectPtr, hitPt, \ + whichItemPtr, globalsPtr) \ + CallUniversalProc((UniversalProcPtr)(userRoutine), TkUppMenuDefProcInfo, \ + (message), (theMenu), (menuRectPtr), (hitPt), (whichItemPtr), \ + (globalsPtr)) +#else +#define TkCallMenuDefProc(userRoutine, message, theMenu, menuRectPtr, hitPt, \ + whichItemPtr, globalsPtr) \ + (*(userRoutine))((message), (theMenu), (menuRectPtr), (hitPt), \ + (whichItemPtr), (globalsPtr)) +#endif + +/* + * Internal procedures shared among Macintosh Tk modules but not exported + * to the outside world: + */ + +extern int HandleWMEvent _ANSI_ARGS_((EventRecord *theEvent)); +extern void TkAboutDlg _ANSI_ARGS_((void)); +extern void TkCreateMacEventSource _ANSI_ARGS_((void)); +extern void TkFontList _ANSI_ARGS_((Tcl_Interp *interp, + Display *display)); +extern Window TkGetTransientMaster _ANSI_ARGS_((TkWindow *winPtr)); +extern int TkGenerateButtonEvent _ANSI_ARGS_((int x, int y, + Window window, unsigned int state)); +extern int TkGetCharPositions _ANSI_ARGS_(( + XFontStruct *font_struct, char *string, + int count, short *buffer)); +extern void TkGenWMDestroyEvent _ANSI_ARGS_((Tk_Window tkwin)); +extern void TkGenWMConfigureEvent _ANSI_ARGS_((Tk_Window tkwin, + int x, int y, int width, int height, int flags)); +extern unsigned int TkMacButtonKeyState _ANSI_ARGS_((void)); +extern void TkMacClearMenubarActive _ANSI_ARGS_((void)); +extern int TkMacConvertEvent _ANSI_ARGS_((EventRecord *eventPtr)); +extern int TkMacDispatchMenuEvent _ANSI_ARGS_((int menuID, + int index)); +extern void TkMacInstallCursor _ANSI_ARGS_((int resizeOverride)); +extern int TkMacConvertTkEvent _ANSI_ARGS_((EventRecord *eventPtr, + Window window)); +extern void TkMacHandleTearoffMenu _ANSI_ARGS_((void)); +extern void tkMacInstallMWConsole _ANSI_ARGS_(( + Tcl_Interp *interp)); +extern void TkMacInvalClipRgns _ANSI_ARGS_((TkWindow *winPtr)); +extern void TkMacDoHLEvent _ANSI_ARGS_((EventRecord *theEvent)); +extern void TkMacFontInfo _ANSI_ARGS_((Font fontId, short *family, + short *style, short *size)); +extern Time TkMacGenerateTime _ANSI_ARGS_(()); +extern GWorldPtr TkMacGetDrawablePort _ANSI_ARGS_((Drawable drawable)); +extern TkWindow * TkMacGetScrollbarGrowWindow _ANSI_ARGS_(( + TkWindow *winPtr)); +extern Window TkMacGetXWindow _ANSI_ARGS_((WindowRef macWinPtr)); +extern int TkMacGrowToplevel _ANSI_ARGS_((WindowRef whichWindow, + Point start)); +extern void TkMacHandleMenuSelect _ANSI_ARGS_((long mResult, + int optionKeyPressed)); +extern void TkMacInitAppleEvents _ANSI_ARGS_((Tcl_Interp *interp)); +extern void TkMacInitMenus _ANSI_ARGS_((Tcl_Interp *interp)); +extern void TkMacInvalidateWindow _ANSI_ARGS_((MacDrawable *macWin, int flag)); +extern int TkMacIsCharacterMissing _ANSI_ARGS_((Tk_Font tkfont, + unsigned int searchChar)); +extern void TkMacMakeRealWindowExist _ANSI_ARGS_(( + TkWindow *winPtr)); +extern BitMapPtr TkMacMakeStippleMap(Drawable, Drawable); +extern void TkMacMenuClick _ANSI_ARGS_((void)); +extern void TkMacRegisterOffScreenWindow _ANSI_ARGS_((Window window, + GWorldPtr portPtr)); +extern int TkMacResizable _ANSI_ARGS_((TkWindow *winPtr)); +extern void TkMacSetEmbedRgn _ANSI_ARGS_((TkWindow *winPtr, RgnHandle rgn)); +extern void TkMacSetHelpMenuItemCount _ANSI_ARGS_((void)); +extern void TkMacSetScrollbarGrow _ANSI_ARGS_((TkWindow *winPtr, + int flag)); +extern void TkMacSetUpClippingRgn _ANSI_ARGS_((Drawable drawable)); +extern void TkMacSetUpGraphicsPort _ANSI_ARGS_((GC gc)); +extern void TkMacUpdateClipRgn _ANSI_ARGS_((TkWindow *winPtr)); +extern void TkMacUnregisterMacWindow _ANSI_ARGS_((GWorldPtr portPtr)); +extern int TkMacUseMenuID _ANSI_ARGS_((short macID)); +extern RgnHandle TkMacVisableClipRgn _ANSI_ARGS_((TkWindow *winPtr)); +extern void TkMacWinBounds _ANSI_ARGS_((TkWindow *winPtr, + Rect *geometry)); +extern void TkMacWindowOffset _ANSI_ARGS_((WindowRef wRef, + int *xOffset, int *yOffset)); +extern void TkResumeClipboard _ANSI_ARGS_((void)); +extern int TkSetMacColor _ANSI_ARGS_((unsigned long pixel, + RGBColor *macColor)); +extern void TkSetWMName _ANSI_ARGS_((TkWindow *winPtr, + Tk_Uid titleUid)); +extern void TkSuspendClipboard _ANSI_ARGS_((void)); +extern int TkWMGrowToplevel _ANSI_ARGS_((WindowRef whichWindow, + Point start)); +extern int TkMacZoomToplevel _ANSI_ARGS_((WindowPtr whichWindow, + Point where, short zoomPart)); +extern Tk_Window Tk_TopCoordsToWindow _ANSI_ARGS_((Tk_Window tkwin, + int rootX, int rootY, int *newX, int *newY)); +extern MacDrawable * TkMacContainerId _ANSI_ARGS_((TkWindow *winPtr)); +extern MacDrawable * TkMacGetHostToplevel _ANSI_ARGS_((TkWindow *winPtr)); +/* + * The following prototypes need to go into tkMac.h + */ +EXTERN void Tk_UpdatePointer _ANSI_ARGS_((Tk_Window tkwin, + int x, int y, int state)); + +#endif /* _TKMACINT */ |