/* File: MacWindows.h Contains: Window Manager Interfaces Version: QuickTime 7.3 Copyright: (c) 2007 (c) 1997-2002 by Apple Computer, Inc., all rights reserved Bugs?: For bug reports, consult the following page on the World Wide Web: http://developer.apple.com/bugreporter/ */ #ifndef __MACWINDOWS__ #define __MACWINDOWS__ #ifndef __MACTYPES__ #include "MacTypes.h" #endif #ifndef __TEXTCOMMON__ #include "TextCommon.h" #endif #ifndef __MACERRORS__ #include "MacErrors.h" #endif #ifndef __ALIASES__ #include "Aliases.h" #endif #ifndef __APPLEEVENTS__ #include "AppleEvents.h" #endif #ifndef __COLLECTIONS__ #include "Collections.h" #endif #ifndef __MIXEDMODE__ #include "MixedMode.h" #endif #ifndef __QDOFFSCREEN__ #include "QDOffscreen.h" #endif #ifndef __QUICKDRAW__ #include "Quickdraw.h" #endif #ifndef __CFSTRING__ #include "CFString.h" #endif #ifndef __ICONS__ #include "Icons.h" #endif #ifndef __DRAG__ #include "Drag.h" #endif #ifndef __EVENTS__ #include "Events.h" #endif #ifndef __MENUS__ #include "Menus.h" #endif #ifndef __HITOOLBAR__ #include "HIToolbar.h" #endif #if PRAGMA_ONCE #pragma once #endif #ifdef __cplusplus extern "C" { #endif #if PRAGMA_IMPORT #pragma import on #endif #if PRAGMA_STRUCT_ALIGN #pragma options align=mac68k #elif PRAGMA_STRUCT_PACKPUSH #pragma pack(push, 2) #elif PRAGMA_STRUCT_PACK #pragma pack(2) #endif /* */ /* Current documentation for the Mac OS Window Manager is available on the web: */ /* */ /* */ /*--------------------------------------------------------------------------------------*/ /* o Property Types */ /*--------------------------------------------------------------------------------------*/ typedef OSType PropertyCreator; typedef OSType PropertyTag; /*--------------------------------------------------------------------------------------*/ /* o Window Classes */ /*--------------------------------------------------------------------------------------*/ /* * WindowClass * * Summary: * The types of windows provided by the Window Manager. * * Discussion: * The class of a window determines several aspects of the window: * its appearance, its initial window attributes, its initial window * group, and its initial modality. All of these except for the * window's appearance may be changed later using other Window * Manager APIs. */ typedef UInt32 WindowClass; enum { /* * An alert window is used when the application needs the user's * attention immediately. On Mac OS 9 and earlier, a visible alert * window will prevent the user from switching to any other * application. Use kThemeBrushAlertBackgroundActive to draw the * background of alert windows. Alert windows are initially placed in * the modal window group, given a modality of * kWindowModalityAppModal, and given an activation scope of * kWindowActivationScopeAll. Available in Mac OS 8.5 and later. */ kAlertWindowClass = 1, /* * Similar to kAlertWindowClass, but provides a window that is * movable and that allows switching to other applications. Generally * you should use this window class rather than kAlertWindowClass. * Use kThemeBrushAlertBackgroundActive to draw the background of * movable alert windows. Movable alert windows are initially placed * in the modal window group, given a modality of * kWindowModalityAppModal, and given an activation scope of * kWindowActivationScopeAll. Available in Mac OS 8.5 and later. */ kMovableAlertWindowClass = 2, /* * A modal window is used to display a dialog (but not an alert; use * kAlertWindowClass for alerts). On Mac OS 9 and earlier, a visible * modal window will prevent the user from switching to any other * application. Use kThemeBrushDialogBackgroundActive to draw the * background of modal windows. Modal windows are initially placed in * the modal window group, given a modality of * kWindowModalityAppModal, and given an activation scope of * kWindowActivationScopeAll. Available in Mac OS 8.5 and later. */ kModalWindowClass = 3, /* * Similar to kModalWindowClass, but provides a window that is * movable and that allows switching to other applications. Generally * you should use this window class rather than kModalWindowClass. If * you are using CarbonLib 1.3 or later, or Mac OS X, use * kThemeBrushMovableModalBackground to draw the background of * movable modal windows; on earlier versions of CarbonLib, or for * non-Carbon programming, use kThemeBrushDialogBackgroundActive. * Movable modal windows are initially placed in the modal window * group, given a modality of kWindowModalityAppModal, and given an * activation scope of kWindowActivationScopeAll. Available in Mac OS * 8.5 and later. */ kMovableModalWindowClass = 4, /* * A floating window is layered above all application windows except * for alert and modal windows. It is commonly used for palette * windows, inspectors, and other accessory (non-document) windows. * Use kThemeBrushUtilityWindowBackgroundActive or * kThemeBrushDocumentWindowBackground to draw the background of * floating windows. Floating windows are initially placed in the * floating window group, given a modality of kWindowModalityNone, * and given an activation scope of * kWindowActivationScopeIndependent. Available in Mac OS 8.6 and * later. */ kFloatingWindowClass = 5, /* * A document window is used for normal application document windows. * Use kThemeBrushDocumentWindowBackground or your own custom drawing * to draw the background of a document window. Document windows are * initially placed in the document window group, given a modality of * kWindowModalityNone, and given an activation scope of * kWindowActivationScopeAll. Available in Mac OS 8.5 and later. */ kDocumentWindowClass = 6, /* * A utility window is similar to a floating window, but it floats * above the windows of all applications rather than just above the * windows of the application that creates it. Use * kThemeBrushUtilityWindowBackgroundActive or * kThemeBrushDocumentWindowBackground to draw the background of * utility windows. Utility windows are initially placed in the * utility window group, given a modality of kWindowModalityNone, and * given an activation scope of kWindowActivationScopeIndependent. * Available in CarbonLib 1.1 and later, and in Mac OS X. */ kUtilityWindowClass = 8, /* * A help window is used to display help tags. It has no window * frame. Typically you should use the Help Manager to display help * tags, rather than creating a help tag window yourself. Help * windows are initially placed in the help window group, given a * modality of kWindowModalityNone, and given an activation scope of * kWindowActivationScopeNone. Available in CarbonLib 1.1 and later, * and in Mac OS X. */ kHelpWindowClass = 10, /* * A sheet window is used to display a dialog that is attached * directly to its parent window, rather than being a independent * window. A sheet dialog only prevents interaction with its parent * window; the user may still interact with other windows in the same * application. Use kThemeBrushSheetBackgroundOpaque to draw an * opaque background for sheet windows, or * kThemeBrushSheetBackgroundTransparent to draw a transparent * background (the transparent brush is only available in Mac OS X * 10.1 and later). Sheet windows are initially placed in the * document window group, given a modality of kWindowModalityNone, * and given an activation scope of kWindowActivationScopeAll. * Available in CarbonLib 1.3 and later, and in Mac OS X; in * CarbonLib, a sheet window is actually a movable-modal window, * which blocks user interaction with all windows of the application. */ kSheetWindowClass = 11, /* * A toolbar window is used to display a palette of controls. It is * similar to a floating window, and like a floating window is * layered above all application windows except for alert and modal * windows, but is layered beneath floating windows. Use * kThemeBrushToolbarBackground to draw the background of a toolbar * window in Mac OS X or later; CarbonLib does not currently support * kThemeBrushToolbarBackground. Floating windows are initially * placed in the toolbar window group, given a modality of * kWindowModalityNone, and given an activation scope of * kWindowActivationScopeNone. Available in CarbonLib 1.1 and later, * and Mac OS X. */ kToolbarWindowClass = 12, /* * A plain window has a single-pixel window frame. * kThemeBrushDocumentWindowBackground, * kThemeBrushDialogBackgroundActive, and application-specific custom * drawing are all commonly used to draw the background of a plain * window. Plain windows are initially placed in the document window * group, given a modality of kWindowModalityNone, and given an * activation scope of kWindowActivationScopeAll. Available in * CarbonLib 1.2.5 and later, and Mac OS X. */ kPlainWindowClass = 13, /* * An overlay window is a completely transparent window positioned * above all other windows. Overlay windows are intended as a * replacement for the pre-Carbon practice of drawing directly into * the window manager port; by creating a full-screen overlay window * and drawing into it, you can draw over any window in any * application without disturbing the contents of the windows * underneath your drawing. After creating an overlay window, you * should use CGContextClearRect to clear the overlay window's alpha * channel to zero; this ensures the initial transparancy of the * window. You must use CoreGraphics to draw into an overlay window * to preserve the transparency of the window. Overlay windows are * initially placed in the overlay window group, given a modality of * kWindowModalityNone, and given an activation scope of * kWindowActivationScopeNone. Available in Mac OS X. */ kOverlayWindowClass = 14, /* * A sheet alert window is similar to a sheet window, but is intended * to display an alert rather than a dialog. On Mac OS X, the * appearance of a sheet window and a sheet alert window is currently * identical, but in CarbonLib a sheet alert window has a different * appearance from a sheet window. Use * kThemeBrushSheetBackgroundOpaque to draw an opaque background for * sheet alert windows, or kThemeBrushSheetBackgroundTransparent to * draw a transparent background (the transparent brush is only * available in Mac OS X 10.1 and later). Sheet alert windows are * initially placed in the document window group, given a modality of * kWindowModalityNone, and given an activation scope of * kWindowActivationScopeAll. Available in CarbonLib 1.3 and later, * and in Mac OS X 10.1 and later; in CarbonLib, a sheet alert window * is actually a movable alert window, which blocks user interaction * with all windows of the application. */ kSheetAlertWindowClass = 15, /* * A alternate plain window is similar to a plain window but has a * solid black shadow on its right and bottom sides. It is rarely * used in modern Mac OS applications. * kThemeBrushDocumentWindowBackground, * kThemeBrushDialogBackgroundActive, and application-specific custom * drawing are all commonly used to draw the background of an * alternate plain window. Alternate plain windows are initially * placed in the document window group, given a modality of * kWindowModalityNone, and given an activation scope of * kWindowActivationScopeAll. Available in CarbonLib 1.3 and later, * and Mac OS X 10.1 and later. */ kAltPlainWindowClass = 16, /* * A drawer window is used when implementing a drawer user interface, * in which the drawer windo slides out from underneath a document * window. Use kThemeBrushDrawerBackground or * kThemeBrushDocumentWindowBackground to draw the background of * drawer windows. Drawer windows are initially placed in the * document window group, given a modality of kWindowModalityNone, * and given an activation scope of kWindowActivationScopeAll. * Available in Mac OS X 10.2 or later. */ kDrawerWindowClass = 20, /* * Not an actual window class, but a meta-constant that is used with * GetFrontWindowOfClass, FindWindowOfClass, and GetNextWindowOfClass * to indicate that there should be no restriction on the class of * the returned window. Also used with GetWindowGroupOfClass to get * the root window group. */ kAllWindowClasses = (unsigned long)0xFFFFFFFF }; /*--------------------------------------------------------------------------------------*/ /* o Window Attributes */ /*--------------------------------------------------------------------------------------*/ typedef UInt32 WindowAttributes; /* * Summary: * Window attributes */ enum { /* * A constant with value zero; the lack of any attributes. */ kWindowNoAttributes = 0L, /* * This window has a close box. Available for windows of * kDocumentWindowClass, kFloatingWindowClass, and * kUtilityWindowClass. */ kWindowCloseBoxAttribute = (1L << 0), /* * This window changes width when zooming. Available for windows of * kDocumentWindowClass, kFloatingWindowClass, and * kUtilityWindowClass. */ kWindowHorizontalZoomAttribute = (1L << 1), /* * This window changes height when zooming. Available for windows of * kDocumentWindowClass, kFloatingWindowClass, and * kUtilityWindowClass. */ kWindowVerticalZoomAttribute = (1L << 2), /* * This window changes both width and height when zooming. Available * for windows of kDocumentWindowClass, kFloatingWindowClass, and * kUtilityWindowClass. */ kWindowFullZoomAttribute = (kWindowVerticalZoomAttribute | kWindowHorizontalZoomAttribute), /* * This window has a collapse box. Available for windows of * kDocumentWindowClass and, on Mac OS 9, kFloatingWindowClass and * kUtilityWindowClass; not available for windows of * kFloatingWindowClass or kUtilityWindowClass on Mac OS X. */ kWindowCollapseBoxAttribute = (1L << 3), /* * This window can be resized. Available for windows of * kDocumentWindowClass, kMovableModalWindowClass, * kFloatingWindowClass, kUtilityWindowClass, and kSheetWindowClass. */ kWindowResizableAttribute = (1L << 4), /* * This window has a vertical titlebar on the side of the window. * Available for windows of kFloatingWindowClass and * kUtilityWindowClass. */ kWindowSideTitlebarAttribute = (1L << 5), /* * This window has a toolbar button. Available for windows of * kDocumentWindowClass on Mac OS X. */ kWindowToolbarButtonAttribute = (1L << 6), /* * This window uses the Metal appearance. Available for document and * floating window classes on Mac OS X 10.2 and later. Drawers can * also be metal, but dynamically adjust their appearance based on * their parent window's appearance; it is not necessary to specify * this attribute for a metal drawer. */ kWindowMetalAttribute = (1L << 8), /* * This window receives no update events. Available for all windows. */ kWindowNoUpdatesAttribute = (1L << 16), /* * This window receives no activate events. Available for all windows. */ kWindowNoActivatesAttribute = (1L << 17), /* * This window receives mouse events even for areas of the window * that are transparent (have an alpha channel component of zero). * Available for windows of kOverlayWindowClass on Mac OS X 10.0 and * 10.1, and available for all windows on Mac OS X 10.2 and later. */ kWindowOpaqueForEventsAttribute = (1L << 18), /* * This window uses composited drawing. This means that the entire * window is comprised of HIViews, and can be treated thusly. This * attribute must be specified at window creation, and cannot be * changed later with ChangeWindowAttributes. Available on Mac OS X * 10.2 and later. */ kWindowCompositingAttribute = (1L << 19), /* * This window has no shadow. Available for all windows on Mac OS X. * This attribute is automatically given to windows of * kOverlayWindowClass. */ kWindowNoShadowAttribute = (1L << 21), /* * This window is automatically hidden on suspend and shown on * resume. Available for all windows. This attribute is automatically * given to windows of kFloatingWindowClass, kHelpWindowClass, and * kToolbarWindowClass. */ kWindowHideOnSuspendAttribute = (1L << 24), /* * This window has the standard Carbon window event handler * installed. Available for all windows. */ kWindowStandardHandlerAttribute = (1L << 25), /* * This window is automatically hidden during fullscreen mode (when * the menubar is invisible) and shown afterwards. Available for all * windows. This attribute is automatically given to windows of * kUtilityWindowClass. */ kWindowHideOnFullScreenAttribute = (1L << 26), /* * This window is added to the standard Window menu. Available for * windows of kDocumentWindowClass. This attribute is automatically * given to windows of kDocumentWindowClass. */ kWindowInWindowMenuAttribute = (1L << 27), /* * This window supports live resizing. Available for all windows on * Mac OS X. */ kWindowLiveResizeAttribute = (1L << 28), /* * This window never receives mouse events, even in areas that are * opaque. Instead, clicks on the window will be passed through to * windows beneath it. Available for all windows on Mac OS X 10.2 and * later. */ kWindowIgnoreClicksAttribute = (1L << 29), /* * This window will not be repositioned by the default * kEventWindowConstrain handler in response to changes in monitor * size, Dock position, and so on. Available for all windows on Mac * OS X 10.1 and later, and CarbonLib 1.6 and later. */ kWindowNoConstrainAttribute = (unsigned long)((1L << 31)), /* * The minimum set of window attributes commonly used by document * windows. */ kWindowStandardDocumentAttributes = (kWindowCloseBoxAttribute | kWindowFullZoomAttribute | kWindowCollapseBoxAttribute | kWindowResizableAttribute), /* * The minimum set of window attributes commonly used by floating * windows. */ kWindowStandardFloatingAttributes = (kWindowCloseBoxAttribute | kWindowCollapseBoxAttribute) }; /*--------------------------------------------------------------------------------------*/ /* o Window Definition Type */ /*--------------------------------------------------------------------------------------*/ enum { kWindowDefProcType = FOUR_CHAR_CODE('WDEF') }; /*--------------------------------------------------------------------------------------*/ /* o Mac OS 7.5 Window Definition Resource IDs */ /*--------------------------------------------------------------------------------------*/ enum { kStandardWindowDefinition = 0, /* for document windows and dialogs*/ kRoundWindowDefinition = 1, /* old da-style window*/ kFloatingWindowDefinition = 124 /* for floating windows*/ }; /*--------------------------------------------------------------------------------------*/ /* o Variant Codes */ /*--------------------------------------------------------------------------------------*/ enum { /* for use with kStandardWindowDefinition */ kDocumentWindowVariantCode = 0, kModalDialogVariantCode = 1, kPlainDialogVariantCode = 2, kShadowDialogVariantCode = 3, kMovableModalDialogVariantCode = 5, kAlertVariantCode = 7, kMovableAlertVariantCode = 9, /* for use with kFloatingWindowDefinition */ kSideFloaterVariantCode = 8 }; /*--------------------------------------------------------------------------------------*/ /* o DefProc IDs */ /*--------------------------------------------------------------------------------------*/ enum { /* classic ids */ documentProc = 0, dBoxProc = 1, plainDBox = 2, altDBoxProc = 3, noGrowDocProc = 4, movableDBoxProc = 5, zoomDocProc = 8, zoomNoGrow = 12, /* floating window defproc ids */ floatProc = 1985, floatGrowProc = 1987, floatZoomProc = 1989, floatZoomGrowProc = 1991, floatSideProc = 1993, floatSideGrowProc = 1995, floatSideZoomProc = 1997, floatSideZoomGrowProc = 1999 }; #if CALL_NOT_IN_CARBON /* The rDocProc (rounded WDEF, ala calculator) is not supported in Carbon.*/ enum { rDocProc = 16 }; #endif /* CALL_NOT_IN_CARBON */ enum { /* Resource IDs for theme-savvy window defprocs */ kWindowDocumentDefProcResID = 64, kWindowDialogDefProcResID = 65, kWindowUtilityDefProcResID = 66, kWindowUtilitySideTitleDefProcResID = 67, kWindowSheetDefProcResID = 68, kWindowSimpleDefProcResID = 69, kWindowSheetAlertDefProcResID = 70 }; enum { /* Proc IDs for theme-savvy windows */ kWindowDocumentProc = 1024, kWindowGrowDocumentProc = 1025, kWindowVertZoomDocumentProc = 1026, kWindowVertZoomGrowDocumentProc = 1027, kWindowHorizZoomDocumentProc = 1028, kWindowHorizZoomGrowDocumentProc = 1029, kWindowFullZoomDocumentProc = 1030, kWindowFullZoomGrowDocumentProc = 1031 }; enum { /* Proc IDs for theme-savvy dialogs */ kWindowPlainDialogProc = 1040, kWindowShadowDialogProc = 1041, kWindowModalDialogProc = 1042, kWindowMovableModalDialogProc = 1043, kWindowAlertProc = 1044, kWindowMovableAlertProc = 1045 }; enum { /* procIDs available from Mac OS 8.1 (Appearance 1.0.1) forward */ kWindowMovableModalGrowProc = 1046 }; enum { /* Proc IDs for top title bar theme-savvy floating windows */ kWindowFloatProc = 1057, kWindowFloatGrowProc = 1059, kWindowFloatVertZoomProc = 1061, kWindowFloatVertZoomGrowProc = 1063, kWindowFloatHorizZoomProc = 1065, kWindowFloatHorizZoomGrowProc = 1067, kWindowFloatFullZoomProc = 1069, kWindowFloatFullZoomGrowProc = 1071 }; enum { /* Proc IDs for side title bar theme-savvy floating windows */ kWindowFloatSideProc = 1073, kWindowFloatSideGrowProc = 1075, kWindowFloatSideVertZoomProc = 1077, kWindowFloatSideVertZoomGrowProc = 1079, kWindowFloatSideHorizZoomProc = 1081, kWindowFloatSideHorizZoomGrowProc = 1083, kWindowFloatSideFullZoomProc = 1085, kWindowFloatSideFullZoomGrowProc = 1087 }; enum { /* Proc IDs for sheet windows */ kWindowSheetProc = 1088, /* available in Mac OS X and CarbonLib 1.3 */ kWindowSheetAlertProc = 1120 /* available in Mac OS X after 1.0, and CarbonLib 1.3 */ }; /* * Discussion: * Window defproc IDs for simple windows */ enum { /* Proc IDs for simple windows */ /* * A window that has no structure region; the content covers the * entire window. */ kWindowSimpleProc = 1104, /* * A window that has a 1-pixel black frame as its structure. */ kWindowSimpleFrameProc = 1105 }; /*--------------------------------------------------------------------------------------*/ /* o System 7 Window Positioning Constants */ /* */ /* Passed into StandardAlert and used in 'WIND', 'DLOG', and 'ALRT' templates */ /* StandardAlert uses zero to specify the default position. Other calls use zero to */ /* specify "no position". Do not pass these constants to RepositionWindow. Do not */ /* store these constants in the BasicWindowDescription of a 'wind' resource. */ /*--------------------------------------------------------------------------------------*/ enum { kWindowNoPosition = 0x0000, kWindowDefaultPosition = 0x0000, /* used by StandardAlert*/ kWindowCenterMainScreen = 0x280A, kWindowAlertPositionMainScreen = 0x300A, kWindowStaggerMainScreen = 0x380A, kWindowCenterParentWindow = 0xA80A, kWindowAlertPositionParentWindow = 0xB00A, kWindowStaggerParentWindow = 0xB80A, kWindowCenterParentWindowScreen = 0x680A, kWindowAlertPositionParentWindowScreen = 0x700A, kWindowStaggerParentWindowScreen = 0x780A }; /*--------------------------------------------------------------------------------------*/ /* o Window Positioning Methods */ /* */ /* Positioning methods passed to RepositionWindow. */ /* Do not use them in WIND, ALRT, DLOG templates. */ /* Do not confuse these constants with the constants above */ /*--------------------------------------------------------------------------------------*/ /* * WindowPositionMethod * * Summary: * Positioning methods usable with RepositionWindow. * * Discussion: * These constants are for use solely with the RepositionWindow API. * They should not be used in 'WIND', 'ALRT', or 'DLOG' resources. */ typedef UInt32 WindowPositionMethod; enum { /* * Centers the window on the main screen. */ kWindowCenterOnMainScreen = 1, /* * Centers the window on its parent window. */ kWindowCenterOnParentWindow = 2, /* * Centers the window on the screen containing the largest portion of * its parent window. */ kWindowCenterOnParentWindowScreen = 3, /* * Cascades the window on the main screen. */ kWindowCascadeOnMainScreen = 4, /* * Cascades the window on its parent window. */ kWindowCascadeOnParentWindow = 5, /* * Cascades the window on the screen containing the largest portion * of its parent window. */ kWindowCascadeOnParentWindowScreen = 6, /* * Cascades the window on the screen containing the largest portion * of its parent window, starting below and to the right of its * parent window. Available in Mac OS X after version 10.1.x and * CarbonLib after 1.5. */ kWindowCascadeStartAtParentWindowScreen = 10, /* * Puts the window into the alert position on the main screen. */ kWindowAlertPositionOnMainScreen = 7, /* * Puts the window into the alert position on its parent window. */ kWindowAlertPositionOnParentWindow = 8, /* * Puts the window into the alert position on the screen containing * the largest portion of its parent window. */ kWindowAlertPositionOnParentWindowScreen = 9 }; /*--------------------------------------------------------------------------------------*/ /* o GetWindowRegion Types */ /*--------------------------------------------------------------------------------------*/ typedef UInt16 WindowRegionCode; enum { /* Region values to pass into GetWindowRegion & GetWindowBounds. All regions are reported in global coordinates. */ kWindowTitleBarRgn = 0, kWindowTitleTextRgn = 1, kWindowCloseBoxRgn = 2, kWindowZoomBoxRgn = 3, kWindowDragRgn = 5, kWindowGrowRgn = 6, kWindowCollapseBoxRgn = 7, kWindowTitleProxyIconRgn = 8, /* Mac OS 8.5 forward*/ kWindowStructureRgn = 32, kWindowContentRgn = 33, /* Content area of the window; empty when the window is collapsed*/ kWindowUpdateRgn = 34, /* Carbon forward*/ kWindowOpaqueRgn = 35, /* Mac OS X: Area of window considered to be opaque. Only valid for windows with alpha channels.*/ kWindowGlobalPortRgn = 40 /* Carbon forward - bounds of the window's port in global coordinates; not affected by CollapseWindow*/ }; /* GetWindowRegionRec - a pointer to this is passed in WDEF param for kWindowMsgGetRegion*/ struct GetWindowRegionRec { RgnHandle winRgn; WindowRegionCode regionCode; }; typedef struct GetWindowRegionRec GetWindowRegionRec; typedef GetWindowRegionRec * GetWindowRegionPtr; typedef GetWindowRegionRec * GetWindowRegionRecPtr; /*--------------------------------------------------------------------------------------*/ /* o WDEF Message Types */ /*--------------------------------------------------------------------------------------*/ /* SetupWindowProxyDragImageRec - setup the proxy icon drag image Both regions are allocated and disposed by the Window Manager. The GWorld is disposed of by the Window Manager, but the WDEF must allocate it. See Technote on Drag Manager 1.1 additions for more information and sample code for setting up drag images. */ struct SetupWindowProxyDragImageRec { GWorldPtr imageGWorld; /* locked GWorld containing the drag image - output - can be NULL*/ RgnHandle imageRgn; /* image clip region, contains the portion of the image which gets blitted to screen - preallocated output - if imageGWorld is NULL, this is ignored*/ RgnHandle outlineRgn; /* the outline region used on shallow monitors - preallocated output - must always be non-empty*/ }; typedef struct SetupWindowProxyDragImageRec SetupWindowProxyDragImageRec; /* MeasureWindowTitleRec - a pointer to this is passed in WDEF param for kWindowMsgMeasureTitle*/ struct MeasureWindowTitleRec { /* output parameters (filled in by the WDEF)*/ SInt16 fullTitleWidth; /* text + proxy icon width*/ SInt16 titleTextWidth; /* text width*/ }; typedef struct MeasureWindowTitleRec MeasureWindowTitleRec; typedef MeasureWindowTitleRec * MeasureWindowTitleRecPtr; /* GetGrowImageRegionRec - generate a region to be xored during GrowWindow and ResizeWindow. This is passed along with a kWindowMsgGetGrowImageRegion message. On input, the growRect parameter is the window's new bounds in global coordinates. The growImageRegion parameter will be allocated and disposed automatically; the window definition should alter the region appropriately. */ struct GetGrowImageRegionRec { Rect growRect; RgnHandle growImageRegion; }; typedef struct GetGrowImageRegionRec GetGrowImageRegionRec; /*--------------------------------------------------------------------------------------*/ /* o Standard Window Kinds */ /*--------------------------------------------------------------------------------------*/ enum { dialogKind = 2, userKind = 8, kDialogWindowKind = 2, kApplicationWindowKind = 8 }; /*--------------------------------------------------------------------------------------*/ /* o FindWindow Result Codes */ /*--------------------------------------------------------------------------------------*/ typedef SInt16 WindowPartCode; enum { inDesk = 0, inNoWindow = 0, inMenuBar = 1, inSysWindow = 2, inContent = 3, inDrag = 4, inGrow = 5, inGoAway = 6, inZoomIn = 7, inZoomOut = 8, inCollapseBox = 11, /* Mac OS 8.0 forward*/ inProxyIcon = 12, /* Mac OS 8.5 forward*/ inToolbarButton = 13, /* Mac OS X forward*/ inStructure = 15 /* Mac OS X 10.1 forward*/ }; /*--------------------------------------------------------------------------------------*/ /* o Window Definition Hit Test Result Codes */ /*--------------------------------------------------------------------------------------*/ typedef SInt16 WindowDefPartCode; enum { wNoHit = 0, wInContent = 1, wInDrag = 2, wInGrow = 3, wInGoAway = 4, wInZoomIn = 5, wInZoomOut = 6, wInCollapseBox = 9, /* Mac OS 8.0 forward*/ wInProxyIcon = 10, /* Mac OS 8.5 forward*/ wInToolbarButton = 11, /* Mac OS X forward*/ wInStructure = 13 /* Mac OS X 10.1 forward*/ }; /*--------------------------------------------------------------------------------------*/ /* o Window Definition Messages */ /*--------------------------------------------------------------------------------------*/ enum { kWindowMsgDraw = 0, kWindowMsgHitTest = 1, kWindowMsgCalculateShape = 2, kWindowMsgInitialize = 3, kWindowMsgCleanUp = 4, kWindowMsgDrawGrowOutline = 5, kWindowMsgDrawGrowBox = 6 }; /* Messages available from Mac OS 8.0 forward*/ enum { kWindowMsgGetFeatures = 7, kWindowMsgGetRegion = 8 }; /* Messages available from Mac OS 8.5 forward*/ enum { kWindowMsgDragHilite = 9, /* parameter boolean indicating on or off*/ kWindowMsgModified = 10, /* parameter boolean indicating saved (false) or modified (true)*/ kWindowMsgDrawInCurrentPort = 11, /* same as kWindowMsgDraw, but must draw in current port*/ kWindowMsgSetupProxyDragImage = 12, /* parameter pointer to SetupWindowProxyDragImageRec*/ kWindowMsgStateChanged = 13, /* something about the window's state has changed*/ kWindowMsgMeasureTitle = 14 /* measure and return the ideal title width*/ }; /* Messages only available in Carbon*/ enum { kWindowMsgGetGrowImageRegion = 19 /* get region to xor during grow/resize. parameter pointer to GetGrowImageRegionRec.*/ }; /* old names*/ enum { wDraw = 0, wHit = 1, wCalcRgns = 2, wNew = 3, wDispose = 4, wGrow = 5, wDrawGIcon = 6 }; /*--------------------------------------------------------------------------------------*/ /* o State-changed Flags for kWindowMsgStateChanged */ /*--------------------------------------------------------------------------------------*/ enum { kWindowStateTitleChanged = (1 << 0) }; /*--------------------------------------------------------------------------------------*/ /* o Window Feature Bits */ /*--------------------------------------------------------------------------------------*/ enum { kWindowCanGrow = (1 << 0), kWindowCanZoom = (1 << 1), kWindowCanCollapse = (1 << 2), kWindowIsModal = (1 << 3), kWindowCanGetWindowRegion = (1 << 4), kWindowIsAlert = (1 << 5), kWindowHasTitleBar = (1 << 6) }; /* Feature bits available from Mac OS 8.5 forward*/ enum { kWindowSupportsDragHilite = (1 << 7), /* window definition supports kWindowMsgDragHilite*/ kWindowSupportsModifiedBit = (1 << 8), /* window definition supports kWindowMsgModified*/ kWindowCanDrawInCurrentPort = (1 << 9), /* window definition supports kWindowMsgDrawInCurrentPort*/ kWindowCanSetupProxyDragImage = (1 << 10), /* window definition supports kWindowMsgSetupProxyDragImage*/ kWindowCanMeasureTitle = (1 << 11), /* window definition supports kWindowMsgMeasureTitle*/ kWindowWantsDisposeAtProcessDeath = (1 << 12), /* window definition wants a Dispose message for windows still extant during ExitToShell*/ kWindowSupportsGetGrowImageRegion = (1 << 13), /* window definition will calculate the grow image region manually.*/ kWindowDefSupportsColorGrafPort = 0x40000002 }; /* Feature bits for post MacOS 10.0*/ enum { kWindowIsOpaque = (1 << 14) /* Window doesn't need an alpha channel. Saves memory.*/ }; /* THIS CONSTANT IS GOING AWAY. IT IS NAMED INCORRECTLY. USE THE GETGROWIMAGE CONSTANT ABOVE INSTEAD. DO YOU HEAR ME! AM I YELLING LOUD ENOUGH?! */ enum { kWindowSupportsSetGrowImageRegion = (1 << 13) }; /*--------------------------------------------------------------------------------------*/ /* o Desktop Pattern Resource ID */ /*--------------------------------------------------------------------------------------*/ enum { deskPatID = 16 }; /*--------------------------------------------------------------------------------------*/ /* o Window Color Part Codes */ /*--------------------------------------------------------------------------------------*/ enum { wContentColor = 0, wFrameColor = 1, wTextColor = 2, wHiliteColor = 3, wTitleBarColor = 4 }; /*--------------------------------------------------------------------------------------*/ /* o Region Dragging Constants */ /*--------------------------------------------------------------------------------------*/ enum { kMouseUpOutOfSlop = (long)0x80008000 }; /*--------------------------------------------------------------------------------------*/ /* o Window Color Table */ /*--------------------------------------------------------------------------------------*/ struct WinCTab { long wCSeed; /* reserved */ short wCReserved; /* reserved */ short ctSize; /* usually 4 for windows */ ColorSpec ctTable[5]; }; typedef struct WinCTab WinCTab; typedef WinCTab * WCTabPtr; typedef WCTabPtr * WCTabHandle; /*--------------------------------------------------------------------------------------*/ /* o WindowRecord */ /*--------------------------------------------------------------------------------------*/ #if !OPAQUE_TOOLBOX_STRUCTS typedef struct WindowRecord WindowRecord; typedef WindowRecord * WindowPeek; struct WindowRecord { GrafPort port; /* in Carbon use GetWindowPort*/ short windowKind; /* in Carbon use Get/SetWindowKind*/ Boolean visible; /* in Carbon use Hide/ShowWindow, ShowHide, IsWindowVisible*/ Boolean hilited; /* in Carbon use HiliteWindow, IsWindowHilited*/ Boolean goAwayFlag; /* in Carbon use ChangeWindowAttributes*/ Boolean spareFlag; /* in Carbon use ChangeWindowAttributes*/ RgnHandle strucRgn; /* in Carbon use GetWindowRegion*/ RgnHandle contRgn; /* in Carbon use GetWindowRegion*/ RgnHandle updateRgn; /* in Carbon use GetWindowRegion*/ Handle windowDefProc; /* not supported in Carbon */ Handle dataHandle; /* not supported in Carbon */ StringHandle titleHandle; /* in Carbon use Get/SetWTitle */ short titleWidth; /* in Carbon use GetWindowRegion */ Handle controlList; /* in Carbon use GetRootControl */ WindowPeek nextWindow; /* in Carbon use GetNextWindow */ PicHandle windowPic; /* in Carbon use Get/SetWindowPic */ long refCon; /* in Carbon use Get/SetWRefCon*/ }; #endif /* !OPAQUE_TOOLBOX_STRUCTS */ /*--------------------------------------------------------------------------------------*/ /* o Color WindowRecord */ /*--------------------------------------------------------------------------------------*/ #if !OPAQUE_TOOLBOX_STRUCTS typedef struct CWindowRecord CWindowRecord; typedef CWindowRecord * CWindowPeek; struct CWindowRecord { CGrafPort port; /* in Carbon use GetWindowPort*/ short windowKind; /* in Carbon use Get/SetWindowKind */ Boolean visible; /* in Carbon use Hide/ShowWindow, ShowHide, IsWindowVisible */ Boolean hilited; /* in Carbon use HiliteWindow, IsWindowHilited*/ Boolean goAwayFlag; /* in Carbon use ChangeWindowAttributes */ Boolean spareFlag; /* in Carbon use ChangeWindowAttributes */ RgnHandle strucRgn; /* in Carbon use GetWindowRegion */ RgnHandle contRgn; /* in Carbon use GetWindowRegion */ RgnHandle updateRgn; /* in Carbon use GetWindowRegion */ Handle windowDefProc; /* not supported in Carbon */ Handle dataHandle; /* not supported in Carbon */ StringHandle titleHandle; /* in Carbon use Get/SetWTitle */ short titleWidth; /* in Carbon use GetWindowRegion */ Handle controlList; /* in Carbon use GetRootControl */ CWindowPeek nextWindow; /* in Carbon use GetNextWindow */ PicHandle windowPic; /* in Carbon use Get/SetWindowPic */ long refCon; /* in Carbon use Get/SetWRefCon */ }; #endif /* !OPAQUE_TOOLBOX_STRUCTS */ /*--------------------------------------------------------------------------------------*/ /* o AuxWinHandle */ /*--------------------------------------------------------------------------------------*/ #if !OPAQUE_TOOLBOX_STRUCTS typedef struct AuxWinRec AuxWinRec; typedef AuxWinRec * AuxWinPtr; typedef AuxWinPtr * AuxWinHandle; struct AuxWinRec { AuxWinHandle awNext; /* handle to next AuxWinRec, not supported in Carbon*/ WindowRef awOwner; /* not supported in Carbon*/ CTabHandle awCTable; /* color table for this window, use Get/SetWindowContentColor in Carbon*/ Handle reserved; /* not supported in Carbon*/ long awFlags; /* reserved for expansion, not supported in Carbon*/ CTabHandle awReserved; /* reserved for expansion, not supported in Carbon*/ long awRefCon; /* user constant, in Carbon use Get/SetWindowProperty if you need more refCons*/ }; #endif /* !OPAQUE_TOOLBOX_STRUCTS */ /*--------------------------------------------------------------------------------------*/ /* o BasicWindowDescription */ /* */ /* Contains statically-sized basic attributes of the window, for storage in a */ /* collection item. */ /*--------------------------------------------------------------------------------------*/ /* constants for the version field*/ enum { kWindowDefinitionVersionOne = 1, kWindowDefinitionVersionTwo = 2 }; /* constants for the stateflags bit field */ enum { kWindowIsCollapsedState = (1 << 0L) }; struct BasicWindowDescription { UInt32 descriptionSize; /* sizeof(BasicWindowDescription)*/ Rect windowContentRect; /* location on screen*/ Rect windowZoomRect; /* location on screen when zoomed out*/ UInt32 windowRefCon; /* the refcon - __avoid saving stale pointers here__ */ UInt32 windowStateFlags; /* window state bit flags*/ WindowPositionMethod windowPositionMethod; /* method last used by RepositionWindow to position the window (if any)*/ UInt32 windowDefinitionVersion; union { struct { SInt16 windowDefProc; /* defProc and variant*/ Boolean windowHasCloseBox; } versionOne; struct { WindowClass windowClass; /* the class*/ WindowAttributes windowAttributes; /* the attributes*/ } versionTwo; } windowDefinition; }; typedef struct BasicWindowDescription BasicWindowDescription; /* the window manager stores the default collection items using these IDs*/ enum { kStoredWindowSystemTag = FOUR_CHAR_CODE('appl'), /* Only Apple collection items will be of this tag*/ kStoredBasicWindowDescriptionID = FOUR_CHAR_CODE('sbas'), /* BasicWindowDescription*/ kStoredWindowPascalTitleID = FOUR_CHAR_CODE('s255') /* pascal title string*/ }; /*--------------------------------------------------------------------------------------*/ /* o Window Class Ordering */ /* */ /* Special cases for the "behind" parameter in window creation calls. */ /*--------------------------------------------------------------------------------------*/ #define kFirstWindowOfClass ((WindowRef)(-1)) #define kLastWindowOfClass ((WindowRef)0) /*--------------------------------------------------------------------------------------*/ /* o Zoom Information Handle */ /*--------------------------------------------------------------------------------------*/ struct WStateData { Rect userState; /*user zoom state*/ Rect stdState; /*standard zoom state*/ }; typedef struct WStateData WStateData; typedef WStateData * WStateDataPtr; typedef WStateDataPtr * WStateDataHandle; /*--------------------------------------------------------------------------------------*/ /* o MixedMode & ProcPtrs */ /*--------------------------------------------------------------------------------------*/ typedef CALLBACK_API( long , WindowDefProcPtr )(short varCode, WindowRef window, short message, long param); typedef CALLBACK_API_REGISTER68K( void , DeskHookProcPtr, (Boolean mouseClick, EventRecord *theEvent) ); typedef CALLBACK_API( OSStatus , WindowPaintProcPtr )(GDHandle device, GrafPtr qdContext, WindowRef window, RgnHandle inClientPaintRgn, RgnHandle outSystemPaintRgn, void *refCon); typedef STACK_UPP_TYPE(WindowDefProcPtr) WindowDefUPP; typedef REGISTER_UPP_TYPE(DeskHookProcPtr) DeskHookUPP; typedef STACK_UPP_TYPE(WindowPaintProcPtr) WindowPaintUPP; /* * NewWindowDefUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( WindowDefUPP ) NewWindowDefUPP(WindowDefProcPtr userRoutine); #if !OPAQUE_UPP_TYPES enum { uppWindowDefProcInfo = 0x00003BB0 }; /* pascal 4_bytes Func(2_bytes, 4_bytes, 2_bytes, 4_bytes) */ #ifdef __cplusplus inline DEFINE_API_C(WindowDefUPP) NewWindowDefUPP(WindowDefProcPtr userRoutine) { return (WindowDefUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppWindowDefProcInfo, GetCurrentArchitecture()); } #else #define NewWindowDefUPP(userRoutine) (WindowDefUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppWindowDefProcInfo, GetCurrentArchitecture()) #endif #endif #if CALL_NOT_IN_CARBON /* * NewDeskHookUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( DeskHookUPP ) NewDeskHookUPP(DeskHookProcPtr userRoutine); #if !OPAQUE_UPP_TYPES enum { uppDeskHookProcInfo = 0x00130802 }; /* register no_return_value Func(1_byte:D0, 4_bytes:A0) */ #ifdef __cplusplus inline DEFINE_API_C(DeskHookUPP) NewDeskHookUPP(DeskHookProcPtr userRoutine) { return (DeskHookUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppDeskHookProcInfo, GetCurrentArchitecture()); } #else #define NewDeskHookUPP(userRoutine) (DeskHookUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppDeskHookProcInfo, GetCurrentArchitecture()) #endif #endif #endif /* CALL_NOT_IN_CARBON */ /* * NewWindowPaintUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( WindowPaintUPP ) NewWindowPaintUPP(WindowPaintProcPtr userRoutine); #if !OPAQUE_UPP_TYPES enum { uppWindowPaintProcInfo = 0x0003FFF0 }; /* pascal 4_bytes Func(4_bytes, 4_bytes, 4_bytes, 4_bytes, 4_bytes, 4_bytes) */ #ifdef __cplusplus inline DEFINE_API_C(WindowPaintUPP) NewWindowPaintUPP(WindowPaintProcPtr userRoutine) { return (WindowPaintUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppWindowPaintProcInfo, GetCurrentArchitecture()); } #else #define NewWindowPaintUPP(userRoutine) (WindowPaintUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppWindowPaintProcInfo, GetCurrentArchitecture()) #endif #endif /* * DisposeWindowDefUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( void ) DisposeWindowDefUPP(WindowDefUPP userUPP); #if !OPAQUE_UPP_TYPES #ifdef __cplusplus inline DEFINE_API_C(void) DisposeWindowDefUPP(WindowDefUPP userUPP) { DisposeRoutineDescriptor((UniversalProcPtr)userUPP); } #else #define DisposeWindowDefUPP(userUPP) DisposeRoutineDescriptor(userUPP) #endif #endif #if CALL_NOT_IN_CARBON /* * DisposeDeskHookUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( void ) DisposeDeskHookUPP(DeskHookUPP userUPP); #if !OPAQUE_UPP_TYPES #ifdef __cplusplus inline DEFINE_API_C(void) DisposeDeskHookUPP(DeskHookUPP userUPP) { DisposeRoutineDescriptor((UniversalProcPtr)userUPP); } #else #define DisposeDeskHookUPP(userUPP) DisposeRoutineDescriptor(userUPP) #endif #endif #endif /* CALL_NOT_IN_CARBON */ /* * DisposeWindowPaintUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( void ) DisposeWindowPaintUPP(WindowPaintUPP userUPP); #if !OPAQUE_UPP_TYPES #ifdef __cplusplus inline DEFINE_API_C(void) DisposeWindowPaintUPP(WindowPaintUPP userUPP) { DisposeRoutineDescriptor((UniversalProcPtr)userUPP); } #else #define DisposeWindowPaintUPP(userUPP) DisposeRoutineDescriptor(userUPP) #endif #endif /* * InvokeWindowDefUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( long ) InvokeWindowDefUPP( short varCode, WindowRef window, short message, long param, WindowDefUPP userUPP); #if !OPAQUE_UPP_TYPES #ifdef __cplusplus inline DEFINE_API_C(long) InvokeWindowDefUPP(short varCode, WindowRef window, short message, long param, WindowDefUPP userUPP) { return (long)CALL_FOUR_PARAMETER_UPP(userUPP, uppWindowDefProcInfo, varCode, window, message, param); } #else #define InvokeWindowDefUPP(varCode, window, message, param, userUPP) (long)CALL_FOUR_PARAMETER_UPP((userUPP), uppWindowDefProcInfo, (varCode), (window), (message), (param)) #endif #endif #if CALL_NOT_IN_CARBON /* * InvokeDeskHookUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: not available * Mac OS X: not available */ #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM #pragma parameter InvokeDeskHookUPP(__D0, __A0, __A1) #endif EXTERN_API_C( void ) InvokeDeskHookUPP( Boolean mouseClick, EventRecord * theEvent, DeskHookUPP userUPP) ONEWORDINLINE(0x4E91); #if !OPAQUE_UPP_TYPES && (!TARGET_OS_MAC || !TARGET_CPU_68K || TARGET_RT_MAC_CFM) #ifdef __cplusplus inline DEFINE_API_C(void) InvokeDeskHookUPP(Boolean mouseClick, EventRecord * theEvent, DeskHookUPP userUPP) { CALL_TWO_PARAMETER_UPP(userUPP, uppDeskHookProcInfo, mouseClick, theEvent); } #else #define InvokeDeskHookUPP(mouseClick, theEvent, userUPP) CALL_TWO_PARAMETER_UPP((userUPP), uppDeskHookProcInfo, (mouseClick), (theEvent)) #endif #endif #endif /* CALL_NOT_IN_CARBON */ /* * InvokeWindowPaintUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( OSStatus ) InvokeWindowPaintUPP( GDHandle device, GrafPtr qdContext, WindowRef window, RgnHandle inClientPaintRgn, RgnHandle outSystemPaintRgn, void * refCon, WindowPaintUPP userUPP); #if !OPAQUE_UPP_TYPES #ifdef __cplusplus inline DEFINE_API_C(OSStatus) InvokeWindowPaintUPP(GDHandle device, GrafPtr qdContext, WindowRef window, RgnHandle inClientPaintRgn, RgnHandle outSystemPaintRgn, void * refCon, WindowPaintUPP userUPP) { return (OSStatus)CALL_SIX_PARAMETER_UPP(userUPP, uppWindowPaintProcInfo, device, qdContext, window, inClientPaintRgn, outSystemPaintRgn, refCon); } #else #define InvokeWindowPaintUPP(device, qdContext, window, inClientPaintRgn, outSystemPaintRgn, refCon, userUPP) (OSStatus)CALL_SIX_PARAMETER_UPP((userUPP), uppWindowPaintProcInfo, (device), (qdContext), (window), (inClientPaintRgn), (outSystemPaintRgn), (refCon)) #endif #endif #if CALL_NOT_IN_CARBON || OLDROUTINENAMES /* support for pre-Carbon UPP routines: New...Proc and Call...Proc */ #define NewWindowDefProc(userRoutine) NewWindowDefUPP(userRoutine) #define NewDeskHookProc(userRoutine) NewDeskHookUPP(userRoutine) #define NewWindowPaintProc(userRoutine) NewWindowPaintUPP(userRoutine) #define CallWindowDefProc(userRoutine, varCode, window, message, param) InvokeWindowDefUPP(varCode, window, message, param, userRoutine) #define CallDeskHookProc(userRoutine, mouseClick, theEvent) InvokeDeskHookUPP(mouseClick, theEvent, userRoutine) #define CallWindowPaintProc(userRoutine, device, qdContext, window, inClientPaintRgn, outSystemPaintRgn, refCon) InvokeWindowPaintUPP(device, qdContext, window, inClientPaintRgn, outSystemPaintRgn, refCon, userRoutine) #endif /* CALL_NOT_IN_CARBON */ /*--------------------------------------------------------------------------------------*/ /* o Window Definition Spec. Used in Carbon to specify the code that defines a window. */ /*--------------------------------------------------------------------------------------*/ enum { kWindowDefProcPtr = 0, /* raw proc-ptr based access*/ kWindowDefObjectClass = 1, /* event-based definition (Carbon 1.1 or later)*/ kWindowDefProcID = 2, /* explicit proc ID; overrides the window class default proc ID*/ kWindowDefHIView = 3 /* this window uses a view as its frame, not a WDEF*/ }; typedef UInt32 WindowDefType; struct WindowDefSpec { WindowDefType defType; union { WindowDefUPP defProc; void * classRef; short procID; void * rootView; /* ControlRef*/ } u; }; typedef struct WindowDefSpec WindowDefSpec; typedef WindowDefSpec * WindowDefSpecPtr; /*--------------------------------------------------------------------------------------*/ /* o Window Creation & Persistence */ /*--------------------------------------------------------------------------------------*/ /* * GetNewCWindow() * * Availability: * Non-Carbon CFM: in InterfaceLib 7.1 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( WindowRef ) GetNewCWindow( short windowID, void * wStorage, WindowRef behind) ONEWORDINLINE(0xAA46); /* * NewWindow() * * Availability: * Non-Carbon CFM: in InterfaceLib 7.1 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( WindowRef ) NewWindow( void * wStorage, const Rect * boundsRect, ConstStr255Param title, Boolean visible, short theProc, WindowRef behind, Boolean goAwayFlag, long refCon) ONEWORDINLINE(0xA913); /* * GetNewWindow() * * Availability: * Non-Carbon CFM: in InterfaceLib 7.1 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( WindowRef ) GetNewWindow( short windowID, void * wStorage, WindowRef behind) ONEWORDINLINE(0xA9BD); /* * NewCWindow() * * Availability: * Non-Carbon CFM: in InterfaceLib 7.1 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( WindowRef ) NewCWindow( void * wStorage, const Rect * boundsRect, ConstStr255Param title, Boolean visible, short procID, WindowRef behind, Boolean goAwayFlag, long refCon) ONEWORDINLINE(0xAA45); /* * DisposeWindow() * * Availability: * Non-Carbon CFM: in InterfaceLib 7.1 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( void ) DisposeWindow(WindowRef window) ONEWORDINLINE(0xA914); #if CALL_NOT_IN_CARBON /* * [Mac]CloseWindow() * * Availability: * Non-Carbon CFM: in InterfaceLib 7.1 and later * CarbonLib: not available * Mac OS X: not available */ #if TARGET_OS_MAC #define MacCloseWindow CloseWindow #endif EXTERN_API( void ) MacCloseWindow(WindowRef window) ONEWORDINLINE(0xA92D); /* Routines available from Mac OS 8.5 forward or from Mac OS 8.1 forward when linking to CarbonLib 1.0 forward */ #endif /* CALL_NOT_IN_CARBON */ /* * CreateNewWindow() * * Availability: * Non-Carbon CFM: in WindowsLib 8.5 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) CreateNewWindow( WindowClass windowClass, WindowAttributes attributes, const Rect * contentBounds, WindowRef * outWindow); /* Routines available from Mac OS 8.5 forward*/ /* Create a window from a 'wind' resource*/ /* * CreateWindowFromResource() * * Availability: * Non-Carbon CFM: in WindowsLib 8.5 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) CreateWindowFromResource( SInt16 resID, WindowRef * outWindow); /* window persistence*/ /* * StoreWindowIntoCollection() * * Availability: * Non-Carbon CFM: in WindowsLib 8.5 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) StoreWindowIntoCollection( WindowRef window, Collection collection); /* * CreateWindowFromCollection() * * Availability: * Non-Carbon CFM: in WindowsLib 8.5 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) CreateWindowFromCollection( Collection collection, WindowRef * outWindow); /* window refcounting*/ /* * GetWindowOwnerCount() * * Availability: * Non-Carbon CFM: in WindowsLib 8.5 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) GetWindowOwnerCount( WindowRef window, UInt32 * outCount); /* * CloneWindow() * * Availability: * Non-Carbon CFM: in WindowsLib 8.5 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) CloneWindow(WindowRef window); /* * GetWindowRetainCount() * * Summary: * Returns the retain count of a window. * * Discussion: * This API is equivalent to GetWindowOwnerCount. For consistency * with CoreFoundation and Carbon Events, it is preferred over * GetWindowOwnerCount. Both APIs will continue to be supported. * * Parameters: * * inWindow: * The window whose retain count to retrieve. * * Availability: * Non-Carbon CFM: not available * CarbonLib: in CarbonLib 1.1 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( ItemCount ) GetWindowRetainCount(WindowRef inWindow); /* * RetainWindow() * * Summary: * Increments the retain count of a window. * * Discussion: * This API is equivalent to CloneWindow. For consistency with * CoreFoundation and Carbon Events, it is preferred over * CloneWindow. Both APIs will continue to be supported. * * Parameters: * * inWindow: * The window whose retain count to increment. * * Availability: * Non-Carbon CFM: not available * CarbonLib: in CarbonLib 1.1 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) RetainWindow(WindowRef inWindow); /* * ReleaseWindow() * * Summary: * Decrements the retain count of a window, and destroys the window * if the retain count falls to zero. * * Discussion: * This API is equivalent to DisposeWindow. For consistency with * CoreFoundation and Carbon Events, it is preferred over * DisposeWindow. Both APIs will continue to be supported. * * Parameters: * * inWindow: * The window whose retain count to decrement. * * Availability: * Non-Carbon CFM: not available * CarbonLib: in CarbonLib 1.1 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) ReleaseWindow(WindowRef inWindow); /*--------------------------------------------------------------------------------------*/ /* o Custom Windows */ /*--------------------------------------------------------------------------------------*/ /* Routines available from Mac OS 8.1 forward when linking to CarbonLib 1.0 forward*/ /* * CreateCustomWindow() * * Availability: * Non-Carbon CFM: not available * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) CreateCustomWindow( const WindowDefSpec * def, WindowClass windowClass, WindowAttributes attributes, const Rect * contentBounds, WindowRef * outWindow); /* * ReshapeCustomWindow() * * Availability: * Non-Carbon CFM: not available * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) ReshapeCustomWindow(WindowRef window); /* * RegisterWindowDefinition() * * Summary: * Registers or unregisters a binding between a resource ID and a * window definition function. * * Discussion: * In the Mac OS 8.x Window Manager, a 'WIND' resource can contain * an embedded WDEF procID that is used by the Window Manager as the * resource ID of an 'WDEF' resource to lay out and draw the window. * The 'WDEF' resource is loaded by the Window Manager when you load * the menu with GetNewWindow. Since WDEFs can no longer be packaged * as code resources on Carbon, the procID can no longer refer * directly to a WDEF resource. However, using * RegisterWindowDefinition you can instead specify a * UniversalProcPtr pointing to code in your application code * fragment. RegisterWindowDefinition is available when linking to * CarbonLib 1.1 forward. * * Parameters: * * inResID: * A WDEF proc ID, as used in a 'WIND' resource. * * inDefSpec: * Specifies the WindowDefUPP that should be used for windows with * the given WDEF proc ID. Passing NULL allows you to unregister * the window definition that had been associated with the given * WDEF proc ID. * * Availability: * Non-Carbon CFM: not available * CarbonLib: in CarbonLib 1.1 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) RegisterWindowDefinition( SInt16 inResID, const WindowDefSpec * inDefSpec); /*--------------------------------------------------------------------------------------*/ /* o Window part tracking */ /*--------------------------------------------------------------------------------------*/ /* Routines available from Mac OS 8.5 forward (or from Mac OS 8.6 forward when linking to CarbonLib 1.1 forward) */ /* * GetWindowWidgetHilite() * * Availability: * Non-Carbon CFM: in WindowsLib 8.5 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) GetWindowWidgetHilite( WindowRef inWindow, WindowDefPartCode * outHilite); /*--------------------------------------------------------------------------------------*/ /* o Window Metainformation Accessors */ /*--------------------------------------------------------------------------------------*/ /* * IsValidWindowClass() * * Summary: * Indicates whether a window class is supported by the Window * Manager. * * Parameters: * * inClass: * The window class. * * Availability: * Non-Carbon CFM: not available * CarbonLib: in CarbonLib 1.5 and later * Mac OS X: in version 10.1 and later */ EXTERN_API_C( Boolean ) IsValidWindowClass(WindowClass inClass); /* * GetAvailableWindowAttributes() * * Summary: * Returns the window attributes that are valid for a window class. * * Discussion: * This API is useful because some window classes support different * attributes on different platforms (for example, floating windows * can have collapse boxes on 9, but not on X), and the Window * Manager will return an error if you attempt to create a window * with attributes that aren't supported for the requested window * class. You can use this API to remove attributes that are not * supported by the current platform before calling CreateNewWindow. * * Parameters: * * inClass: * The window class. * * Result: * The window attributes that are supported for the specified window * class. * * Availability: * Non-Carbon CFM: not available * CarbonLib: in CarbonLib 1.5 and later * Mac OS X: in version 10.1 and later */ EXTERN_API_C( WindowAttributes ) GetAvailableWindowAttributes(WindowClass inClass); /* Routines available from Mac OS 8.5 forward or from Mac OS 8.1 forward when linking to CarbonLib 1.0 forward */ /* * GetWindowClass() * * Availability: * Non-Carbon CFM: in WindowsLib 8.5 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) GetWindowClass( WindowRef window, WindowClass * outClass); /* * GetWindowAttributes() * * Availability: * Non-Carbon CFM: in WindowsLib 8.5 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) GetWindowAttributes( WindowRef window, WindowAttributes * outAttributes); /* Routines available from Mac OS 9.0 forward or from Mac OS 8.1 forward when linking to CarbonLib 1.0 forward */ /* * ChangeWindowAttributes() * * Availability: * Non-Carbon CFM: not available * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) ChangeWindowAttributes( WindowRef window, WindowAttributes setTheseAttributes, WindowAttributes clearTheseAttributes); /* WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING SetWindowClass will disappear in the near future. Instead of SetWindowClass, you should use SetWindowGroup to move a window into the group of the desired class. This API is very dangerous in that is actually does change the class of the window, but class was meant to be an immutable property of the window. At the very least, this API will be modified to only change the layer of the window to match the layer that the specified class normally lives in. Consider yourself warned! WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING */ /* * SetWindowClass() * * Summary: * Changes the window class of a window. * * Discussion: * SetWindowClass changes the class of a window. It also changes the * window's z-order so that it is grouped with other windows of the * same class. It does not change the visual appearance of the * window. In CarbonLib, SetWindowClass may not be used to change a * non-utility window to have utility window class, or to make a * utility window have non-utility class. SetWindowClass is * available from CarbonLib 1.1 forward. * * Parameters: * * inWindow: * The window whose class to change. * * inWindowClass: * The new window class. * * Availability: * Non-Carbon CFM: not available * CarbonLib: in CarbonLib 1.1 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) SetWindowClass( WindowRef inWindow, WindowClass inWindowClass); /*--------------------------------------------------------------------------------------*/ /* o Window Modality */ /*--------------------------------------------------------------------------------------*/ /* * WindowModality * */ typedef UInt32 WindowModality; enum { /* * A window does not prevent interaction with any other window in the * system. */ kWindowModalityNone = 0, /* * A window prevents interaction with all other windows in the * system. Only available in CarbonLib. Mapped to * kWindowModalityAppModal in Mac OS X. */ kWindowModalitySystemModal = 1, /* * A window prevents interaction with other windows in the same * process. */ kWindowModalityAppModal = 2, /* * A window prevents interaction with a single other window. */ kWindowModalityWindowModal = 3 }; /* * SetWindowModality() * * Summary: * Sets the modality of a window. * * Discussion: * The modality of a window is used by the Carbon event manager to * automatically determine appropriate event handling. * * Parameters: * * inWindow: * The window whose modality to set. * * inModalKind: * The new modality for the window. * * inUnavailableWindow: * If the window is becoming window-modal, this parameter * specifies the window to which the inWindow parameter is modal. * The unavailableWindow will not be available while inWindow is * in window-modal state. * * Availability: * Non-Carbon CFM: not available * CarbonLib: in CarbonLib 1.1 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) SetWindowModality( WindowRef inWindow, WindowModality inModalKind, WindowRef inUnavailableWindow); /* * GetWindowModality() * * Summary: * Retrieves the modality of a window. * * Parameters: * * inWindow: * The window whose modality to retrieve. * * outModalKind: * On exit, contains the modality of the window. * * outUnavailableWindow: * On exit, if.the window is window-modal, contains the target * window of the specified window's modality. * * Availability: * Non-Carbon CFM: not available * CarbonLib: in CarbonLib 1.1 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) GetWindowModality( WindowRef inWindow, WindowModality * outModalKind, WindowRef * outUnavailableWindow); /* can be NULL */ /*--------------------------------------------------------------------------------------*/ /* o Floating Windows */ /*--------------------------------------------------------------------------------------*/ /* Routines available from Mac OS 8.6 forward or from Mac OS 8.1 forward when linking to CarbonLib 1.0 forward */ /* * ShowFloatingWindows() * * Availability: * Non-Carbon CFM: in WindowsLib 8.5 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) ShowFloatingWindows(void); /* * HideFloatingWindows() * * Availability: * Non-Carbon CFM: in WindowsLib 8.5 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) HideFloatingWindows(void); /* * AreFloatingWindowsVisible() * * Availability: * Non-Carbon CFM: in WindowsLib 8.5 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( Boolean ) AreFloatingWindowsVisible(void); /*--------------------------------------------------------------------------------------*/ /* o Window Groups */ /* */ /* The Window Group API allows the creation and management of groups of windows, */ /* allowing control of the z-order, activation, and positioning of the windows. */ /* Internally to the Window Manager, each of the standard window tiers (document, */ /* toolbar, floating, modal, utility, help, and overlay) is implemented as a window */ /* group; you can access the window group for a class with GetWindowGroupOfClass. */ /* You can create your own window groups, if you would like your windows to float, */ /* for example, above the floating window layer but below the modal layer. It is */ /* also possible to create more complex hierarchical arrangements of window groups. */ /*--------------------------------------------------------------------------------------*/ typedef struct OpaqueWindowGroupRef* WindowGroupRef; /* may be passed as the "behindWindow" parameter to NewCWindow and SendBehind*/ #define kFirstWindowOfGroup ((WindowRef)(-1)) #define kLastWindowOfGroup ((WindowRef)NULL) /* may be passed as the "behindGroup" parameter to SendWindowGroupBehind*/ #define kFirstWindowGroup ((WindowGroupRef)(-1)) #define kLastWindowGroup ((WindowGroupRef)NULL) /* * WindowGroupAttributes * * Summary: * These are attributes that may be applied to a window group. */ typedef UInt32 WindowGroupAttributes; enum { /* * Makes the group behave somewhat as a layer of windows that move * together. When any window in the group is brought to the front of * the group, the entire group will also be brought to the front of * the containing group's child hierarchy. */ kWindowGroupAttrSelectAsLayer = 1 << 0, /* * The positions of the contents of this group with respect to each * other cannot be changed. When one item moves, all other items are * moved simultaneously. */ kWindowGroupAttrMoveTogether = 1 << 1, /* * The z-order of the contents of this group with respect to each * other cannot be changed. When one item changes z-order, all other * items are moved simulataneously. For purposes of z-ordering, the * group and all its subgroups are effectively treated as if they * were a single window in the parent group of this group. */ kWindowGroupAttrLayerTogether = 1 << 2, /* * The active state of the windows in this group is shared. The * windows in the group are activated or deactivated according to the * activation scope of the group, but when any window in the group * changes activation, all other windows change to match. */ kWindowGroupAttrSharedActivation = 1 << 3, /* * When any window in this group is collapsed, all other windows in * this group are hidden. All subgroups of this group are also * examined for the HideOnCollapse attribute, and any the windows of * any subgroup with this attribute are also hidden. All windows will * be shown again when the collapsed window is expanded. */ kWindowGroupAttrHideOnCollapse = 1 << 4 }; /* * WindowActivationScope * * Discussion: * Every window has a WindowActivationScope. It defines how windows * are activated by the Window Manager with respect to other windows * in the window's group and in the current process. */ typedef UInt32 WindowActivationScope; enum { /* * Windows with this scope are never activated by the Window Manager. * This should be used when the window's visual state does not change * based on activation (for example, tooltip windows), or when the * client wishes to manually control all activation. The window owner * is free to explicitly activate windows using the ActivateWindow * and DeactivateWindow APIs. */ kWindowActivationScopeNone = 0, /* * Windows with this scope are always active if visible. Windows with * this scope are unaffected by the activation state of other * windows. This activation scope is automatically used by floating * windows. */ kWindowActivationScopeIndependent = 1, /* * Windows with this scope are activated relative to other windows * with the same scope in the current process. Only one window with * this scope can be active in the entire process. This activation * scope is automatically used by document and dialog windows. */ kWindowActivationScopeAll = 2 }; /* * Summary: * These are constants that can be used for the inNextGroup * parameter to GetSiblingWindowGroup. */ enum { /* * Indicates that GetSiblingWindowGroup should return the next deeper * sibling group in the z-order. */ kNextWindowGroup = true, /* * Indicates that GetSiblingWindowGroup should return the next higher * sibling group in the z-order. */ kPreviousWindowGroup = false }; /* * WindowGroupContentOptions * * Discussion: * Window group contents options are used to control what group * content is counted or returned by the CountWindowGroupContents * and GetWindowGroupContents APIs. */ typedef UInt32 WindowGroupContentOptions; enum { /* * Indicates that Count/GetWindowGroupContents should return the * windows in a group. If this option is not set, these APIs return * the groups in a group. */ kWindowGroupContentsReturnWindows = 1 << 0, /* * Indicates that Count/GetWindowGroupContents should include the * contents of groups contained by the specified group. If this * option is not set, these APIs only return information about the * specified group's contents. */ kWindowGroupContentsRecurse = 1 << 1, /* * Indicates that Count/GetWindowGroupContents should only include * visible windows. Only valid when kWindowGroupContentsReturnWindows * is specified. */ kWindowGroupContentsVisible = 1 << 2 }; /*----------------------------------------------------------------------------------*/ /* o Group creation, destruction, and refcounting */ /*----------------------------------------------------------------------------------*/ /* * CreateWindowGroup() * * Summary: * Creates a new window group. * * Parameters: * * inAttributes: * Attributes for the new window group. * * outGroup: * On exit, contains the new window group. * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( OSStatus ) CreateWindowGroup( WindowGroupAttributes inAttributes, WindowGroupRef * outGroup); /* * RetainWindowGroup() * * Summary: * Increments the refcount of a window group. * * Parameters: * * inGroup: * The group whose refcount to increment. * * Availability: * Non-Carbon CFM: not available * CarbonLib: in CarbonLib 1.4 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( OSStatus ) RetainWindowGroup(WindowGroupRef inGroup); /* * ReleaseWindowGroup() * * Summary: * Releases a refcount on a window group. If the refcount goes to * zero, the group is destroyed, and a refcount is released from all * contained objects. * * Parameters: * * inGroup: * The group whose refcount to decrement. * * Availability: * Non-Carbon CFM: not available * CarbonLib: in CarbonLib 1.4 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( OSStatus ) ReleaseWindowGroup(WindowGroupRef inGroup); /* * GetWindowGroupRetainCount() * * Summary: * Returns the refcount of a window group. * * Parameters: * * inGroup: * The group whose refcount to return. * * Availability: * Non-Carbon CFM: not available * CarbonLib: in CarbonLib 1.4 and later * Mac OS X: in version 10.1 and later */ EXTERN_API_C( ItemCount ) GetWindowGroupRetainCount(WindowGroupRef inGroup); /* * GetWindowGroupOfClass() * * Summary: * Gets the window group in which windows of a given class are * placed. * * Discussion: * The Window Manager uses window groups internally to manage the * ordering of windows of different classes. In some cases, multiple * classes are placed within the same group; for example, windows * from all of the modal and alert window classes are placed into * the same modal window group. The refcount of the group returned * by this API is not incremented, and the caller does not need to * release the reference. * * Parameters: * * windowClass: * The class whose window group to retrieve. You may pass * kAllWindowClasses to retrieve the root window group. * * Availability: * Non-Carbon CFM: not available * CarbonLib: in CarbonLib 1.4 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( WindowGroupRef ) GetWindowGroupOfClass(WindowClass windowClass); /*----------------------------------------------------------------------------------*/ /* o.Group name, attributes, and level */ /*----------------------------------------------------------------------------------*/ /* * SetWindowGroupName() * * Summary: * Sets the name of a window group. * * Discussion: * The name of a window group is never displayed to the user. * However, it is displayed by debugging functions such as * DebugPrintWindowGroup. This can be very useful when debugging the * structure of your window groups. * * Parameters: * * inGroup: * The group whose name to set. * * inName: * The name of the group. * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( OSStatus ) SetWindowGroupName( WindowGroupRef inGroup, CFStringRef inName); /* * CopyWindowGroupName() * * Summary: * Returns a copy of the name of a window group. * * Parameters: * * inGroup: * The group whose name to retrieve. * * outName: * On exit, contains the name of the group. It is the caller's * responsibility to release the name. * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( OSStatus ) CopyWindowGroupName( WindowGroupRef inGroup, CFStringRef * outName); /* * GetWindowGroupAttributes() * * Summary: * Retrieves the attributes of a window group. * * Parameters: * * inGroup: * The group whose attributes to retrieve. * * outAttributes: * On exit, the group's attributes. * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( OSStatus ) GetWindowGroupAttributes( WindowGroupRef inGroup, WindowGroupAttributes * outAttributes); /* * ChangeWindowGroupAttributes() * * Summary: * Changes the attributes of a window group. * * Parameters: * * inGroup: * The group whose attributes to change. * * setTheseAttributes: * The attributes to set. * * clearTheseAttributes: * The attributes to clear. * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( OSStatus ) ChangeWindowGroupAttributes( WindowGroupRef inGroup, WindowGroupAttributes setTheseAttributes, WindowGroupAttributes clearTheseAttributes); /* * SetWindowGroupLevel() * * Summary: * Sets the CoreGraphics window group level of windows in a group. * * Discussion: * CoreGraphics windows (used to implement all windows in Carbon and * Cocoa applications on Mac OS X) are divided into layers specified * by a window level. Standard window levels are listed in * visible != 0; } #else #if TARGET_OS_MAC #define IsWindowVisible(window) (((WindowPeek)window)->visible != 0) #else #define MacIsWindowVisible(window) (((WindowPeek)window)->visible != 0) #endif #endif #endif /* -------------------------------------------------------------------------------------- o.Latent window visibility -------------------------------------------------------------------------------------- */ /* * WindowLatentVisibility * * Summary: * Reasons why a window is currently invisible when ordinarily it * would be visible. */ typedef UInt32 WindowLatentVisibility; enum { /* * Window is a floater and floating windows are hidden */ kWindowLatentVisibleFloater = 1 << 0, /* * Window has HideOnSuspend and we are suspended */ kWindowLatentVisibleSuspend = 1 << 1, /* * Window has HideOnFullScreen and we are full-screen */ kWindowLatentVisibleFullScreen = 1 << 2, /* * Window's process is hidden */ kWindowLatentVisibleAppHidden = 1 << 3, /* * Window is in an owned group and the owner was collapsed */ kWindowLatentVisibleCollapsedOwner = 1 << 4, /* * Window is in a HideOnCollapse group and another window in the * group was collapsed */ kWindowLatentVisibleCollapsedGroup = 1 << 5 }; /* * IsWindowLatentVisible() * * Summary: * Indicates whether a window is visible onscreen and also whether * it is latently visible but not currently onscreen. * * Discussion: * All windows are either onscreen or offscreen. A window that is * offscreen may still be latently visible; this occurs, for * example, when a floating window is hidden as an application is * suspended. The floating window is not visible onscreen, but it is * latently visible and is only hidden due to the suspended state of * the application; when the application becomes active again, the * floating window will be placed back onscreen. * IsWindowLatentVisible may be used to determine both the window's * onscreen/offscreen status and its latent visibility (if the * window is offscreen). * * Parameters: * * inWindow: * The window whose visibility to return. * * outLatentVisible: * If the window is onscreen, the latent visibility is zero. If * the window is offscreen, this parameter is used to return the * latent visibility flags of the window. If any of the flags are * set, then the window is latently visible. * * Result: * Indicates whether the window is currently onscreen. * * Availability: * Non-Carbon CFM: not available * CarbonLib: in CarbonLib 1.5 and later * Mac OS X: in version 10.1 and later */ EXTERN_API_C( Boolean ) IsWindowLatentVisible( WindowRef inWindow, WindowLatentVisibility * outLatentVisible); /* can be NULL */ /*--------------------------------------------------------------------------------------*/ /* o Sheets Sheets are a new user interface object in Mac OS X. A sheet is a modal alert or dialog, but unlike a traditional alert or dialog window (which is visually separate from the frontmost document window), a sheet appears to be attached to its parent window; it moves and z-orders simultaneously with its parent. Furthermore, sheets on Mac OS X use a new type of modality called window modality. A traditional alert or dialog is app-modal; it prevents user interaction with all other windows in the current application. A sheet is window-modal; it only prevents user interaction with its parent window, and events continue to flow to other windows in the application. o Sheet Event Handling Implementing a sheet window in your application generally requires some modifications to your event-handling code. A traditional app-modal window is implemented using a modal event loop; your application starts a new event loop (either by processing events itself, or by calling ModalDialog), which does not return back to your application's main event loop until the app-modal window has closed. Starting a new event loop doesn't work with sheets, because typically the modal event loop will only handle events destined for the sheet, and not events for other windows, but a sheet only blocks events for its parent window, and your application must still handle events for the rest of its windows as normal. Therefore, you will usually not use a modal event loop to handle events in a sheet. Rather, you will show the sheet window, and then return directly back to your main event loop. The Carbon Event Manager automatically prevents events in the sheet's parent window from reaching it; events in your application's other windows are still returned to you via WaitNextEvent or your application's Carbon event handlers, where you can process them as normal. You have several choices for handling events in the sheet itself. A sheet is, at the most basic level, simply another window in your application, and you can use any of the standard event-handling APIs to receive events in the sheet. For example, you can: - receive events in the sheet via WaitNextEvent, and handle them directly in your main event loop - create the sheet using Dialog Manager APIs, and use IsDialogEvent and DialogSelect to handle events in the sheet - install Carbon event handlers on the sheet, and respond to events in your handlers Which approach you choose is up to you. o Sheets in CarbonLib The sheet window class, sheet WDEF procIDs, and ShowSheetWindow, HideSheetWindow, and GetSheetWindowParent APIs are implemented in CarbonLib starting with version 1.3. However, since Mac OS 8 and 9 do not traditionally support a window-modal user interface, sheet windows are displayed as app-modal windows by CarbonLib. From your application's perspective, event handling for a sheet in CarbonLib is the same as event handling for a sheet on X; ShowSheetWindow still returns immediately, and your application should still return back to its main event loop and be prepared to handle events in other windows. On CarbonLib, your application will simply never receive an user input in any of your other windows; since the sheet has application modality, the Carbon Event Manager will discard events in any windows other than the sheet. o.Creating a Sheet A sheet is just a normal window with a special window class: kSheetWindowClass or kSheetAlertWindowClass. As such, it can be created in any of the ways you might create a window: NewWindow, NewCWindow, CreateNewWindow, GetNewWindow, GetNewCWindow, CreateWindowFromCollection, CreateWindowFromResource, CreateWindowFromNib, NewDialog, NewColorDialog, NewFeaturesDialog, or GetNewDialog. The Window Manager defines two window classes and two WDEF procIDs for sheets: - kSheetWindowClass and kSheetAlertWindowClass - kWindowSheetProc and kWindowSheetAlertProc The window classes may be used with CreateNewWindow, CreateWindowFromCollection, and CreateWindowFromResource; the WDEF procIDs may be used with NewWindow, NewCWindow, NewDialog, NewColorDialog, NewFeaturesDialog, and in 'WDEF' and 'DLOG' resources. The first release of Mac OS X only supports kSheetWindowClass and kWindowSheetProc; it does not support kSheetAlertWindowClass or kWindowSheetAlertProc. The latter window class and procID were added in CarbonLib 1.3 and will be added to a future version of Mac OS X. A new window class and procID were necessary for CarbonLib support because sheets can be used for both alerts ("Do you want to save changes before closing this window?") and dialogs (a Navigation Services PutFile dialog). On Mac OS X, sheet windows have the same appearance when used for either an alert or a dialog, but on Mac OS 8 and 9, alert windows have a different appearance from dialog windows. Two separate window classes are necessary for CarbonLib to know whether to display a sheet using a movable alert or a movable dialog window. Therefore, it is recommended that you use kSheetAlertWindowClass when creating a sheet window that will be used to display an alert, although this is not required. o Displaying a Sheet A sheet is made visible by calling the ShowSheetWindow API. This API shows the sheet, using whatever visual effects are appropriate for the platform, and then returns immediately. On Mac OS X, it creates a window group and places the sheet and its parent window into the group; it also marks the sheet as window-modal. On CarbonLib, it marks the sheet as app-modal but does not create a window group. On Mac OS X, before the sheet window is actually made visible, ShowSheetWindow sends a kEventWindowDrawContent event to the sheet window, asking it to draw its content into the window's offscreen buffer. The sheet must handle this event, or its content area will be blank after the sheet becomes visible. In some cases, this handler is automatically provided for you: - If you create your sheet window using the Dialog Manager, the Dialog Manager automatically installs a handler for this event that calls DrawDialog, so you don't need to install the handler yourself. - If you install the standard Carbon window event handler on your sheet window (using kWindowStandardHandlerAttribute or InstallStandardEventHandler), the standard handler automatically handles this event and calls DrawControls. Typically, your event handling code (whether it uses WaitNextEvent, the Dialog Manager, or Carbon event handlers) will receive and respond to events in the sheet until the user does something that should cause the sheet to close. This might be clicking in an OK or Cancel button, for example. At that time, your event handling code should call HideSheetWindow. The sheet window will hide, but will not be destroyed, so you can use it again later if you want. */ /* * ShowSheetWindow() * * Summary: * Shows a sheet window using appropriate visual effects. * * Discussion: * ShowSheetWindow is implemented in both CarbonLib 1.3 and Mac OS * X. Since Mac OS 9 does not use a window-modal user interface for * alerts and dialogs, ShowSheetWindow in CarbonLib does not bind * the sheet to the parent window in the same way that it does on * Mac OS X; instead, it shows the sheet like a standard * movable-modal dialog window. Sheet windows must use the window * classes kSheetWindowClass or kSheetAlertWindowClass to get the * right appearance on both platforms. * * Parameters: * * inSheet: * The sheet window to show. * * inParentWindow: * The sheet's parent window. * * Availability: * Non-Carbon CFM: not available * CarbonLib: in CarbonLib 1.3 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) ShowSheetWindow( WindowRef inSheet, WindowRef inParentWindow); /* * HideSheetWindow() * * Summary: * Hides a sheet window using appropriate visual effects. * * Parameters: * * inSheet: * The sheet window to hide. * * Availability: * Non-Carbon CFM: not available * CarbonLib: in CarbonLib 1.3 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) HideSheetWindow(WindowRef inSheet); /* * GetSheetWindowParent() * * Summary: * Returns the parent window of a sheet. * * Parameters: * * inSheet: * The sheet window whose parent to retrieve. * * outParentWindow: * On exit, contains the parent window of the sheet. * * Availability: * Non-Carbon CFM: not available * CarbonLib: in CarbonLib 1.3 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) GetSheetWindowParent( WindowRef inSheet, WindowRef * outParentWindow); /*--------------------------------------------------------------------------------------*/ /* o Drawers Drawers are supported in Carbon by Jaguar and later. To create and use a drawer: - Create a window using kDrawerWindowClass. You may optionally set the background brush of the window to kThemeBrushDrawerBackground using the SetThemeWindowBackground function. - Either install the standard window event handler on the drawer window, or use your own Carbon event or WaitNextEvent code to handle user interaction with the drawer. If you do not use the standard window event handler, you should call ResizeWindow in response to clicks on the grow region of the drawer if you want the drawer to be resizable. - Install a handler on the drawer window for the kEventWindowDrawContent event. You must handle this event and draw your drawer's content so that the content will be visible when the drawer is slid out from underneath the parent window. - Set the drawer's parent window with the SetDrawerParent function. The parent is the window on which the drawer will open. - Optionally, install a Carbon event handler on the drawer or the drawer's parent window for the kEventWindowDrawerOpening/Opened/Closing/Closed events, to be notified when the drawer has started or finished opening or closing. - Optionally, set the drawer's preferred edge on the parent window with the SetDrawerPreferredEdge function. If you do not set a preferred edge, the drawer opens on the parent's left side on a left-to-right system, or on the parent's right side on a right-to-left system. - Optionally, Set the drawer's offsets with the SetDrawerOffsets function. The offsets control the amount of inset between the edge of the parent's content area and the edge of the drawer's structure. If you do not set any offsets, the drawer's edges are flush with the edges of the parent's content. - Optionally, set the drawer's minimum and maximum sizes with the SetWindowResizeLimits function. Or, install a Carbon event handler on the drawer to handle the kEventWindow- GetMinimumSize and kEventWindowGetMaximumSize events. The drawer's minimum and maximum sizes control how small or large it will resize together with the parent. If you do not set resize limits, the drawer will be capable of resizing to default small and large limits. - Call ToggleDrawer to open or close the drawer, or use OpenDrawer or CloseDrawer if you require more control over how the drawer opens or closes. */ /* * Summary: * Indicates the parent window edge on which a drawer will be shown. */ enum { /* * This constant is typically used with the OpenDrawer API; it * indicates that the drawer should be opened on whatever edge of the * parent window has previously been set as the drawer's preferred * edge. */ kWindowEdgeDefault = 0, /* * The drawer should open on the top edge of the parent window. */ kWindowEdgeTop = 1 << 0, /* * The drawer should open on the left edge of the parent window. */ kWindowEdgeLeft = 1 << 1, /* * The drawer should open on the bottom edge of the parent window. */ kWindowEdgeBottom = 1 << 2, /* * The drawer should open on the right edge of the parent window. */ kWindowEdgeRight = 1 << 3 }; /* * Summary: * Indicates the current state of a drawer window. */ enum { /* * The drawer is opening, but is not yet fully open. */ kWindowDrawerOpening = 1, /* * The drawer is fully open. */ kWindowDrawerOpen = 2, /* * The drawer is closing, but is not yet fully closed. */ kWindowDrawerClosing = 3, /* * The drawer is fully closed. */ kWindowDrawerClosed = 4 }; typedef UInt32 WindowDrawerState; /* * GetDrawerPreferredEdge() * * Summary: * Returns the preferred parent window edge of a drawer. * * Discussion: * Drawers start out with a preferred parent window edge of * kWindowEdgeDefault. On left-to-right systems, the default edge is * the left edge of the parent window; on right-to-left systems, the * default edge is the right edge. You can set the preferred edge * with SetDrawerPreferredEdge. If there's not enough room on the * preferred edge, the drawer will automatically switch to the * opposite edge. * * Parameters: * * inDrawerWindow: * The drawer window whose preferred edge to retrieve. * * Result: * The preferred edge of the drawer window. * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.2 and later * Mac OS X: in version 10.2 and later */ EXTERN_API_C( OptionBits ) GetDrawerPreferredEdge(WindowRef inDrawerWindow); /* * SetDrawerPreferredEdge() * * Summary: * Sets the preferred parent window edge of a drawer. * * Parameters: * * inDrawerWindow: * The drawer window whose preferred edge to set. * * inEdge: * The preferred edge of the drawer window. Note that although the * WindowEdge enumeration has values appropriate for a bitfield, * the current implementation does not support receiving more than * one edge bit in this parameter. You can also pass * kWindowEdgeDefault to allow the Window Manager to pick an edge. * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.2 and later * Mac OS X: in version 10.2 and later */ EXTERN_API_C( OSStatus ) SetDrawerPreferredEdge( WindowRef inDrawerWindow, OptionBits inEdge); /* * GetDrawerCurrentEdge() * * Summary: * Returns the current parent window edge on which a drawer is * displayed. * * Discussion: * If the drawer window is currently visible, this API returns the * parent window edge on which the drawer is displayed. If the * drawer is not visible, this API determines on which edge of the * parent window the drawer should be displayed, given the current * size of the drawer, position of the parent, and preferred edge * for the drawer. * * Parameters: * * inDrawerWindow: * The drawer window whose current edge to retrieve. * * Result: * The current edge of the drawer window. * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.2 and later * Mac OS X: in version 10.2 and later */ EXTERN_API_C( OptionBits ) GetDrawerCurrentEdge(WindowRef inDrawerWindow); /* * GetDrawerState() * * Summary: * Returns the current state of a drawer: opening, open, closing, or * closed. * * Parameters: * * inDrawerWindow: * The drawer window whose state to retrieve. * * Result: * The current state of the drawer window. * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.2 and later * Mac OS X: in version 10.2 and later */ EXTERN_API_C( WindowDrawerState ) GetDrawerState(WindowRef inDrawerWindow); /* * GetDrawerParent() * * Summary: * Returns the parent window of a drawer. * * Parameters: * * inDrawerWindow: * The drawer window whose parent window to retrieve. * * Result: * The drawer's parent window, or NULL if the drawer has no assigned * parent. * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.2 and later * Mac OS X: in version 10.2 and later */ EXTERN_API_C( WindowRef ) GetDrawerParent(WindowRef inDrawerWindow); /* * SetDrawerParent() * * Summary: * Sets the parent window of a drawer. * * Parameters: * * inDrawerWindow: * The drawer window whose parent window to set. * * inParent: * The drawer's new parent window, or NULL if the drawer should * have no parent. * * Result: * An operating system result code. * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.2 and later * Mac OS X: in version 10.2 and later */ EXTERN_API_C( OSStatus ) SetDrawerParent( WindowRef inDrawerWindow, WindowRef inParent); /* * kWindowOffsetUnchanged * * Discussion: * Pass this value to SetDrawerOffsets to indicate that an existing * offset should not be changed. */ #define kWindowOffsetUnchanged ((float)(-1.0)) /* * SetDrawerOffsets() * * Summary: * Sets the offsets from the beginning and end of the parent window * to the beginning and end of the drawer window. * * Discussion: * The drawer offsets control the positioning of the drawer relative * to its parent window. When a drawer is first created, its offsets * are zero. When a drawer is positioned, it is initially given a * height or width equal to the height or width of the content area * of the parent to which it is attached. If a drawer is opening on * the left side of its parent, for example, the drawer's height * will be the height of the parent's content area. In this case, * the top side of the drawer window is called the leading edge of * the drawer, and the bottom side of the drawer window is called * the trailing edge of the drawer. The drawer's size is then * adjusted by the leading and trailing offsets. The leading edge of * the drawer is moved inward by an amount equal to the leading * offset, and the trailing edge is moved inward by an amount equal * to the trailing offset. For example, if the leading and trailing * offsets are five and fifteen, then the top edge of a left-opening * drawer will be five pixels inside the top edge of the parent * window's content area, and the bottom edge of the drawer will be * fifteen pixels inside the bottom edge of the parent's content * area. * * Parameters: * * inDrawerWindow: * The drawer window whose offsets to change. * * inLeadingOffset: * The new leading offset, in pixels. Pass kWindowOffsetUnchanged * if you don't want to change the leading offset. * * inTrailingOffset: * The new trailing offset, in pixels. Pass kWindowOffsetUnchanged * if you don't want to change the trailing offset. * * Result: * An operating system result code. * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.2 and later * Mac OS X: in version 10.2 and later */ EXTERN_API_C( OSStatus ) SetDrawerOffsets( WindowRef inDrawerWindow, float inLeadingOffset, float inTrailingOffset); /* * GetDrawerOffsets() * * Summary: * Returns the offsets from the beginning and end of the parent * window to the beginning and end of the drawer window. * * Parameters: * * inDrawerWindow: * The drawer window whose offsets to retrieve. * * outLeadingOffset: * On exit, contains the drawer's leading offset. Pass NULL if you * don't need this information returned. * * outTrailingOffset: * On exit, contains the drawer's trailing offset. Pass NULL if * you don't need this information returned. * * Result: * An operating system result code. * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.2 and later * Mac OS X: in version 10.2 and later */ EXTERN_API_C( OSStatus ) GetDrawerOffsets( WindowRef inDrawerWindow, float * outLeadingOffset, /* can be NULL */ float * outTrailingOffset); /* can be NULL */ /* * ToggleDrawer() * * Summary: * Toggles a drawer from open to closed, or vice versa. * * Discussion: * ToggleDrawer opens the drawer if it is closed, opening, or * closing. If the drawer is open, it closes the drawer. * ToggleDrawer attemps to open the drawer on its preferred edge, * but if there is not enough room on that edge, it will try the * opposite edge instead. If there is insufficient room on either * edge, the drawer will open on the preferred edge but may extend * offscreen, under the Dock, or under the menubar. * The opening or closing of the drawer is performed asynchronously; * ToggleDrawer installs an event loop timer that opens or closes * the drawer after ToggleDrawer returns to the caller. Therefore, * the caller must be running its event loop for the drawer to open * or close. To open or close the drawer synchronously, use the * OpenDrawer or CloseDrawer APIs. * ToggleDrawer retains the drawer window while the drawer is * opening or closing, and releases it when the drawer is fully * opened or closed. * ToggleDrawer sends the kEventWindowDrawerOpening, * kEventWindowDrawerOpened, kEventWindowDrawerClosing, and * kEventWindowDrawerClosed events as the drawer opens or closes. * * Parameters: * * inDrawerWindow: * The drawer window to open or close. * * Result: * An operating system result code. * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.2 and later * Mac OS X: in version 10.2 and later */ EXTERN_API_C( OSStatus ) ToggleDrawer(WindowRef inDrawerWindow); /* * OpenDrawer() * * Summary: * Opens a drawer on a specified parent window edge. * * Discussion: * OpenDrawer may open the drawer either synchronously or * asynchronously, depending on the value of the inAsync parameter. * If inAsync is true, OpenDrawer installs an event loop timer that * opens the drawer after OpenDrawer returns to the caller; * therefore, the caller must be running its event loop for the * drawer to open. If inAsync is false, OpenDrawer opens the drawer * completely before returning to the caller. * OpenDrawer retains the drawer window while the drawer is opening, * and releases it when the drawer is fully open. * OpenDrawer sends the kEventWindowDrawerOpening event to the * drawer, the drawer's parent, and the application before opening * the drawer. If an event handler for this event returns * userCanceledErr, OpenDrawer will return immediately without * opening the drawer. OpenDrawer sends the kEventWindowDrawerOpened * event to the drawer, the drawer's parent, and the application * after the drawer has finished opening. * * Parameters: * * inDrawerWindow: * The drawer window to open. * * inEdge: * The parent window edge on which to open the drawer. Pass * kWindowEdgeDefault to use the drawer's preferred edge. If there * is not enough room on the preferred edge, OpenDrawer will try * the opposite edge instead. If there is insufficient room on * either edge, the drawer will open on the preferred edge but may * extend offscreen, under the Dock, or under the menubar. * * inAsync: * Whether to open the drawer synchronously (the drawer is * entirely opened before the function call returns) or * asynchronously (the drawer opens using an event loop timer * after the function call returns). * * Result: * An operating system result code. * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.2 and later * Mac OS X: in version 10.2 and later */ EXTERN_API_C( OSStatus ) OpenDrawer( WindowRef inDrawerWindow, OptionBits inEdge, Boolean inAsync); /* * CloseDrawer() * * Summary: * Closes a drawer. * * Discussion: * CloseDrawer may close the drawer either synchronously or * asynchronously, depending on the value of the inAsync parameter. * If inAsync is true, CloseDrawer installs an event loop timer that * closes the drawer after CloseDrawer returns to the caller; * therefore, the caller must be running its event loop for the * drawer to close. If inAsync is false, CloseDrawer closes the * drawer completely before returning to the caller. * CloseDrawer retains the drawer window while the drawer is * closing, and releases it when the drawer is fully closed. * CloseDrawer sends the kEventWindowDrawerClosing event to the * drawer, the drawer's parent, and the application before closing * the drawer. If an event handler for this event returns * userCanceledErr, CloseDrawer will return immediately without * closing the drawer. CloseDrawer sends the * kEventWindowDrawerClosed event to the drawer, the drawer's * parent, and the application after the drawer has finished closing. * * Parameters: * * inDrawerWindow: * The drawer window to close. * * inAsync: * Whether to close the drawer synchronously (the drawer is * entirely closed before the function call returns) or * asynchronously (the drawer closes using an event loop timer * after the function call returns). * * Result: * An operating system result code. * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.2 and later * Mac OS X: in version 10.2 and later */ EXTERN_API_C( OSStatus ) CloseDrawer( WindowRef inDrawerWindow, Boolean inAsync); /*--------------------------------------------------------------------------------------*/ /* o Disabling Screen Redraw */ /*--------------------------------------------------------------------------------------*/ /* disable and enable screen updates for changes to the current application's windows (OS X only for now) */ /* * DisableScreenUpdates() * * Availability: * Non-Carbon CFM: not available * CarbonLib: in CarbonLib 1.1 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) DisableScreenUpdates(void); /* * EnableScreenUpdates() * * Availability: * Non-Carbon CFM: not available * CarbonLib: in CarbonLib 1.1 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) EnableScreenUpdates(void); /*--------------------------------------------------------------------------------------*/ /* o Window Toolbars */ /*--------------------------------------------------------------------------------------*/ #define _SetWindowToolbar SetWindowToolbar /* * SetWindowToolbar() * * Discussion: * Sets the toolbar for a window. If any other toolbar is currently * bound to the window, it is released. This API does NOT add the * toolbar button to the window, your application must set the * attribute itself. * * Parameters: * * inWindow: * The window to add the toolbar to. * * inToolbar: * The toolbar to add. * * Result: * An operating system result code. * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.2 and later * Mac OS X: in version 10.2 and later */ EXTERN_API_C( OSStatus ) SetWindowToolbar( WindowRef inWindow, HIToolbarRef inToolbar); #define _GetWindowToolbar GetWindowToolbar /* * GetWindowToolbar() * * Discussion: * Gets the toolbar of a window, if any. * * Parameters: * * inWindow: * The window to add the toolbar to. * * outToolbar: * The toolbar. You do not own the toolbar reference returned by * this function. Do not release it! It is possibly for the * toolbar returned to be NULL, indicating there is no toolbar * associated with this window. ooo NOTE: May need to change the * release strategy here. * * Result: * An operating system result code. * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.2 and later * Mac OS X: in version 10.2 and later */ EXTERN_API_C( OSStatus ) GetWindowToolbar( WindowRef inWindow, HIToolbarRef * outToolbar); #define _ShowHideWindowToolbar ShowHideWindowToolbar /* * ShowHideWindowToolbar() * * Discussion: * Shows or hides a window's toolbar. Optionally, you can ask for * the transition to be animated or not. Typically, you would not * need to call this other than to set up your window accordingly. * * Parameters: * * inWindow: * The window to show or hide the toolbar for. * * inShow: * Pass true to show the toolbar, false to hide it. * * inAnimate: * Pass true to animate the transition, false to do it quickly and * without fanfare. * * Result: * An operating system result code. * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.2 and later * Mac OS X: in version 10.2 and later */ EXTERN_API_C( OSStatus ) ShowHideWindowToolbar( WindowRef inWindow, Boolean inShow, Boolean inAnimate); #define _IsWindowToolbarVisible IsWindowToolbarVisible /* * IsWindowToolbarVisible() * * Discussion: * Returns whether the toolbar (if any) attached to a window is * visible. If the window has no toolbar, false is returned. * * Parameters: * * inWindow: * The window test the toolbar visiblity for. * * Result: * A boolean result indicating whether the toolbar is visible (true) * or not (false). * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.2 and later * Mac OS X: in version 10.2 and later */ EXTERN_API_C( Boolean ) IsWindowToolbarVisible(WindowRef inWindow); /*--------------------------------------------------------------------------------------*/ /* o Window Transparency */ /*--------------------------------------------------------------------------------------*/ /* * SetWindowAlpha() * * Discussion: * Alters the overall alpha of a window, making the entire window * (including window frame) either more or less transparent. The * alpha is expressed as a floating point value from 0.0 (completely * transparent) to 1.0 (completely opaque). * * Parameters: * * inWindow: * The window whose alpha to modify. * * inAlpha: * The new alpha value. * * Result: * An operating system result code. * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( OSStatus ) SetWindowAlpha( WindowRef inWindow, float inAlpha); /* * GetWindowAlpha() * * Discussion: * Returns the current overall alpha value for a window. The alpha * is expressed as a floating point value from 0.0 (completely * transparent) to 1.0 (completely opaque). * * Parameters: * * inWindow: * The window whose alpha to return. * * outAlpha: * On exit, contains the window's current alpha value. * * Result: * An operating system result code. * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( OSStatus ) GetWindowAlpha( WindowRef inWindow, float * outAlpha); /*--------------------------------------------------------------------------------------*/ /* o Window Properties */ /*--------------------------------------------------------------------------------------*/ /* Routines available from Mac OS 8.5 forward or from Mac OS 8.1 forward when linking to CarbonLib 1.0 forward */ /* * GetWindowProperty() * * Availability: * Non-Carbon CFM: in WindowsLib 8.5 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) GetWindowProperty( WindowRef window, PropertyCreator propertyCreator, PropertyTag propertyTag, UInt32 bufferSize, UInt32 * actualSize, /* can be NULL */ void * propertyBuffer); /* * GetWindowPropertySize() * * Availability: * Non-Carbon CFM: in WindowsLib 8.5 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) GetWindowPropertySize( WindowRef window, PropertyCreator creator, PropertyTag tag, UInt32 * size); /* * SetWindowProperty() * * Availability: * Non-Carbon CFM: in WindowsLib 8.5 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) SetWindowProperty( WindowRef window, PropertyCreator propertyCreator, PropertyTag propertyTag, UInt32 propertySize, const void * propertyBuffer); /* * RemoveWindowProperty() * * Availability: * Non-Carbon CFM: in WindowsLib 8.5 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) RemoveWindowProperty( WindowRef window, PropertyCreator propertyCreator, PropertyTag propertyTag); /* Routines available from Mac OS 8.1 forward when linking to CarbonLib 1.0 forward*/ enum { kWindowPropertyPersistent = 0x00000001 /* whether this property gets saved when flattening the window */ }; /* * GetWindowPropertyAttributes() * * Availability: * Non-Carbon CFM: not available * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) GetWindowPropertyAttributes( WindowRef window, OSType propertyCreator, OSType propertyTag, UInt32 * attributes); /* * ChangeWindowPropertyAttributes() * * Availability: * Non-Carbon CFM: not available * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSStatus ) ChangeWindowPropertyAttributes( WindowRef window, OSType propertyCreator, OSType propertyTag, UInt32 attributesToSet, UInt32 attributesToClear); /*--------------------------------------------------------------------------------------*/ /* o Utilities */ /*--------------------------------------------------------------------------------------*/ /* * PinRect() * * Availability: * Non-Carbon CFM: in InterfaceLib 7.1 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( long ) PinRect( const Rect * theRect, Point thePt) ONEWORDINLINE(0xA94E); /* * GetGrayRgn() * * Availability: * Non-Carbon CFM: in InterfaceLib 7.1 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( RgnHandle ) GetGrayRgn(void) TWOWORDINLINE(0x2EB8, 0x09EE); /*--------------------------------------------------------------------------------------*/ /* o Window Part Tracking */ /*--------------------------------------------------------------------------------------*/ /* * TrackBox() * * Availability: * Non-Carbon CFM: in InterfaceLib 7.1 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( Boolean ) TrackBox( WindowRef window, Point thePt, WindowPartCode partCode) ONEWORDINLINE(0xA83B); /* * TrackGoAway() * * Availability: * Non-Carbon CFM: in InterfaceLib 7.1 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( Boolean ) TrackGoAway( WindowRef window, Point thePt) ONEWORDINLINE(0xA91E); /*--------------------------------------------------------------------------------------*/ /* o Region Dragging */ /*--------------------------------------------------------------------------------------*/ /* * DragGrayRgn() * * Availability: * Non-Carbon CFM: in InterfaceLib 7.1 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( long ) DragGrayRgn( RgnHandle theRgn, Point startPt, const Rect * limitRect, const Rect * slopRect, short axis, DragGrayRgnUPP actionProc) ONEWORDINLINE(0xA905); /* * DragTheRgn() * * Availability: * Non-Carbon CFM: in InterfaceLib 7.1 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( long ) DragTheRgn( RgnHandle theRgn, Point startPt, const Rect * limitRect, const Rect * slopRect, short axis, DragGrayRgnUPP actionProc) ONEWORDINLINE(0xA926); /*--------------------------------------------------------------------------------------*/ /* o GetAuxWin */ /* */ /* GetAuxWin is not available in Carbon */ /*--------------------------------------------------------------------------------------*/ #if !OPAQUE_TOOLBOX_STRUCTS #if CALL_NOT_IN_CARBON /* * GetAuxWin() * * Availability: * Non-Carbon CFM: in InterfaceLib 7.1 and later * CarbonLib: not available * Mac OS X: not available */ EXTERN_API( Boolean ) GetAuxWin( WindowRef window, AuxWinHandle * awHndl) ONEWORDINLINE(0xAA42); #endif /* CALL_NOT_IN_CARBON */ #endif /* !OPAQUE_TOOLBOX_STRUCTS */ /*--------------------------------------------------------------------------------------*/ /* o C Glue */ /*--------------------------------------------------------------------------------------*/ #if CALL_NOT_IN_CARBON /* * setwtitle() * * Availability: * Non-Carbon CFM: in InterfaceLib 7.1 and later * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( void ) setwtitle( WindowRef window, const char * title); /* * trackgoaway() * * Availability: * Non-Carbon CFM: in InterfaceLib 7.1 and later * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( Boolean ) trackgoaway( WindowRef window, Point * thePt); /* * findwindow() * * Availability: * Non-Carbon CFM: in InterfaceLib 7.1 and later * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( short ) findwindow( Point * thePoint, WindowRef * window); /* * getwtitle() * * Availability: * Non-Carbon CFM: in InterfaceLib 7.1 and later * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( void ) getwtitle( WindowRef window, char * title); /* * growwindow() * * Availability: * Non-Carbon CFM: in InterfaceLib 7.1 and later * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( long ) growwindow( WindowRef window, Point * startPt, const Rect * bBox); /* * newwindow() * * Availability: * Non-Carbon CFM: in InterfaceLib 7.1 and later * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( WindowRef ) newwindow( void * wStorage, const Rect * boundsRect, const char * title, Boolean visible, short theProc, WindowRef behind, Boolean goAwayFlag, long refCon); /* * newcwindow() * * Availability: * Non-Carbon CFM: in InterfaceLib 7.1 and later * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( WindowRef ) newcwindow( void * wStorage, const Rect * boundsRect, const char * title, Boolean visible, short procID, WindowRef behind, Boolean goAwayFlag, long refCon); /* * pinrect() * * Availability: * Non-Carbon CFM: in InterfaceLib 7.1 and later * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( long ) pinrect( const Rect * theRect, Point * thePt); /* * trackbox() * * Availability: * Non-Carbon CFM: in InterfaceLib 7.1 and later * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( Boolean ) trackbox( WindowRef window, Point * thePt, short partCode); /* * draggrayrgn() * * Availability: * Non-Carbon CFM: in InterfaceLib 7.1 and later * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( long ) draggrayrgn( RgnHandle theRgn, Point * startPt, const Rect * boundsRect, const Rect * slopRect, short axis, DragGrayRgnUPP actionProc); /* * dragwindow() * * Availability: * Non-Carbon CFM: in InterfaceLib 7.1 and later * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( void ) dragwindow( WindowRef window, Point * startPt, const Rect * boundsRect); #endif /* CALL_NOT_IN_CARBON */ /*--------------------------------------------------------------------------------------*/ /* o Window Accessors */ /*--------------------------------------------------------------------------------------*/ #if CALL_NOT_IN_CARBON /* * GetWindowGoAwayFlag() * * Discussion: * use GetWindowAttributes in Carbon * * Availability: * Non-Carbon CFM: in CarbonAccessors.o 1.0 and later or as macro/inline * CarbonLib: not available * Mac OS X: not available */ EXTERN_API( Boolean ) GetWindowGoAwayFlag(WindowRef window); #if !OPAQUE_TOOLBOX_STRUCTS && !ACCESSOR_CALLS_ARE_FUNCTIONS #ifdef __cplusplus inline DEFINE_API(Boolean ) GetWindowGoAwayFlag(WindowRef window) { return ((WindowPeek)window)->goAwayFlag; } #else #define GetWindowGoAwayFlag(window) (((WindowPeek)window)->goAwayFlag) #endif #endif /* * GetWindowSpareFlag() * * Discussion: * use GetWindowAttributes in Carbon * * Availability: * Non-Carbon CFM: in CarbonAccessors.o 1.0 and later or as macro/inline * CarbonLib: not available * Mac OS X: not available */ EXTERN_API( Boolean ) GetWindowSpareFlag(WindowRef window); #if !OPAQUE_TOOLBOX_STRUCTS && !ACCESSOR_CALLS_ARE_FUNCTIONS #ifdef __cplusplus inline DEFINE_API(Boolean ) GetWindowSpareFlag(WindowRef window) { return ((WindowPeek)window)->spareFlag; } #else #define GetWindowSpareFlag(window) (((WindowPeek)window)->spareFlag) #endif #endif #endif /* CALL_NOT_IN_CARBON */ /* * GetWindowList() * * Availability: * Non-Carbon CFM: in CarbonAccessors.o 1.0.2 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( WindowRef ) GetWindowList(void); /* * GetWindowPort() * * Availability: * Non-Carbon CFM: in CarbonAccessors.o 1.0 and later or as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( CGrafPtr ) GetWindowPort(WindowRef window); #if !OPAQUE_TOOLBOX_STRUCTS && !ACCESSOR_CALLS_ARE_FUNCTIONS #ifdef __cplusplus inline DEFINE_API(CGrafPtr ) GetWindowPort(WindowRef window) { return (CGrafPtr)window; } #else #define GetWindowPort(window) ((CGrafPtr)window) #endif #endif /* * GetWindowStructurePort() * * Availability: * Non-Carbon CFM: not available * CarbonLib: in CarbonLib 1.5 and later * Mac OS X: in version 10.1 and later */ EXTERN_API( CGrafPtr ) GetWindowStructurePort(WindowRef inWindow); /* * GetWindowKind() * * Availability: * Non-Carbon CFM: in CarbonAccessors.o 1.0 and later or as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( short ) GetWindowKind(WindowRef window); #if !OPAQUE_TOOLBOX_STRUCTS && !ACCESSOR_CALLS_ARE_FUNCTIONS #ifdef __cplusplus inline DEFINE_API(short ) GetWindowKind(WindowRef window) { return ((WindowPeek)window)->windowKind; } #else #define GetWindowKind(window) (((WindowPeek)window)->windowKind) #endif #endif /* * IsWindowHilited() * * Availability: * Non-Carbon CFM: in CarbonAccessors.o 1.0 and later or as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( Boolean ) IsWindowHilited(WindowRef window); #if !OPAQUE_TOOLBOX_STRUCTS && !ACCESSOR_CALLS_ARE_FUNCTIONS #ifdef __cplusplus inline DEFINE_API(Boolean ) IsWindowHilited(WindowRef window) { return ((WindowPeek)window)->hilited != 0; } #else #define IsWindowHilited(window) (((WindowPeek)window)->hilited != 0) #endif #endif /* * IsWindowUpdatePending() * * Availability: * Non-Carbon CFM: in CarbonAccessors.o 1.0 and later or as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( Boolean ) IsWindowUpdatePending(WindowRef window); #if !OPAQUE_TOOLBOX_STRUCTS && !ACCESSOR_CALLS_ARE_FUNCTIONS #ifdef __cplusplus inline DEFINE_API(Boolean ) IsWindowUpdatePending(WindowRef window) { return (((WindowPeek) window)->updateRgn != NULL) && !EmptyRgn(((WindowPeek) window)->updateRgn); } #else #define IsWindowUpdatePending(window) ((((WindowPeek) window)->updateRgn != NULL) && !EmptyRgn(((WindowPeek) window)->updateRgn)) #endif #endif /* * [Mac]GetNextWindow() * * Availability: * Non-Carbon CFM: in CarbonAccessors.o 1.0.2 and later or as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ #if TARGET_OS_MAC #define MacGetNextWindow GetNextWindow #endif EXTERN_API( WindowRef ) MacGetNextWindow(WindowRef window); #if !OPAQUE_TOOLBOX_STRUCTS && !ACCESSOR_CALLS_ARE_FUNCTIONS #ifdef __cplusplus inline DEFINE_API(WindowRef ) MacGetNextWindow(WindowRef window) { return (WindowRef)(((WindowPeek)window)->nextWindow); } #else #if TARGET_OS_MAC #define GetNextWindow(window) ((WindowRef)(((WindowPeek)window)->nextWindow)) #else #define MacGetNextWindow(window) ((WindowRef)(((WindowPeek)window)->nextWindow)) #endif #endif #endif /* * GetPreviousWindow() * * Summary: * Returns the window above a given window in the window list. * * Parameters: * * inWindow: * The window above this window is returned. * * Availability: * Non-Carbon CFM: not available * CarbonLib: in CarbonLib 1.6 and later * Mac OS X: in version 10.2 and later */ EXTERN_API_C( WindowRef ) GetPreviousWindow(WindowRef inWindow); /* * GetWindowStandardState() * * Availability: * Non-Carbon CFM: in CarbonAccessors.o 1.0 and later or as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( Rect * ) GetWindowStandardState( WindowRef window, Rect * rect); #if !OPAQUE_TOOLBOX_STRUCTS && !ACCESSOR_CALLS_ARE_FUNCTIONS #ifdef __cplusplus inline DEFINE_API(Rect *) GetWindowStandardState(WindowRef window, Rect *rect) { return (*(rect) = ((*(((WindowPeek)window)->dataHandle) == NULL) ? *(rect) : ((Rect*)(*(((WindowPeek)window)->dataHandle)))[1])), (rect); } #else #define GetWindowStandardState(window, rect) ((*(rect) = ((*(((WindowPeek)window)->dataHandle) == NULL) ? *(rect) : ((Rect*)(*(((WindowPeek)window)->dataHandle)))[1])), (rect)) #endif #endif /* * GetWindowUserState() * * Availability: * Non-Carbon CFM: in CarbonAccessors.o 1.0 and later or as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( Rect * ) GetWindowUserState( WindowRef window, Rect * rect); #if !OPAQUE_TOOLBOX_STRUCTS && !ACCESSOR_CALLS_ARE_FUNCTIONS #ifdef __cplusplus inline DEFINE_API(Rect *) GetWindowUserState(WindowRef window, Rect *rect) { return (*(rect) = ((*(((WindowPeek)window)->dataHandle) == NULL) ? *(rect) : ((Rect*)(*(((WindowPeek)window)->dataHandle)))[0])), (rect); } #else #define GetWindowUserState(window, rect) ((*(rect) = ((*(((WindowPeek)window)->dataHandle) == NULL) ? *(rect) : ((Rect*)(*(((WindowPeek)window)->dataHandle)))[0])), (rect)) #endif #endif /* * SetWindowKind() * * Availability: * Non-Carbon CFM: in CarbonAccessors.o 1.0 and later or as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( void ) SetWindowKind( WindowRef window, short kind); #if !OPAQUE_TOOLBOX_STRUCTS && !ACCESSOR_CALLS_ARE_FUNCTIONS #ifdef __cplusplus inline DEFINE_API(void) SetWindowKind(WindowRef window, short kind) { ((WindowPeek)window)->windowKind = kind; } #else #define SetWindowKind(window, kind) (((WindowPeek)window)->windowKind = kind) #endif #endif /* * SetWindowStandardState() * * Availability: * Non-Carbon CFM: in CarbonAccessors.o 1.0 and later or as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( void ) SetWindowStandardState( WindowRef window, const Rect * rect); #if !OPAQUE_TOOLBOX_STRUCTS && !ACCESSOR_CALLS_ARE_FUNCTIONS #ifdef __cplusplus inline DEFINE_API(void) SetWindowStandardState(WindowRef window, const Rect *rect) { Rect* stateRects = (Rect*)(*(((WindowPeek)window)->dataHandle)); if (stateRects != NULL) stateRects[1] = *rect; } #else #define SetWindowStandardState(window, rect) do { Rect* stateRects = (Rect*)(*(((WindowPeek)window)->dataHandle)); if (stateRects != NULL) stateRects[1] = *rect; } while (false) #endif #endif /* * SetWindowUserState() * * Availability: * Non-Carbon CFM: in CarbonAccessors.o 1.0 and later or as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( void ) SetWindowUserState( WindowRef window, const Rect * rect); #if !OPAQUE_TOOLBOX_STRUCTS && !ACCESSOR_CALLS_ARE_FUNCTIONS #ifdef __cplusplus inline DEFINE_API(void) SetWindowUserState(WindowRef window, const Rect *rect) { Rect* stateRects = (Rect*)(*(((WindowPeek)window)->dataHandle)); if (stateRects != NULL) stateRects[0] = *rect; } #else #define SetWindowUserState(window, rect) do { Rect* stateRects = (Rect*)(*(((WindowPeek)window)->dataHandle)); if (stateRects != NULL) stateRects[0] = *rect; } while (false) #endif #endif /* * SetPortWindowPort() * * Discussion: * set the current QuickDraw port to the port associated with the * window * * Availability: * Non-Carbon CFM: in CarbonAccessors.o 1.0 and later or as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( void ) SetPortWindowPort(WindowRef window); #if !OPAQUE_TOOLBOX_STRUCTS && !ACCESSOR_CALLS_ARE_FUNCTIONS #ifdef __cplusplus inline DEFINE_API(void) SetPortWindowPort(WindowRef window) { MacSetPort((GrafPtr)window); } #else #define SetPortWindowPort(window) (MacSetPort((GrafPtr)window)) #endif #endif /* * GetWindowPortBounds() * * Availability: * Non-Carbon CFM: in CarbonAccessors.o 1.0 and later or as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( Rect * ) GetWindowPortBounds( WindowRef window, Rect * bounds); #if !OPAQUE_TOOLBOX_STRUCTS && !ACCESSOR_CALLS_ARE_FUNCTIONS #ifdef __cplusplus inline DEFINE_API(Rect *) GetWindowPortBounds(WindowRef window, Rect *bounds) { return ((*(bounds) = (window)->portRect)), (bounds); } #else #define GetWindowPortBounds(window, bounds) (((*(bounds) = (window)->portRect)), (bounds)) #endif #endif /* * GetWindowFromPort() * * Discussion: * Needed to 'cast up' to a WindowRef from a GrafPtr * * Availability: * Non-Carbon CFM: in CarbonAccessors.o 1.0 and later or as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( WindowRef ) GetWindowFromPort(CGrafPtr port); #if !OPAQUE_TOOLBOX_STRUCTS && !ACCESSOR_CALLS_ARE_FUNCTIONS #ifdef __cplusplus inline DEFINE_API(WindowRef ) GetWindowFromPort(CGrafPtr port) { return (WindowRef)port; } #else #define GetWindowFromPort(port) ((WindowRef)port) #endif #endif /* old accessors*/ #if CALL_NOT_IN_CARBON /* * GetWindowDataHandle() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( Handle ) GetWindowDataHandle(WindowRef window); #if !OPAQUE_TOOLBOX_STRUCTS && !ACCESSOR_CALLS_ARE_FUNCTIONS #ifdef __cplusplus inline DEFINE_API_C(Handle ) GetWindowDataHandle(WindowRef window) { return ((WindowPeek)window)->dataHandle; } #else #define GetWindowDataHandle(window) (((WindowPeek)window)->dataHandle) #endif #endif /* * SetWindowDataHandle() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( void ) SetWindowDataHandle( WindowRef window, Handle data); #if !OPAQUE_TOOLBOX_STRUCTS && !ACCESSOR_CALLS_ARE_FUNCTIONS #ifdef __cplusplus inline DEFINE_API_C(void) SetWindowDataHandle(WindowRef window, Handle data) { ((WindowPeek)window)->dataHandle = data; } #else #define SetWindowDataHandle(window, data) (((WindowPeek)window)->dataHandle = data) #endif #endif /* * GetWindowZoomFlag() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( Boolean ) GetWindowZoomFlag(WindowRef window); #if !OPAQUE_TOOLBOX_STRUCTS && !ACCESSOR_CALLS_ARE_FUNCTIONS #ifdef __cplusplus inline DEFINE_API_C(Boolean ) GetWindowZoomFlag(WindowRef window) { return ((WindowPeek)window)->spareFlag; } #else #define GetWindowZoomFlag(window) (((WindowPeek)window)->spareFlag) #endif #endif /* * GetWindowStructureRgn() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( void ) GetWindowStructureRgn( WindowRef window, RgnHandle r); #if !OPAQUE_TOOLBOX_STRUCTS && !ACCESSOR_CALLS_ARE_FUNCTIONS #ifdef __cplusplus inline DEFINE_API_C(void) GetWindowStructureRgn(WindowRef window, RgnHandle r) { MacCopyRgn(((WindowPeek)window)->strucRgn, r); } #else #define GetWindowStructureRgn(window, r) (MacCopyRgn(((WindowPeek)window)->strucRgn, r)) #endif #endif /* * GetWindowContentRgn() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( void ) GetWindowContentRgn( WindowRef window, RgnHandle r); #if !OPAQUE_TOOLBOX_STRUCTS && !ACCESSOR_CALLS_ARE_FUNCTIONS #ifdef __cplusplus inline DEFINE_API_C(void) GetWindowContentRgn(WindowRef window, RgnHandle r) { MacCopyRgn(((WindowPeek)window)->contRgn, r); } #else #define GetWindowContentRgn(window, r) (MacCopyRgn(((WindowPeek)window)->contRgn, r)) #endif #endif /* * GetWindowUpdateRgn() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( void ) GetWindowUpdateRgn( WindowRef window, RgnHandle r); #if !OPAQUE_TOOLBOX_STRUCTS && !ACCESSOR_CALLS_ARE_FUNCTIONS #ifdef __cplusplus inline DEFINE_API_C(void) GetWindowUpdateRgn(WindowRef window, RgnHandle r) { MacCopyRgn(((WindowPeek)window)->updateRgn, r); } #else #define GetWindowUpdateRgn(window, r) (MacCopyRgn(((WindowPeek)window)->updateRgn, r)) #endif #endif /* * GetWindowTitleWidth() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( SInt16 ) GetWindowTitleWidth(WindowRef window); #if !OPAQUE_TOOLBOX_STRUCTS && !ACCESSOR_CALLS_ARE_FUNCTIONS #ifdef __cplusplus inline DEFINE_API_C(SInt16 ) GetWindowTitleWidth(WindowRef window) { return ((WindowPeek)window)->titleWidth; } #else #define GetWindowTitleWidth(window) (((WindowPeek)window)->titleWidth) #endif #endif /*--------------------------------------------------------------------------------------------------*/ /* Obsolete symbolic names */ /*--------------------------------------------------------------------------------------------------*/ #endif /* CALL_NOT_IN_CARBON */ enum { kWindowGroupAttrSelectable = kWindowGroupAttrSelectAsLayer, kWindowGroupAttrPositionFixed = kWindowGroupAttrMoveTogether, kWindowGroupAttrZOrderFixed = kWindowGroupAttrLayerTogether }; #if PRAGMA_STRUCT_ALIGN #pragma options align=reset #elif PRAGMA_STRUCT_PACKPUSH #pragma pack(pop) #elif PRAGMA_STRUCT_PACK #pragma pack() #endif #ifdef PRAGMA_IMPORT_OFF #pragma import off #elif PRAGMA_IMPORT #pragma import reset #endif #ifdef __cplusplus } #endif #endif /* __MACWINDOWS__ */