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

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * tkMacOSXPrivate.h --
  3.  *
  4.  * Macros and declarations that are purely internal & private to TkAqua.
  5.  *
  6.  * Copyright (c) 2005-2007 Daniel A. Steffen <das@users.sourceforge.net>
  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: tkMacOSXPrivate.h,v 1.1.2.5 2007/12/18 18:20:34 das Exp $
  12.  */
  13. #ifndef _TKMACPRIV
  14. #define _TKMACPRIV
  15. #ifndef _TKMACINT
  16. #include "tkMacOSXInt.h"
  17. #endif
  18. /* Define constants only available on Mac OS X 10.3 or later */
  19. #if MAC_OS_X_VERSION_MAX_ALLOWED < 1030
  20.     #define kEventAppAvailableWindowBoundsChanged 110
  21.     #define kEventParamTransactionID 'trns'
  22.     #define kEventParamWindowPartCode 'wpar'
  23.     #define typeWindowPartCode 'wpar'
  24.     #define kMenuAttrDoNotUseUserCommandKeys (1 << 7)
  25.     #define kSimpleWindowClass 18
  26.     #define kWindowDoesNotCycleAttribute (1L << 15)
  27.     #define kWindowAsyncDragAttribute (1L << 23)
  28.     #define kThemeBrushAlternatePrimaryHighlightColor -5
  29.     #define kThemeResizeUpCursor 19
  30.     #define kThemeResizeDownCursor 19
  31.     #define kThemeResizeUpDownCursor 19
  32.     #define kThemePoofCursor 19
  33.     #define kThemeBackgroundMetal 6
  34.     #define kThemeIncDecButtonSmall 21
  35.     #define kThemeIncDecButtonMini 22
  36.     #define kThemeMiniSystemFont 109
  37.     #define kAppearancePartUpButton 20
  38.     #define kAppearancePartDownButton 21
  39.     #define kAppearancePartPageUpArea 22
  40.     #define kAppearancePartPageDownArea 23
  41.     #define kAppearancePartIndicator 129
  42.     #define kUIModeAllSuppressed 4
  43.     #define FixedToInt(a) ((short)(((Fixed)(a) + fixed1/2) >> 16))
  44.     #define IntToFixed(a) ((Fixed)(a) << 16)
  45. #endif
  46. /* Define constants only available on Mac OS X 10.4 or later */
  47. #if MAC_OS_X_VERSION_MAX_ALLOWED < 1040
  48.     #define kWindowNoTitleBarAttribute (1L << 9)
  49.     #define kWindowMetalNoContentSeparatorAttribute (1L << 11)
  50.     #define kThemeDisclosureTriangle 6
  51.     #define kThemeBrushListViewOddRowBackground 56
  52.     #define kThemeBrushListViewEvenRowBackground 57
  53.     #define kThemeBrushListViewColumnDivider 58
  54.     #define kThemeMetricScrollBarMinThumbHeight 132
  55.     #define kThemeMetricSmallScrollBarMinThumbHeight 134
  56.     #define kThemeScrollBarMedium kThemeMediumScrollBar
  57.     #define kThemeScrollBarSmall kThemeSmallScrollBar
  58.     #ifdef __BIG_ENDIAN__
  59.     #define kCGBitmapByteOrder32Host (4 << 12)
  60.     #else
  61.     #define kCGBitmapByteOrder32Host (2 << 12)
  62.     #endif
  63.     #endif
  64. /* Define constants only available on Mac OS X 10.5 or later */
  65. #if MAC_OS_X_VERSION_MAX_ALLOWED < 1050
  66.     #define kWindowUnifiedTitleAndToolbarAttribute (1L << 7)
  67.     #define kWindowTexturedSquareCornersAttribute (1L << 10)
  68. #endif
  69. /* HIToolbox version constants */
  70. #ifndef kHIToolboxVersionNumber10_3
  71.     #define kHIToolboxVersionNumber10_3 (145)
  72. #endif
  73. #ifndef kHIToolboxVersionNumber10_4
  74.     #define kHIToolboxVersionNumber10_4 (219)
  75. #endif
  76. #ifndef kHIToolboxVersionNumber10_5
  77.     #define kHIToolboxVersionNumber10_5 (343)
  78. #endif
  79. /* Macros for HIToolbox runtime version checking */
  80. MODULE_SCOPE float tkMacOSXToolboxVersionNumber;
  81. #define TK_IF_HI_TOOLBOX(vers, ...) 
  82. tk_if_mac_os_x_min_10_##vers(tkMacOSXToolboxVersionNumber >= 
  83. kHIToolboxVersionNumber10_##vers, 1, __VA_ARGS__)
  84. #define TK_ELSE_HI_TOOLBOX(vers, ...) 
  85. tk_else_mac_os_x_min_10_##vers(__VA_ARGS__)
  86. /* Macros for Mac OS X API availability checking */
  87. #define TK_IF_MAC_OS_X_API(vers, symbol, ...) 
  88. tk_if_mac_os_x_10_##vers(symbol != NULL, 1, __VA_ARGS__)
  89. #define TK_ELSE_MAC_OS_X(vers, ...) 
  90. tk_else_mac_os_x_10_##vers(__VA_ARGS__)
  91. #define TK_IF_MAC_OS_X_API_COND(vers, symbol, cond, ...) 
  92. tk_if_mac_os_x_10_##vers(symbol != NULL, cond, __VA_ARGS__)
  93. #define TK_ELSE(...) 
  94. } else { __VA_ARGS__
  95. #define TK_ENDIF 
  96. }
  97. /* Private macros that implement the checking macros above */
  98. #define tk_if_mac_os_x_yes(chk, cond, ...) 
  99. if (cond) { __VA_ARGS__
  100. #define tk_else_mac_os_x_yes(...) 
  101. } else {
  102. #define tk_if_mac_os_x_chk(chk, cond, ...) 
  103. if ((chk) && (cond)) { __VA_ARGS__
  104. #define tk_else_mac_os_x_chk(...) 
  105. } else { __VA_ARGS__
  106. #define tk_if_mac_os_x_no(chk, cond, ...) 
  107. if (0) {
  108. #define tk_else_mac_os_x_no(...) 
  109. } else { __VA_ARGS__
  110. /* Private mapping macros defined according to Mac OS X version requirements */
  111. /* 10.3 Panther */
  112. #if MAC_OS_X_VERSION_MIN_REQUIRED >= 1030
  113. #define tk_if_mac_os_x_min_10_3 tk_if_mac_os_x_yes
  114. #define tk_else_mac_os_x_min_10_3 tk_else_mac_os_x_yes
  115. #if MAC_OS_X_VERSION_MAX_ALLOWED >= 1030
  116. #define tk_if_mac_os_x_10_3 tk_if_mac_os_x_yes
  117. #define tk_else_mac_os_x_10_3 tk_else_mac_os_x_yes
  118. #endif /* MAC_OS_X_VERSION_MAX_ALLOWED */
  119. #else /* MAC_OS_X_VERSION_MIN_REQUIRED */
  120. #define tk_if_mac_os_x_min_10_3 tk_if_mac_os_x_chk
  121. #define tk_else_mac_os_x_min_10_3 tk_else_mac_os_x_chk
  122. #if MAC_OS_X_VERSION_MAX_ALLOWED >= 1030
  123. #define tk_if_mac_os_x_10_3 tk_if_mac_os_x_chk
  124. #define tk_else_mac_os_x_10_3 tk_else_mac_os_x_chk
  125. #endif /* MAC_OS_X_VERSION_MAX_ALLOWED */
  126. #endif /* MAC_OS_X_VERSION_MIN_REQUIRED */
  127. #if MAC_OS_X_VERSION_MAX_ALLOWED < 1030
  128. #define tk_if_mac_os_x_10_3 tk_if_mac_os_x_no
  129. #define tk_else_mac_os_x_10_3 tk_else_mac_os_x_no
  130. #endif /* MAC_OS_X_VERSION_MAX_ALLOWED */
  131. /* 10.4 Tiger */
  132. #if MAC_OS_X_VERSION_MIN_REQUIRED >= 1040
  133. #define tk_if_mac_os_x_min_10_4 tk_if_mac_os_x_yes
  134. #define tk_else_mac_os_x_min_10_4 tk_else_mac_os_x_yes
  135. #if MAC_OS_X_VERSION_MAX_ALLOWED >= 1040
  136. #define tk_if_mac_os_x_10_4 tk_if_mac_os_x_yes
  137. #define tk_else_mac_os_x_10_4 tk_else_mac_os_x_yes
  138. #endif /* MAC_OS_X_VERSION_MAX_ALLOWED */
  139. #else /* MAC_OS_X_VERSION_MIN_REQUIRED */
  140. #define tk_if_mac_os_x_min_10_4 tk_if_mac_os_x_chk
  141. #define tk_else_mac_os_x_min_10_4 tk_else_mac_os_x_chk
  142. #if MAC_OS_X_VERSION_MAX_ALLOWED >= 1040
  143. #define tk_if_mac_os_x_10_4 tk_if_mac_os_x_chk
  144. #define tk_else_mac_os_x_10_4 tk_else_mac_os_x_chk
  145. #endif /* MAC_OS_X_VERSION_MAX_ALLOWED */
  146. #endif /* MAC_OS_X_VERSION_MIN_REQUIRED */
  147. #if MAC_OS_X_VERSION_MAX_ALLOWED < 1040
  148. #define tk_if_mac_os_x_10_4 tk_if_mac_os_x_no
  149. #define tk_else_mac_os_x_10_4 tk_else_mac_os_x_no
  150. #endif /* MAC_OS_X_VERSION_MAX_ALLOWED */
  151. /* 10.5 Leopard */
  152. #if MAC_OS_X_VERSION_MIN_REQUIRED >= 1050
  153. #define tk_if_mac_os_x_min_10_5 tk_if_mac_os_x_yes
  154. #define tk_else_mac_os_x_min_10_5 tk_else_mac_os_x_yes
  155. #if MAC_OS_X_VERSION_MAX_ALLOWED >= 1050
  156. #define tk_if_mac_os_x_10_5 tk_if_mac_os_x_yes
  157. #define tk_else_mac_os_x_10_5 tk_else_mac_os_x_yes
  158. #endif /* MAC_OS_X_VERSION_MAX_ALLOWED */
  159. #else /* MAC_OS_X_VERSION_MIN_REQUIRED */
  160. #define tk_if_mac_os_x_min_10_5 tk_if_mac_os_x_chk
  161. #define tk_else_mac_os_x_min_10_5 tk_else_mac_os_x_chk
  162. #if MAC_OS_X_VERSION_MAX_ALLOWED >= 1050
  163. #define tk_if_mac_os_x_10_5 tk_if_mac_os_x_chk
  164. #define tk_else_mac_os_x_10_5 tk_else_mac_os_x_chk
  165. #endif /* MAC_OS_X_VERSION_MAX_ALLOWED */
  166. #endif /* MAC_OS_X_VERSION_MIN_REQUIRED */
  167. #if MAC_OS_X_VERSION_MAX_ALLOWED < 1050
  168. #define tk_if_mac_os_x_10_5 tk_if_mac_os_x_no
  169. #define tk_else_mac_os_x_10_5 tk_else_mac_os_x_no
  170. #endif /* MAC_OS_X_VERSION_MAX_ALLOWED */
  171. /*
  172.  * Macros for DEBUG_ASSERT_MESSAGE et al from Debugging.h.
  173.  */
  174. #undef kComponentSignatureString
  175. #undef COMPONENT_SIGNATURE
  176. #define kComponentSignatureString "TkMacOSX"
  177. #define COMPONENT_SIGNATURE 'Tk  '
  178. /*
  179.  * Macros abstracting checks only active in a debug build.
  180.  */
  181. #ifdef TK_MAC_DEBUG
  182. /*
  183.  * Macro to do debug message output.
  184.  */
  185. #define TkMacOSXDbgMsg(m, ...) do { 
  186.     fprintf(stderr, "%s:%d: %s(): " m "n", strrchr(__FILE__, '/')+1, 
  187.     __LINE__, __func__, ##__VA_ARGS__); 
  188. } while (0)
  189. /*
  190.  * Macro to do debug API failure message output.
  191.  */
  192. #if !defined(DEBUGLEVEL) || !DEBUGLEVEL
  193. #define TkMacOSXDbgOSErr(f, err) do { 
  194.     TkMacOSXDbgMsg("%s failed: %ld", #f, err); 
  195. } while (0)
  196. #else
  197. #define TkMacOSXDbgOSErr(f, err) do { 
  198.     DEBUG_ASSERT_MESSAGE(kComponentSignatureString, #f " failed:", 
  199.     __func__, 0, strrchr(__FILE__, '/')+1, __LINE__, err); 
  200. } while (0)
  201. #endif
  202. /*
  203.  * Macro to do very common check for noErr return from given API and output
  204.  * debug message in case of failure.
  205.  */
  206. #define ChkErr(f, ...) ({ 
  207. OSStatus err = f(__VA_ARGS__); 
  208. if (err != noErr) { 
  209.     TkMacOSXDbgOSErr(f, err); 
  210. err;})
  211. /*
  212.  * Macro to check emptyness of shared QD tmp region before use in debug builds.
  213.  */
  214. #define TkMacOSXCheckTmpQdRgnEmpty() do { 
  215.     if (!EmptyRgn(tkMacOSXtmpQdRgn)) { 
  216. Tcl_Panic("tkMacOSXtmpQdRgn nonempty"); 
  217.     } 
  218. } while(0)
  219. #else /* TK_MAC_DEBUG */
  220. #define TkMacOSXDbgMsg(m, ...)
  221. #define TkMacOSXDbgOSErr(f, err)
  222. #define ChkErr(f, ...) ({f(__VA_ARGS__);})
  223. #define TkMacOSXCheckTmpQdRgnEmpty()
  224. #endif /* TK_MAC_DEBUG */
  225. /*
  226.  * Macro abstracting use of TkMacOSXGetNamedSymbol to init named symbols.
  227.  */
  228. #define TkMacOSXInitNamedSymbol(module, ret, symbol, ...) 
  229.     static ret (* symbol)(__VA_ARGS__) = (void*)(-1L); 
  230.     if (symbol == (void*)(-1L)) { 
  231. symbol = TkMacOSXGetNamedSymbol(STRINGIFY(module), 
  232. STRINGIFY(_##symbol)); 
  233.     }
  234. MODULE_SCOPE void* TkMacOSXGetNamedSymbol(const char* module,
  235. const char* symbol);
  236. /*
  237.  * Structure encapsulating current drawing environment.
  238.  */
  239. typedef struct TkMacOSXDrawingContext {
  240.     CGContextRef context;
  241.     CGrafPtr port, savePort;
  242.     ThemeDrawingState saveState;
  243.     RgnHandle saveClip;
  244.     HIShapeRef clipRgn;
  245.     PixPatHandle penPat;
  246.     Rect portBounds;
  247.     Boolean portChanged;
  248. } TkMacOSXDrawingContext;
  249. /*
  250.  * Variables internal to TkAqua.
  251.  */
  252. MODULE_SCOPE RgnHandle tkMacOSXtmpQdRgn;
  253. MODULE_SCOPE int tkMacOSXUseCGDrawing;
  254. /*
  255.  * Prototypes for TkMacOSXRegion.c.
  256.  */
  257. #if 0
  258. MODULE_SCOPE void TkMacOSXEmtpyRegion(TkRegion r);
  259. MODULE_SCOPE int TkMacOSXIsEmptyRegion(TkRegion r);
  260. #endif
  261. MODULE_SCOPE HIShapeRef TkMacOSXGetNativeRegion(TkRegion r);
  262. MODULE_SCOPE void TkMacOSXSetWithNativeRegion(TkRegion r, HIShapeRef rgn);
  263. MODULE_SCOPE void TkMacOSXOffsetRegion(TkRegion r, short dx, short dy);
  264. MODULE_SCOPE HIShapeRef TkMacOSXHIShapeCreateEmpty(void);
  265. MODULE_SCOPE HIMutableShapeRef TkMacOSXHIShapeCreateMutableWithRect(
  266. const CGRect *inRect);
  267. MODULE_SCOPE OSStatus  TkMacOSXHIShapeSetWithShape(
  268. HIMutableShapeRef inDestShape, HIShapeRef inSrcShape);
  269. #if 0
  270. MODULE_SCOPE OSStatus TkMacOSXHIShapeSetWithRect(HIMutableShapeRef inShape,
  271. const CGRect *inRect);
  272. #endif
  273. MODULE_SCOPE OSStatus TkMacOSHIShapeDifferenceWithRect(
  274. HIMutableShapeRef inShape, const CGRect *inRect);
  275. MODULE_SCOPE OSStatus TkMacOSHIShapeUnionWithRect(HIMutableShapeRef inShape,
  276. const CGRect *inRect);
  277. MODULE_SCOPE OSStatus TkMacOSHIShapeUnion(HIShapeRef inShape1,
  278. HIShapeRef inShape2, HIMutableShapeRef outResult);
  279. /*
  280.  * Prototypes of TkAqua internal procs.
  281.  */
  282. MODULE_SCOPE void TkMacOSXDisplayChanged(Display *display);
  283. MODULE_SCOPE void TkMacOSXInitScrollbarMetrics(void);
  284. MODULE_SCOPE int TkMacOSXUseAntialiasedText(Tcl_Interp *interp, int enable);
  285. MODULE_SCOPE void TkMacOSXInitCarbonEvents(Tcl_Interp *interp);
  286. MODULE_SCOPE int TkMacOSXInitCGDrawing(Tcl_Interp *interp, int enable,
  287. int antiAlias);
  288. MODULE_SCOPE void TkMacOSXInitKeyboard(Tcl_Interp *interp);
  289. MODULE_SCOPE int TkMacOSXGenerateFocusEvent(Window window, int activeFlag);
  290. MODULE_SCOPE int TkMacOSXGenerateParentMenuSelectEvent(MenuRef menu);
  291. MODULE_SCOPE int TkMacOSXGenerateMenuSelectEvent(MenuRef menu,
  292. MenuItemIndex index);
  293. MODULE_SCOPE void TkMacOSXClearActiveMenu(MenuRef menu);
  294. MODULE_SCOPE WindowClass TkMacOSXWindowClass(TkWindow *winPtr);
  295. MODULE_SCOPE int TkMacOSXIsWindowZoomed(TkWindow *winPtr);
  296. MODULE_SCOPE int TkGenerateButtonEventForXPointer(Window window);
  297. MODULE_SCOPE EventModifiers TkMacOSXModifierState(void);
  298. MODULE_SCOPE int TkMacOSXSetupDrawingContext(Drawable d, GC gc, int useCG,
  299.     TkMacOSXDrawingContext *dcPtr);
  300. MODULE_SCOPE void TkMacOSXRestoreDrawingContext(TkMacOSXDrawingContext *dcPtr);
  301. MODULE_SCOPE void TkMacOSXSetColorInPort(unsigned long pixel, int fg,
  302. PixPatHandle penPat, CGrafPtr port);
  303. MODULE_SCOPE void TkMacOSXSetColorInContext(unsigned long pixel,
  304. CGContextRef context);
  305. MODULE_SCOPE int TkMacOSXRunTclEventLoop(void);
  306. MODULE_SCOPE OSStatus TkMacOSXStartTclEventLoopCarbonTimer(void);
  307. MODULE_SCOPE OSStatus TkMacOSXStopTclEventLoopCarbonTimer(void);
  308. MODULE_SCOPE void TkMacOSXTrackingLoop(int tracking);
  309. MODULE_SCOPE OSStatus TkMacOSXReceiveAndDispatchEvent(void);
  310. MODULE_SCOPE void TkMacOSXInstallWindowCarbonEventHandler(Tcl_Interp *interp,
  311. WindowRef window);
  312. MODULE_SCOPE int TkMacOSXMakeFullscreen(TkWindow *winPtr, WindowRef window,
  313. int fullscreen, Tcl_Interp *interp);
  314. MODULE_SCOPE void TkMacOSXEnterExitFullscreen(TkWindow *winPtr, int active);
  315. MODULE_SCOPE void TkMacOSXBringWindowForward(WindowRef wRef);
  316. MODULE_SCOPE WindowRef TkMacOSXDrawableWindow(Drawable drawable);
  317. MODULE_SCOPE void TkMacOSXWinCGBounds(TkWindow *winPtr, CGRect *bounds);
  318. MODULE_SCOPE HIShapeRef TkMacOSXGetClipRgn(Drawable drawable);
  319. #endif /* _TKMACPRIV */