diff options
Diffstat (limited to 'tk/macosx/tkMacOSXFont.c')
-rw-r--r-- | tk/macosx/tkMacOSXFont.c | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/tk/macosx/tkMacOSXFont.c b/tk/macosx/tkMacOSXFont.c index 5f90652ae21..d56713ab67d 100644 --- a/tk/macosx/tkMacOSXFont.c +++ b/tk/macosx/tkMacOSXFont.c @@ -15,6 +15,8 @@ */ #include <Carbon/Carbon.h> +#include "tclInt.h" + #include "tkMacOSXInt.h" #include "tkFont.h" @@ -2189,3 +2191,89 @@ TkMacOSXInitControlFontStyle(Tk_Font tkfont, ControlFontStylePtr fsPtr) fsPtr->style = fontPtr->style; fsPtr->just = teCenter; } + +/* + *---------------------------------------------------------------------- + * + * TkMacOSXUseAntialiasedText -- + * + * Enables or disables application-wide use of quickdraw + * antialiased text (where available). + * Sets up a linked tcl global boolean variable with write trace + * to allow disabling of antialiased text from tcl. + * + * Results: + * TCL_OK if facility was sucessfully enabled/disabled. + * TCL_ERROR if an error occurred or if facility is not available. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +#include <mach-o/dyld.h> + +/* define constants from 10.2 Quickdraw.h to enable compilation in 10.1 */ +#define kQDUseTrueTypeScalerGlyphs (1 << 0) +#define kQDUseCGTextRendering (1 << 1) +#define kQDUseCGTextMetrics (1 << 2) + +static int TkMacOSXAntialiasedTextEnabled = FALSE; + +static char * +TkMacOSXAntialiasedTextVariableProc(clientData, interp, name1, name2, flags) + ClientData clientData; + Tcl_Interp *interp; + CONST char *name1; + CONST char *name2; + int flags; +{ + TkMacOSXUseAntialiasedText(interp, TkMacOSXAntialiasedTextEnabled); + return (char *) NULL; +} + +int TkMacOSXUseAntialiasedText(interp, enable) + Tcl_Interp *interp; + int enable; +{ + static Boolean initialized = FALSE; + static UInt32 (*swaptextflags)(UInt32) = NULL; + + if(!initialized) { + NSSymbol nsSymbol=NULL; + if(NSIsSymbolNameDefinedWithHint("_QDSwapTextFlags", "QD")) { + nsSymbol = NSLookupAndBindSymbolWithHint("_QDSwapTextFlags", "QD"); + } else if(NSIsSymbolNameDefinedWithHint("_SwapQDTextFlags", "QD")) { + nsSymbol = NSLookupAndBindSymbolWithHint("_SwapQDTextFlags", "QD"); + } + if(nsSymbol) { + swaptextflags = NSAddressOfSymbol(nsSymbol); + } + initialized = TRUE; + + TkMacOSXAntialiasedTextEnabled = (swaptextflags ? enable : FALSE); + if (Tcl_CreateNamespace(interp, "::tk::mac", NULL, NULL) == NULL) { + Tcl_ResetResult(interp); + } + if (Tcl_TraceVar(interp, "::tk::mac::antialiasedtext", + TCL_GLOBAL_ONLY | TCL_TRACE_WRITES, + TkMacOSXAntialiasedTextVariableProc, NULL) != TCL_OK) { + Tcl_ResetResult(interp); + } + if (Tcl_LinkVar(interp, "::tk::mac::antialiasedtext", + (char *) &TkMacOSXAntialiasedTextEnabled, + TCL_LINK_BOOLEAN) != TCL_OK) { + Tcl_ResetResult(interp); + } + } + if(swaptextflags) { + swaptextflags(enable ? kQDUseCGTextRendering | kQDUseCGTextMetrics + : kQDUseTrueTypeScalerGlyphs); + TkMacOSXAntialiasedTextEnabled = enable; + return TCL_OK; + } else { + TkMacOSXAntialiasedTextEnabled = FALSE; + return TCL_ERROR; + } +} |