tkMacInt.h
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:7k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * tkMacInt.h --
  3.  *
  4.  * Declarations of Macintosh specific shared variables and procedures.
  5.  *
  6.  * Copyright (c) 1995-1997 Sun Microsystems, Inc.
  7.  *
  8.  * See the file "license.terms" for information on usage and redistribution
  9.  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  10.  *
  11.  * RCS: @(#) $Id: tkMacInt.h,v 1.10 2001/11/23 02:05:55 das Exp $
  12.  */
  13. #ifndef _TKMACINT
  14. #define _TKMACINT
  15. #ifndef _TKINT
  16. #include "tkInt.h"
  17. #endif
  18. /*
  19.  * Include platform specific public interfaces.
  20.  */
  21. #ifndef _TKMAC
  22. #include "tkMac.h"
  23. #endif
  24. #ifndef _TKPORT
  25. #include "tkPort.h"
  26. #endif
  27. #include <AppleEvents.h>
  28. #include <Windows.h>
  29. #include <QDOffscreen.h>
  30. #include <Menus.h>
  31. #define TK_MAC_68K_STACK_GROWTH (256*1024)
  32. struct TkWindowPrivate {
  33.     TkWindow *winPtr;      /* Ptr to tk window or NULL if Pixmap */
  34.     GWorldPtr portPtr;      /* Either WindowRef or off screen world */
  35.     int xOff;         /* X offset from toplevel window */
  36.     int yOff;         /* Y offset from toplevel window */
  37.     RgnHandle clipRgn; /* Visable region of window */
  38.     RgnHandle aboveClipRgn; /* Visable region of window & it's children */
  39.     int referenceCount; /* Don't delete toplevel until children are
  40.  * gone. */
  41.     struct TkWindowPrivate *toplevel; /* Pointer to the toplevel
  42.  * datastruct. */
  43.     int flags; /* Various state see defines below. */
  44. };
  45. typedef struct TkWindowPrivate MacDrawable;
  46. /*
  47.  * This list is used to keep track of toplevel windows that have a Mac
  48.  * window attached. This is useful for several things, not the least
  49.  * of which is maintaining floating windows.
  50.  */
  51. typedef struct TkMacWindowList {
  52.     struct TkMacWindowList *nextPtr; /* The next window in the list. */
  53.     TkWindow *winPtr; /* This window */
  54. } TkMacWindowList;
  55. /*
  56.  * Defines use for the flags field of the MacDrawable data structure.
  57.  */
  58.  
  59. #define TK_SCROLLBAR_GROW 1
  60. #define TK_CLIP_INVALID 2
  61. #define TK_HOST_EXISTS 4
  62. #define TK_DRAWN_UNDER_MENU 8
  63. /*
  64.  * I am reserving TK_EMBEDDED = 0x100 in the MacDrawable flags
  65.  * This is defined in tk.h. We need to duplicate the TK_EMBEDDED flag in the
  66.  * TkWindow structure for the window,  but in the MacWin.  This way we can still tell
  67.  * what the correct port is after the TKWindow  structure has been freed.  This 
  68.  * actually happens when you bind destroy of a toplevel to Destroy of a child.
  69.  */
  70. /*
  71.  * This structure is for handling Netscape-type in process
  72.  * embedding where Tk does not control the top-level.  It contains
  73.  * various functions that are needed by Mac specific routines, like
  74.  * TkMacGetDrawablePort.  The definitions of the function types
  75.  * are in tkMac.h.
  76.  */
  77. typedef struct {
  78. Tk_MacEmbedRegisterWinProc *registerWinProc;
  79. Tk_MacEmbedGetGrafPortProc *getPortProc;
  80. Tk_MacEmbedMakeContainerExistProc *containerExistProc;
  81. Tk_MacEmbedGetClipProc *getClipProc;
  82. Tk_MacEmbedGetOffsetInParentProc *getOffsetProc;
  83. } TkMacEmbedHandler;
  84. extern TkMacEmbedHandler *gMacEmbedHandler;
  85. /*
  86.  * Defines used for TkMacInvalidateWindow
  87.  */
  88.  
  89. #define TK_WINDOW_ONLY 0
  90. #define TK_PARENT_WINDOW 1
  91. /*
  92.  * Accessor for the privatePtr flags field for the TK_HOST_EXISTS field
  93.  */
  94.  
  95. #define TkMacHostToplevelExists(tkwin) 
  96.     (((TkWindow *) (tkwin))->privatePtr->toplevel->flags & TK_HOST_EXISTS)
  97. /*
  98.  * Defines use for the flags argument to TkGenWMConfigureEvent.
  99.  */
  100.  
  101. #define TK_LOCATION_CHANGED 1
  102. #define TK_SIZE_CHANGED 2
  103. #define TK_BOTH_CHANGED 3
  104. /*
  105.  * Variables shared among various Mac Tk modules but are not
  106.  * exported to the outside world.
  107.  */
  108.  
  109. extern int tkMacAppInFront;
  110. /*
  111.  * Globals shared among Macintosh Tk
  112.  */
  113.  
  114. extern MenuHandle tkAppleMenu; /* Handle to the Apple Menu */
  115. extern MenuHandle tkFileMenu; /* Handles to menus */
  116. extern MenuHandle tkEditMenu; /* Handles to menus */
  117. extern RgnHandle tkMenuCascadeRgn; /* A region to clip with. */
  118. extern int tkUseMenuCascadeRgn; /* If this is 1, clipping code
  119.  * should intersect tkMenuCascadeRgn
  120.  * before drawing occurs.
  121.  * tkMenuCascadeRgn will only
  122.  * be valid when the value of this
  123.  * variable is 1. */
  124. extern TkMacWindowList *tkMacWindowListPtr;
  125. /* The list of toplevels */
  126. /*
  127.  * The following types and defines are for MDEF support.
  128.  */
  129. #if STRUCTALIGNMENTSUPPORTED
  130. #pragma options align=mac8k
  131. #endif
  132. typedef struct TkMenuLowMemGlobals {
  133.     long menuDisable; /* A combination of the menu and the item
  134.       * that the mouse is currently over. */
  135.     short menuTop; /* Where in global coords the top of the
  136.       * menu is. */
  137.     short menuBottom; /* Where in global coords the bottom of
  138.       * the menu is. */
  139.     Rect itemRect; /* This is the rectangle of the currently
  140.       * selected item. */
  141.     short scrollFlag; /* This is used by the MDEF and the
  142.       * Menu Manager to control when scrolling
  143.       * starts. With hierarchicals, an
  144.       * mChooseMsg can come before an
  145.       * mDrawMsg, and scrolling should not
  146.       * occur until after the mDrawMsg.
  147.       * The mDrawMsg sets this flag;
  148.       * mChooseMsg checks the flag and
  149.       * does not scroll if it is set;
  150.       * and then resets the flag. */
  151. } TkMenuLowMemGlobals;
  152. #if STRUCTALIGNMENTSUPPORTED
  153. #pragma options align=reset
  154. #endif
  155. typedef pascal void (*TkMenuDefProcPtr) (short message, MenuHandle theMenu,
  156. Rect *menuRectPtr, Point hitPt, short *whichItemPtr,
  157. TkMenuLowMemGlobals *globalsPtr);
  158. enum {
  159.     tkUppMenuDefProcInfo = kPascalStackBased
  160.     | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(short)))
  161.     | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(MenuRef)))
  162.     | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(Rect*)))
  163.     | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(Point)))
  164.     | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(short*)))
  165.     | STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(TkMenuLowMemGlobals *)))
  166. };
  167. #if GENERATINGCFM
  168. typedef UniversalProcPtr TkMenuDefUPP;
  169. #else
  170. typedef TkMenuDefProcPtr TkMenuDefUPP;
  171. #endif
  172. #if GENERATINGCFM
  173. #define TkNewMenuDefProc(userRoutine)
  174. (TkMenuDefUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), 
  175. tkUppMenuDefProcInfo, GetCurrentArchitecture())
  176. #else
  177. #define TkNewMenuDefProc(userRoutine) 
  178. ((TkMenuDefUPP) (userRoutine))
  179. #endif
  180. #if GENERATINGCFM
  181. #define TkCallMenuDefProc(userRoutine, message, theMenu, menuRectPtr, hitPt, 
  182. whichItemPtr, globalsPtr) 
  183. CallUniversalProc((UniversalProcPtr)(userRoutine), TkUppMenuDefProcInfo, 
  184. (message), (theMenu), (menuRectPtr), (hitPt), (whichItemPtr), 
  185. (globalsPtr))
  186. #else
  187. #define TkCallMenuDefProc(userRoutine, message, theMenu, menuRectPtr, hitPt, 
  188. whichItemPtr, globalsPtr) 
  189. (*(userRoutine))((message), (theMenu), (menuRectPtr), (hitPt), 
  190. (whichItemPtr), (globalsPtr))
  191. #endif
  192. #include "tkIntPlatDecls.h"
  193. #ifdef BUILD_tk
  194. #undef TCL_STORAGE_CLASS
  195. #define TCL_STORAGE_CLASS DLLEXPORT
  196. #endif
  197. /*
  198.  * mac specific procedures exported from the DLL
  199.  */
  200. #undef TCL_STORAGE_CLASS
  201. #define TCL_STORAGE_CLASS DLLIMPORT
  202. #endif /* _TKMACINT */