diff options
author | das <das> | 2007-04-29 02:26:47 (GMT) |
---|---|---|
committer | das <das> | 2007-04-29 02:26:47 (GMT) |
commit | 9ba316b391173927a31b4ab7207dd5775e525448 (patch) | |
tree | d8296fa62af852c5f2e743159973d854366b69fa /macosx/tkMacOSXXStubs.c | |
parent | a509e51da0d9070869060f9af35e97c86d48dabd (diff) | |
download | tk-9ba316b391173927a31b4ab7207dd5775e525448.zip tk-9ba316b391173927a31b4ab7207dd5775e525448.tar.gz tk-9ba316b391173927a31b4ab7207dd5775e525448.tar.bz2 |
* macosx/tkMacOSXCarbonEvents.c: add window event target carbon event
* macosx/tkMacOSXEvent.c: handler for all kEventClassWindow and
* macosx/tkMacOSXEvent.h: kEventClassMouse events; move all
* macosx/tkMacOSXNotify.c: remaining events except for
* macosx/tkMacOSXWindowEvent.c: kEventClassKeyboard from dispatcher to
application event handler; pass event handler callRef downstream; fix
debug event tracing; process all tcl event types in carbon event timer;
delay carbon event timer first fire; add TkMacOSXTrackingLoop() to mark
enter/exit of event tracking loop during which all tcl events but only
carbon update events should be processed by the timer (replaces various
calls to Tcl_SetServiceMode()); rename TkMacOSXReceiveAndProcessEvent()
to TkMacOSXReceiveAndDispatchEvent(), move it from tkMacOSXEvent.c to
tkMacOSXCarbonEvents.c and modify it to dequeue only update events
during a tracking loop; add TkMacOSXRunTclEventLoop() to standardize
the various ways in use to run the tcl event loop; add handling of
kEventClassAppearance events (for ScrollBarVariantChanged event).
* macosx/tkMacOSXDialog.c: use new TkMacOSXTrackingLoop() around
* macosx/tkMacOSXEvent.c: blocking API that puts up modal dialogs
* macosx/tkMacOSXMenu.c: or when entering/exiting menu/control
* macosx/tkMacOSXMouseEvent.c: tracking, window dragging and other
* macosx/tkMacOSXScale.c: mouse tracking loops.
* macosx/tkMacOSXScrlbr.c:
* macosx/tkMacOSXWindowEvent.c:
* macosx/tkMacOSXWm.c:
* macosx/tkMacOSXDialog.c: use new TkMacOSXRunTclEventLoop()
* macosx/tkMacOSXScale.c: instead of Tcl_DoOneEvent(),
* macosx/tkMacOSXScrlbr.c: Tcl_ServiceAll(), TclServiceIdle()
* macosx/tkMacOSXWindowEvent.c: and Tcl_GlobalEval("update idletasks").
* macosx/tkMacOSXColor.c: make available as Tk system colors all
* macosx/tkMacOSXPort.h: appearance manager brushes, text colors and
backgrounds with new and legacy names, as well as the fully transparent
color "systemTransparent"; add TkMacOSXSetColorIn{Port,Context}() to
directly set an X pixel color value in the current QD port resp. the
given CG context without requiring passage through rgb representation
(lossy for most system colors); modernize/remove Classic-era code;
replace crufty strcmp() elseifs by Tcl_GetIndexFromObjStruct().
* macosx/tkMacOSXButton.c: use new TkMacOSXSetColorInPort()
* macosx/tkMacOSXDraw.c: instead of setting rgb color directly
* macosx/tkMacOSXMenubutton.c: to allow for non-rgb system colors.
* macosx/tkMacOSXCursor.c: implement "none" cursor as on other
platforms [Patch 1615427]; add all missing appearance manager cursors.
* macosx/tkMacOSXDefault.h: set SELECT_FG_COLORs to None to match aqua
L&F; use standard system color names; use new 'menu' system font;
correct default scrollbar width.
* macosx/tkMacOSXDraw.c: standardize initialization, use and
* macosx/tkMacOSXInt.h: emptying of various static temp rgns
* macosx/tkMacOSXRegion.c: onto two global RgnHandles; in debug
* macosx/tkMacOSXSubwindows.c: builds, verify emptiness of these temp
* macosx/tkMacOSXWindowEvent.c: rgns before use.
* macosx/tkMacOSXDraw.c: add TkMacOSX{Setup,Restore}DrawingContext() to
* macosx/tkMacOSXInt.h: abstract common setup & teardown of drawing
environment (for both CG and QD); save/restore QD theme drawing state;
handle GC clip region; add TkpClipDrawableToRect() to allow clipped
drawing into drawable regardless of GC used; use new system color
"systemWindowHeaderBackground" to setup background in themed toplevels;
correct implementation of TkMacOSXMakeStippleMap().
* macosx/tkMacOSXEntry.c: use new TkMacOSXSetupDrawingContext() and
* macosx/tkMacOSXFont.c: TkMacOSXRestoreDrawingContext() instead of
various setup/teardown procs like TkMacOSX{SetUp,Release}CGContext(),
TkMacOSXQuarz{Start,End}Draw(), TkMacOSXSetUpGraphicsPort() etc.
* macosx/tkMacOSXEmbed.c: add CG context and drawable clip rgn fields
* macosx/tkMacOSXInt.h: to MacDrawable struct.
* macosx/tkMacOSXSubwindows.c:
* macosx/tkMacOSXDialog.c: make -parent option of tk_getOpenFile et al.
use the sheet version of NavServices dialogs; ensure native parent win
exists before using StandardSheet API for tk_messageBox [Bug 1677611];
force sheets to behave like app-modal dialogs via WindowModality() API;
use more modern ColorPicker API.
* macosx/tkAboutDlg.r: use themed movable modal dialog, fix (c) year.
* macosx/tkMacOSXEntry.c: take xOff/yOff of MacDrawable into account
when computing locations/bounds to ensure correct posititioning when
not drawing into intermediate pixmap.
* macosx/tkMacOSXFont.c: use appearance manager API to map system font
* macosx/tkMacOSXFont.h: names to TkFonts; add "menu" system font for
menu item text drawing from MDEF; disable broken QD stippling.
* macosx/tkMacOSXMenu.c: large-scale rewrite of custom
* macosx/tkMacOSXMenu.r (removed): MDEF and related code that
* unix/Makefile.in: restores many longtime-MIA
features to working order (e.g. images, custom colors & fonts in menus
etc); implement compound menu items; use Appearance Mgr and ThemeText
APIs to mimic native MDEF as closely as possible when default "menu"
system font is used; remove now obsolete SICN drawing code and
resources.
* macosx/tkMacOSXCarbonEvents.c: handle additional menu carbon events
* macosx/tkMacOSXEvent.c: in order to support <<MenuSelect>> in
* macosx/tkMacOSXMenu.c: the menubar and in menus that are not
* macosx/tkMacOSXMenus.c: using the custom MDEF [Bug 1620826];
fix early and missing clearing of current Tk active menu entry; fix
extraneous sending of <<MenuSelect>> during active menu entry clearing.
* macosx/tkMacOSXMouseEvent.c: add support for async window dragging by
the window server; set the corresponding window attribute by default.
* macosx/tkMacOSXMouseEvent.c: rationalized handling order of
non-mousedown events; add TkMacOSXModifierState() to retrieve the
current key modifiers in carbon format.
* macosx/tkMacOSXScrlbr.c: use appearance manager API to retrieve
scrollbar component metrics; add awareness of multiple possibilites for
scrollbar arrow position in aqua and handle user changes to arrow
position pref; handle difference in metrics of small & large scrollbar
variants; handle aqua "jump to here" scrollbar behaviour; correct
computation of scroll view size and position; enforce min scrollbar
height to avoid scrollbar component overlap; erase scrollbar area
outside of standard width; remove broken auto-adjust code; account for
window class when leaving space for grow box; remove code to manually
draw grow box; use modern API for thumb scroll proc; replace
HiliteControl() by modern API; replace control mgr constants with
appearance mgr equivalents.
* macosx/tkMacOSXSubwindows.c: use SetWindowBounds() API instead of
SizeWindow(); invalidate clip regions after X{Map,Unmap}Window as fix
for [Bug 940117] made them dependent on mapping state; remove unneeded
calls to TkMacOSXInvalClipRgns() and unnecessary setting of QD port;
use native-endian pixmap on intel; remove obsolete pixmap pix locking.
* macosx/tkMacOSXWindowEvent.c: handle only the first of a batch of
kEventAppAvailableWindowBoundsChanged events sent per transaction;
handle kEventWindowBoundsChanged event to support live window resizing
and centralized sending of location/size changed ConfigureNotify
events; ensure HIGrowBox is redrawn after bounds change; constrain
window after dragging to ensure titlebar is not inacessible
offscreen or under dock/menubar; handle kEventWindowGetRegion and
kEventWindowDrawContent for transparent windows to mark resp. paint
content region as transparent; handle kEventWindowConstrain for
fullscreen windows to ensure bounds match new screen size; enter/exit
fullscreen UIMode upon activation/deactivation of fullscreen window.
* macosx/tkMacOSXWm.c: use live-resize and async-drag carbon window
* macosx/tkMacOSXWm.h: attributes for toplevels by default; implement
new [wm attributes] -topmost, -transparent and -fullscreen; refactor
WmAttributesCmd() parallelling the tkUnixWm.c implementation, use thus
factored proc to set proxy icon from [wm iconbitmap]; dynamically
determine default values for toplevel min and max sizes (similar to
tkWinWm.c impl): min sizes depend on window class & attributes to
ensure visibility of all titlebar widgets and grow box, max sizes
depend on maximal window bounds for all active displays; factor out
code that puts into effect changes to master or override_redirect; use
RepositionWindow() API to determine staggered initial window bounds;
correct resize limit calculations, handle gridding and use modern
resize API in TkMacOSXGrowToplevel(); remove sending of ConfigureNotify
after resize or zoom (now handled by BoundsChanged handler); correct
composite carbon window attribute handling, remove currently unusable
attributes and add new attributes in [tk::unsupported::MacWindowStyle];
ensure validity of window class and attributes before use; apply
changes to window class when handling carbon window attribute changes
(if HIWindowChangeClass() API available); add debug build warning
message when deprecated window style is used instead of window class;
use transparent HIGrowBox for resizable windows; avoid unnecessary
calls to window structure width API; use tcl time API in TkpGetMS();
add TkMacOSXEnterExitFullscreen() to enter/exit UIMode with dock and
menubar hidden; restrict wmTracing output to debug builds; remove
unneeded calls to TkMacOSXInvalClipRgns() and unnecessary setting of QD
port; workaround GetWindowStructureWidths() Carbon bug (bogus results
for never-mapped floating windows).
* macosx/tkMacOSXXStubs.c (TkMacOSXDisplayChanged): add maximal window
bounds field to Screen record (in ext_data), computed as the union of
available window positioning bounds of all graphics devices (displays).
* macosx/tkMacOSXBitmap.c: fix macRoman encoding leak.
* macosx/tkMacOSXCursor.c:
* macosx/tkMacOSXDebug.c (TkMacOSXCarbonEventToAscii): use static
* macosx/tkMacOSXDebug.h: buffer to simplify callers; const fixes.
* macosx/tkMacOSXBitmap.c: use more efficient QDSwapPort() instead of
* macosx/tkMacOSXButton.c: GetPort()/SetPort()/GetGWorld()/SetGWorld().
* macosx/tkMacOSXDraw.c:
* macosx/tkMacOSXFont.c:
* macosx/tkMacOSXMenubutton.c:
* macosx/tkMacOSXScale.c:
* macosx/tkMacOSXScrlbr.c:
* macosx/tkMacOSXXStubs.c:
* macosx/tkMacOSXColor.c: use kHIToolboxVersionNumber for runtime OS
* macosx/tkMacOSXEntry.c: version check rather than Gestalt() etc.
* macosx/tkMacOSXInt.h:
* macosx/tkMacOSXWm.c:
* macosx/tkMacOSXDraw.c: remove obsolete and now incorrect
* macosx/tkMacOSXInt.h: tkMenuCascadeRgn clipping code.
* macosx/tkMacOSXMenu.c:
* macosx/tkMacOSXHLEvents.c: replace Tcl_GlobalEval() resp. Tcl_Eval()
* macosx/tkMacOSXScrlbr.c: by Tcl_EvalEx().
* macosx/tkMacOSXInit.c:
* macosx/tkMacOSXInit.c (TkpInit): reorder initialization steps.
* macosx/tkMacOSXKeyEvent.c: remove pre-10.2 support.
* macosx/tkMacOSXMenus.c: remove now useless call to
TkMacOSXHandleTearoffMenu(); use \x.. quoting for non-latin1 macroman
literar chars to allow file to be edited as utf-8.
* macosx/tkMacOSXScale.c: replace TrackControl() by modern
* macosx/tkMacOSXScrlbr.c: HandleControlClick() API (using new
TkMacOSXModifierState()).
* macosx/tkMacOSXInt.h: move all constant #defines needed to
* macosx/tkMacOSXColor.c: support building on older OS X releases
* macosx/tkMacOSXEvent.h: to a central location in tkMacOSXInt.h.
* macosx/tkMacOSXFont.c:
* macosx/tkMacOSXMenu.c:
* macosx/tkMacOSXMenubutton.c:
* macosx/tkMacOSXMenus.c:
* macosx/tkMacOSXMouseEvent.c:
* macosx/tkMacOSXWm.c:
* macosx/tkMacOSXInt.h: add ChkErr() macro to factor out
* macosx/tkMacOSXButton.c: Carbon OSStatus return value checking
* macosx/tkMacOSXCarbonEvents.c: and TkMacOSXDbgMsg() macro to factour
* macosx/tkMacOSXClipboard.c: out debug message output; use these
* macosx/tkMacOSXColor.c: macros to replace #ifdef TK_MAC_DEBUG
* macosx/tkMacOSXCursor.c: blocks & direct printing to stderr,
* macosx/tkMacOSXDebug.c: and to do additional OSStatus return
* macosx/tkMacOSXDialog.c: checking, and to standardize OSStatus
* macosx/tkMacOSXDraw.c: usage.
* macosx/tkMacOSXEntry.c:
* macosx/tkMacOSXEvent.c:
* macosx/tkMacOSXFont.c:
* macosx/tkMacOSXHLEvents.c:
* macosx/tkMacOSXInit.c:
* macosx/tkMacOSXKeyEvent.c:
* macosx/tkMacOSXMenu.c:
* macosx/tkMacOSXMenubutton.c:
* macosx/tkMacOSXMenus.c:
* macosx/tkMacOSXMouseEvent.c:
* macosx/tkMacOSXScrlbr.c:
* macosx/tkMacOSXSubwindows.c:
* macosx/tkMacOSXWindowEvent.c:
* macosx/tkMacOSXWm.c:
* macosx/tkMacOSXXStubs.c:
* macosx/tkMacOSXSend.c: remove duplicate/unused declarations.
* macosx/tkMacOSXXStubs.c:
* macosx/tkMacOSXDebug.c: const fixes.
* macosx/tkMacOSXInit.c:
* macosx/tkMacOSXTest.c:
* macosx/tkMacOSXWm.c:
* macosx/tkMacOSXXStubs.c:
* macosx/Wish-Info.plist.in: add tcl document extensions/mime types and
LSMinimumSystemVersion, LSRequiresCarbon & NSAppleScriptEnabled keys.
* macosx/tkMacOSXAETE.r: fix whitespace.
* macosx/tkMacOSXConfig.c:
* macosx/tkMacOSXCursors.r:
* macosx/tkMacOSXKeyboard.c:
* macosx/tkMacOSXSend.c:
* macosx/tkMacOSXXCursors.r:
* macosx/README:
* macosx/Makefile: fix/add copyright and license refs.
* macosx/Tk-Info.plist.in:
* macosx/Wish-Info.plist.in:
* macosx/tkMacOSX.h:
Diffstat (limited to 'macosx/tkMacOSXXStubs.c')
-rw-r--r-- | macosx/tkMacOSXXStubs.c | 335 |
1 files changed, 178 insertions, 157 deletions
diff --git a/macosx/tkMacOSXXStubs.c b/macosx/tkMacOSXXStubs.c index 2ebf2b1..6891a3d 100644 --- a/macosx/tkMacOSXXStubs.c +++ b/macosx/tkMacOSXXStubs.c @@ -1,18 +1,19 @@ -/* +/* * tkMacOSXXStubs.c -- * - * This file contains most of the X calls called by Tk. Many of - * these calls are just stubs and either don't make sense on the - * Macintosh or thier implamentation just doesn't do anything. Other - * calls will eventually be moved into other files. + * This file contains most of the X calls called by Tk. Many of + * these calls are just stubs and either don't make sense on the + * Macintosh or thier implamentation just doesn't do anything. Other + * calls will eventually be moved into other files. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * Copyright 2001, Apple Computer, Inc. + * Copyright (c) 2005-2007 Daniel A. Steffen <das@users.sourceforge.net> * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkMacOSXXStubs.c,v 1.2.2.13 2006/09/10 17:07:36 das Exp $ + * RCS: @(#) $Id: tkMacOSXXStubs.c,v 1.2.2.14 2007/04/29 02:26:51 das Exp $ */ #include "tkMacOSXInt.h" @@ -20,14 +21,14 @@ /* * Because this file is still under major development Debugger statements are - * used through out this file. The define TCL_DEBUG will decide whether + * used through out this file. The define TCL_DEBUG will decide whether * the debugger statements actually call the debugger or not. */ #ifndef TCL_DEBUG # define Debugger() #endif - + #define ROOT_ID 10 /* @@ -35,30 +36,27 @@ */ static TkDisplay *gMacDisplay = NULL; /* Macintosh display. */ -static char *macScreenName = ":0"; /* Default name of macintosh display. */ +static const char *macScreenName = ":0"; /* Default name of macintosh display. */ /* * Forward declarations of procedures used in this file. */ -static XID MacXIdAlloc _ANSI_ARGS_((Display *display)); -static int DefaultErrorHandler _ANSI_ARGS_((Display* display, - XErrorEvent* err_evt)); +static XID MacXIdAlloc(Display *display); +static int DefaultErrorHandler(Display* display, XErrorEvent* err_evt); /* * Other declarations */ -static int TkMacOSXXDestroyImage _ANSI_ARGS_((XImage *image)); -static unsigned long TkMacOSXXGetPixel _ANSI_ARGS_((XImage *image, int x, int y)); -static int TkMacOSXXPutPixel _ANSI_ARGS_((XImage *image, int x, int y, - unsigned long pixel)); -static XImage *TkMacOSXXSubImage _ANSI_ARGS_((XImage *image, int x, int y, - unsigned int width, unsigned int height)); -static int TkMacOSXXAddPixel _ANSI_ARGS_((XImage *image, long value)); -int _XInitImageFuncPtrs _ANSI_ARGS_((XImage *image)); - +static int TkMacOSXXDestroyImage(XImage *image); +static unsigned long TkMacOSXXGetPixel(XImage *image, int x, int y); +static int TkMacOSXXPutPixel(XImage *image, int x, int y, unsigned long pixel); +static XImage *TkMacOSXXSubImage(XImage *image, int x, int y, + unsigned int width, unsigned int height); +static int TkMacOSXXAddPixel(XImage *image, long value); + /* *---------------------------------------------------------------------- * @@ -81,6 +79,7 @@ TkMacOSXDisplayChanged(Display *display) { GDHandle graphicsDevice; Screen *screen; + Rect bounds = {0, 0, 0, 0}, *maxBounds; if (display == NULL || display->screens == NULL) { return; @@ -88,15 +87,29 @@ TkMacOSXDisplayChanged(Display *display) screen = display->screens; graphicsDevice = GetMainDevice(); - screen->root_depth = (*(*graphicsDevice)->gdPMap)->cmpSize * - (*(*graphicsDevice)->gdPMap)->cmpCount; - screen->height = (*graphicsDevice)->gdRect.bottom - + screen->root_depth = (*(*graphicsDevice)->gdPMap)->cmpSize * + (*(*graphicsDevice)->gdPMap)->cmpCount; + screen->height = (*graphicsDevice)->gdRect.bottom - (*graphicsDevice)->gdRect.top; - screen->width = (*graphicsDevice)->gdRect.right - + screen->width = (*graphicsDevice)->gdRect.right - (*graphicsDevice)->gdRect.left; - screen->mwidth = (screen->width * 254 + 360) / 720; - screen->mheight = (screen->height * 254 + 360) / 720; + screen->mwidth = (screen->width * 254 + 360) / 720; + screen->mheight = (screen->height * 254 + 360) / 720; + + maxBounds = (Rect*) screen->ext_data; + *maxBounds = bounds; + graphicsDevice = GetDeviceList(); + while (graphicsDevice) { + OSStatus err; + + err = ChkErr(GetAvailableWindowPositioningBounds, graphicsDevice, + &bounds); + if (err == noErr) { + UnionRect(&bounds, maxBounds, maxBounds); + } + graphicsDevice = GetNextDevice(graphicsDevice); + } } /* @@ -122,7 +135,8 @@ TkpOpenDisplay( { Display *display; Screen *screen; - int fd = 0; + int fd = 0; + static Rect maxBounds = {0, 0, 0, 0}; if (gMacDisplay != NULL) { if (strcmp(gMacDisplay->display->display_name, display_name) == 0) { @@ -131,7 +145,6 @@ TkpOpenDisplay( return NULL; } } - InitCursor(); display = (Display *) ckalloc(sizeof(Display)); screen = (Screen *) ckalloc(sizeof(Screen)); @@ -139,13 +152,13 @@ TkpOpenDisplay( bzero(screen, sizeof(Screen)); display->resource_alloc = MacXIdAlloc; - display->request = 0; - display->qlen = 0; - display->fd = fd; - display->screens = screen; - display->nscreens = 1; + display->request = 0; + display->qlen = 0; + display->fd = fd; + display->screens = screen; + display->nscreens = 1; display->default_screen = 0; - display->display_name = macScreenName; + display->display_name = (char*)macScreenName; Gestalt(gestaltQuickdrawVersion, (long*)&display->proto_minor_version); display->proto_major_version = 10; @@ -156,14 +169,15 @@ TkpOpenDisplay( /* * These screen bits never change */ - screen->root = ROOT_ID; - screen->display = display; - screen->black_pixel = 0x00000000; - screen->white_pixel = 0x00FFFFFF; + screen->root = ROOT_ID; + screen->display = display; + screen->black_pixel = 0x00000000 | PIXEL_MAGIC << 24; + screen->white_pixel = 0x00FFFFFF | PIXEL_MAGIC << 24; + screen->ext_data = (XExtData*) &maxBounds; screen->root_visual = (Visual *) ckalloc(sizeof(Visual)); screen->root_visual->visualid = 0; - screen->root_visual->class = TrueColor; + screen->root_visual->class = TrueColor; screen->root_visual->red_mask = 0x00FF0000; screen->root_visual->green_mask = 0x0000FF00; screen->root_visual->blue_mask = 0x000000FF; @@ -209,15 +223,15 @@ TkpCloseDisplay( { Display *display = displayPtr->display; if (gMacDisplay != displayPtr) { - Tcl_Panic("TkpCloseDisplay: tried to call TkpCloseDisplay on bad display"); + Tcl_Panic("TkpCloseDisplay: tried to call TkpCloseDisplay on bad display"); } gMacDisplay = NULL; if (display->screens != (Screen *) NULL) { - if (display->screens->root_visual != (Visual *) NULL) { - ckfree((char *) display->screens->root_visual); - } - ckfree((char *) display->screens); + if (display->screens->root_visual != (Visual *) NULL) { + ckfree((char *) display->screens->root_visual); + } + ckfree((char *) display->screens); } ckfree((char *) display); } @@ -229,7 +243,7 @@ TkpCloseDisplay( * * This procedure is called to cleanup resources associated with * claiming clipboard ownership and for receiving selection get - * results. This function is called in tkWindow.c. This has to be + * results. This function is called in tkWindow.c. This has to be * called by the display cleanup function because we still need the * access display elements. * @@ -244,7 +258,7 @@ TkpCloseDisplay( void TkClipCleanup(dispPtr) - TkDisplay *dispPtr; /* display associated with clipboard */ + TkDisplay *dispPtr; /* display associated with clipboard */ { /* * Make sure that the local scrap is transfered to the global @@ -329,7 +343,7 @@ TkpWindowWasRecentlyDeleted( * * DefaultErrorHandler -- * - * This procedure is the default X error handler. Tk uses it's + * This procedure is the default X error handler. Tk uses it's * own error handler so this call should never be called. * * Results: @@ -347,7 +361,7 @@ DefaultErrorHandler( XErrorEvent* err_evt) { /* - * This call should never be called. Tk replaces + * This call should never be called. Tk replaces * it with its own error handler. */ Tcl_Panic("Warning hit bogus error handler!"); @@ -394,45 +408,45 @@ XGetImage(display, d, x, y, width, height, plane_mask, format) unsigned int height; unsigned long plane_mask; int format; -{ +{ XImage * imagePtr = NULL; Pixmap pixmap = (Pixmap) NULL; Tk_Window win = (Tk_Window) ((MacDrawable *) d)->winPtr; - GC gc; - int depth = 32; - int offset = 0; - int bitmap_pad = 32; - int bytes_per_line = 0; - + GC gc; + int depth = 32; + int offset = 0; + int bitmap_pad = 32; + int bytes_per_line = 0; + if (TkMacOSXGetDrawablePort(d)) { - if (format == ZPixmap) { - if (width > 0 && height > 0) { - /* Tk_GetPixmap fails for zero width or height */ - pixmap = Tk_GetPixmap(display, d, width, height, depth); - } - if (win) { - XGCValues values; - gc = Tk_GetGC(win, 0, &values); - } else { - gc = XCreateGC(display, pixmap, 0, NULL); - } - if (pixmap) { - XCopyArea(display, d, pixmap, gc, x, y, width, height, 0, 0); - } - imagePtr = XCreateImage(display, NULL, depth, format, offset, - (char*)TkMacOSXGetDrawablePort(pixmap), - width, height, bitmap_pad, bytes_per_line); - /* Track Pixmap underlying the XImage in the unused obdata field * - * so that we can treat XImages coming from XGetImage specially. */ - imagePtr->obdata = (XPointer) pixmap; - if (!win) { - XFreeGC(display, gc); - } - } else { - TkpDisplayWarning( - "XGetImage: only ZPixmap types are implemented", - "XGetImage Failure"); - } + if (format == ZPixmap) { + if (width > 0 && height > 0) { + /* Tk_GetPixmap fails for zero width or height */ + pixmap = Tk_GetPixmap(display, d, width, height, depth); + } + if (win) { + XGCValues values; + gc = Tk_GetGC(win, 0, &values); + } else { + gc = XCreateGC(display, pixmap, 0, NULL); + } + if (pixmap) { + XCopyArea(display, d, pixmap, gc, x, y, width, height, 0, 0); + } + imagePtr = XCreateImage(display, NULL, depth, format, offset, + (char*)TkMacOSXGetDrawablePort(pixmap), + width, height, bitmap_pad, bytes_per_line); + /* Track Pixmap underlying the XImage in the unused obdata field * + * so that we can treat XImages coming from XGetImage specially. */ + imagePtr->obdata = (XPointer) pixmap; + if (!win) { + XFreeGC(display, gc); + } + } else { + TkpDisplayWarning( + "XGetImage: only ZPixmap types are implemented", + "XGetImage Failure"); + } } return imagePtr; } @@ -460,17 +474,18 @@ XGetGeometry(display, d, root_return, x_return, y_return, width_return, *width_return = Tk_Width(winPtr); *height_return = Tk_Height(winPtr); *border_width_return = winPtr->changes.border_width; - *depth_return = Tk_Depth(winPtr); + *depth_return = Tk_Depth(winPtr); } else { Rect boundsRect; CGrafPtr destPort = TkMacOSXGetDrawablePort(d); - GetPortBounds(destPort,&boundsRect); + + GetPortBounds(destPort, &boundsRect); *x_return = boundsRect.left; *y_return = boundsRect.top; *width_return = boundsRect.right - boundsRect.left; *height_return = boundsRect.bottom - boundsRect.top; - *border_width_return = 0; - *depth_return = 32; + *border_width_return = 0; + *depth_return = 32; } return 1; } @@ -514,23 +529,23 @@ XSetWMNormalHints( XSizeHints* hints) { /* - * Do nothing. Shouldn't even be called. + * Do nothing. Shouldn't even be called. */ } XSizeHints * -XAllocSizeHints() +XAllocSizeHints(void) { /* - * Always return NULL. Tk code checks to see if NULL + * Always return NULL. Tk code checks to see if NULL * is returned & does nothing if it is. */ - + return NULL; } #endif -XImage * +XImage * XCreateImage( Display* display, Visual* visual, @@ -542,7 +557,7 @@ XCreateImage( unsigned int height, int bitmap_pad, int bytes_per_line) -{ +{ XImage *ximage; display->request++; @@ -658,15 +673,15 @@ XQueryColor( unsigned char r, g, b; XColor *d = def_in_out; - p = d->pixel; - r = (p & 0x00FF0000) >> 16; - g = (p & 0x0000FF00) >> 8; - b = (p & 0x000000FF); - d->red = (r << 8) | r; + p = d->pixel; + r = (p & 0x00FF0000) >> 16; + g = (p & 0x0000FF00) >> 8; + b = (p & 0x000000FF); + d->red = (r << 8) | r; d->green = (g << 8) | g; - d->blue = (b << 8) | b; + d->blue = (b << 8) | b; d->flags = DoRed|DoGreen|DoBlue; - d->pad = 0; + d->pad = 0; } void @@ -682,21 +697,21 @@ XQueryColors( XColor *d = defs_in_out; for (i = 0; i < ncolors; i++, d++) { - p = d->pixel; - r = (p & 0x00FF0000) >> 16; - g = (p & 0x0000FF00) >> 8; - b = (p & 0x000000FF); - d->red = (r << 8) | r; + p = d->pixel; + r = (p & 0x00FF0000) >> 16; + g = (p & 0x0000FF00) >> 8; + b = (p & 0x000000FF); + d->red = (r << 8) | r; d->green = (g << 8) | g; - d->blue = (b << 8) | b; + d->blue = (b << 8) | b; d->flags = DoRed|DoGreen|DoBlue; - d->pad = 0; + d->pad = 0; } } -int +int XQueryTree(display, w, root_return, parent_return, children_return, - nchildren_return) + nchildren_return) Display* display; Window w; Window* root_return; @@ -737,7 +752,7 @@ XRefreshKeyboardMapping( XMappingEvent* x) Debugger(); } -void +void XSetIconName( Display* display, Window w, @@ -749,15 +764,15 @@ XSetIconName( display->request++; } -void +void XForceScreenSaver( Display* display, int mode) { - /* - * This function is just a no-op. It is defined to - * reset the screen saver. However, there is no real - * way to do this on a Mac. Let me know if there is! + /* + * This function is just a no-op. It is defined to + * reset the screen saver. However, there is no real + * way to do this on a Mac. Let me know if there is! */ display->request++; } @@ -784,7 +799,7 @@ XSync (Display *display, Bool flag) * TkGetServerInfo -- * * Given a window, this procedure returns information about - * the window server for that window. This procedure provides + * the window server for that window. This procedure provides * the guts of the "winfo server" command. * * Results: @@ -800,7 +815,7 @@ void TkGetServerInfo( Tcl_Interp *interp, /* The server information is returned in * this interpreter's result. */ - Tk_Window tkwin) /* Token for window; this selects a + Tk_Window tkwin) /* Token for window; this selects a * particular display and server. */ { char buffer[8 + TCL_INTEGER_SPACE * 2]; @@ -810,77 +825,83 @@ TkGetServerInfo( ProtocolRevision(Tk_Display(tkwin))); sprintf(buffer2, " %x", VendorRelease(Tk_Display(tkwin))); Tcl_AppendResult(interp, buffer, ServerVendor(Tk_Display(tkwin)), - buffer2, (char *) NULL); + buffer2, NULL); } /* - * Image stuff + * Image stuff */ -static int +static int TkMacOSXXDestroyImage( XImage *image) { if (image->obdata) - Tk_FreePixmap((Display*)gMacDisplay,(Pixmap)image->obdata); + Tk_FreePixmap((Display*)gMacDisplay,(Pixmap)image->obdata); return 0; } -static unsigned long +static unsigned long TkMacOSXXGetPixel( XImage *image, int x, int y) { - CGrafPtr grafPtr, oldPort; + CGrafPtr destPort, savePort; + Boolean portChanged; RGBColor cPix; unsigned long r, g, b, c; - grafPtr = (CGrafPtr)image->data; - GetPort(&oldPort); - SetPort(grafPtr); - GetCPixel(x,y,&cPix); + + destPort = (CGrafPtr)image->data; + portChanged = QDSwapPort(destPort, &savePort); + GetCPixel(x, y, &cPix); if (image->obdata) { - /* Image from XGetImage, 16 bit color values */ - r = (cPix . red) >> 8; - g = (cPix . green) >> 8; - b = (cPix . blue) >> 8; + /* Image from XGetImage, 16 bit color values */ + r = (cPix . red) >> 8; + g = (cPix . green) >> 8; + b = (cPix . blue) >> 8; } else { - r = cPix . red; - g = cPix . green; - b = cPix . blue; + r = cPix . red; + g = cPix . green; + b = cPix . blue; } c = (r<<16)|(g<<8)|(b); - SetPort(oldPort); + if (portChanged) { + QDSwapPort(savePort, NULL); + } return c; } -static int +static int TkMacOSXXPutPixel( XImage *image, int x, int y, unsigned long pixel) { - CGrafPtr grafPtr, oldPort; + CGrafPtr destPort, savePort; + Boolean portChanged; RGBColor cPix; unsigned long r, g, b; - grafPtr = (CGrafPtr)image->data; - GetPort(&oldPort); - SetPort(grafPtr); + + destPort = (CGrafPtr)image->data; + portChanged = QDSwapPort(destPort, &savePort); r = (pixel & image->red_mask)>>16; g = (pixel & image->green_mask)>>8; b = (pixel & image->blue_mask); if (image->obdata) { - /* Image from XGetImage, 16 bit color values */ - cPix . red = r << 8; - cPix . green = g << 8; - cPix . blue = b << 8; + /* Image from XGetImage, 16 bit color values */ + cPix . red = r << 8; + cPix . green = g << 8; + cPix . blue = b << 8; } else { - cPix . red = r; - cPix . green = g; - cPix . blue = b; + cPix . red = r; + cPix . green = g; + cPix . blue = b; + } + SetCPixel(x, y, &cPix); + if (portChanged) { + QDSwapPort(savePort, NULL); } - SetCPixel(x,y,&cPix); - SetPort(oldPort); return 0; } @@ -896,7 +917,7 @@ TkMacOSXXSubImage( return NULL; } -static int +static int TkMacOSXXAddPixel( XImage *image, long value) @@ -912,7 +933,7 @@ TkMacOSXXAddPixel( * XSetWindowBackgroundPixmap, XSetWindowBorder, XSetWindowBorderPixmap, * XSetWindowBorderWidth, XSetWindowColormap * - * These functions are all no-ops. They all have equivilent + * These functions are all no-ops. They all have equivilent * Tk calls that should always be used instead. * * Results: @@ -933,7 +954,7 @@ XChangeWindowAttributes( { } -void +void XSetWindowBackground( Display *display, Window window, @@ -984,8 +1005,8 @@ XSetWindowColormap( Status XStringListToTextProperty( - char** list, - int count, + char** list, + int count, XTextProperty* text_prop_return) { Debugger(); @@ -993,8 +1014,8 @@ XStringListToTextProperty( } void XSetWMClientMachine( - Display* display, - Window w, + Display* display, + Window w, XTextProperty* text_prop) { Debugger(); |