topical media & game development

talk show tell print

lib-of-vs-libs-QTDevWin-CIncludes-Drag.h / h



  /*
       File:       Drag.h
   
       Contains:   Drag and Drop Interfaces.
   
       Version:    Technology: Mac OS 9
                   Release:    QuickTime 6.0.2
   
       Copyright:  (c) 1992-2001 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 __DRAG__
  define __DRAG__
  
  ifndef __MACTYPES__
  include <MacTypes.h>
  endif
  
  ifndef __EVENTS__
  include <Events.h>
  endif
  
  ifndef __FILES__
  include <Files.h>
  endif
  
  ifndef __APPLEEVENTS__
  include <AppleEvents.h>
  endif
  
  ifndef __QUICKDRAW__
  include <Quickdraw.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
  
  /*
    _________________________________________________________________________________________________________
        
     o DRAG MANAGER DATA TYPES
    _________________________________________________________________________________________________________
  */
  
  typedef struct OpaqueDragRef*           DragRef;
  typedef UInt32                          DragItemRef;
  typedef OSType                          FlavorType;
  /*
    _________________________________________________________________________________________________________
        
     o DRAG ATTRIBUTES
    _________________________________________________________________________________________________________
  */
  
  typedef UInt32 DragAttributes;
  enum {
      kDragHasLeftSenderWindow    = (1L << 0),                    /* drag has left the source window since TrackDrag*/
      kDragInsideSenderApplication = (1L << 1),                   /* drag is occurring within the sender application*/
      kDragInsideSenderWindow     = (1L << 2)                     /* drag is occurring within the sender window*/
  };
  
  /*
    _________________________________________________________________________________________________________
        
     o DRAG BEHAVIORS
    _________________________________________________________________________________________________________
  */
  
  typedef UInt32 DragBehaviors;
  enum {
      kDragBehaviorNone           = 0,
      kDragBehaviorZoomBackAnimation = (1L << 0)                  /* do zoomback animation for failed drags (normally enabled).*/
  };
  
  /*
    _________________________________________________________________________________________________________
        
     o DRAG IMAGE FLAGS
    _________________________________________________________________________________________________________
  */
  
  typedef UInt32 DragImageFlags;
  enum {
      kDragRegionAndImage         = (1L << 4)                     /* drag region and image*/
  };
  
  /*
    _________________________________________________________________________________________________________
        
     o DRAG IMAGE TRANSLUCENCY LEVELS
    _________________________________________________________________________________________________________
  */
  
  enum {
      kDragStandardTranslucency   = 0L,                           /* 65% image translucency (standard)*/
      kDragDarkTranslucency       = 1L,                           /* 50% image translucency*/
      kDragDarkerTranslucency     = 2L,                           /* 25% image translucency*/
      kDragOpaqueTranslucency     = 3L                            /* 0% image translucency (opaque)*/
  };
  
  /*
    _________________________________________________________________________________________________________
        
     o DRAG DRAWING PROCEDURE MESSAGES
    _________________________________________________________________________________________________________
  */
  
  typedef SInt16 DragRegionMessage;
  enum {
      kDragRegionBegin            = 1,                            /* initialize drawing*/
      kDragRegionDraw             = 2,                            /* draw drag feedback*/
      kDragRegionHide             = 3,                            /* hide drag feedback*/
      kDragRegionIdle             = 4,                            /* drag feedback idle time*/
      kDragRegionEnd              = 5                             /* end of drawing*/
  };
  
  /*
    _________________________________________________________________________________________________________
        
     o ZOOM ACCELERATION
    _________________________________________________________________________________________________________
  */
  
  typedef SInt16 ZoomAcceleration;
  enum {
      kZoomNoAcceleration         = 0,                            /* use linear interpolation*/
      kZoomAccelerate             = 1,                            /* ramp up step size*/
      kZoomDecelerate             = 2                             /* ramp down step size*/
  };
  
  /*
    _________________________________________________________________________________________________________
        
     o FLAVOR FLAGS
    _________________________________________________________________________________________________________
  */
  
  typedef UInt32 FlavorFlags;
  enum {
      flavorSenderOnly            = (1 << 0),                     /* flavor is available to sender only*/
      flavorSenderTranslated      = (1 << 1),                     /* flavor is translated by sender*/
      flavorNotSaved              = (1 << 2),                     /* flavor should not be saved*/
      flavorSystemTranslated      = (1 << 8)                      /* flavor is translated by system*/
  };
  
  /*
    _________________________________________________________________________________________________________
        
     o SPECIAL FLAVORS
    _________________________________________________________________________________________________________
  */
  
  enum {
      flavorTypeHFS               = FOUR_CHAR_CODE('hfs '),       /* flavor type for HFS data*/
      flavorTypePromiseHFS        = FOUR_CHAR_CODE('phfs'),       /* flavor type for promised HFS data*/
      flavorTypeDirectory         = FOUR_CHAR_CODE('diry')        /* flavor type for AOCE directories*/
  };
  
  /*
    _________________________________________________________________________________________________________
        
     o FLAVORS FOR FINDER 8.0 AND LATER
    _________________________________________________________________________________________________________
  */
  
  enum {
      kFlavorTypeClippingName     = FOUR_CHAR_CODE('clnm'),       /* name hint for clipping file (preferred over 'clfn')*/
      kFlavorTypeClippingFilename = FOUR_CHAR_CODE('clfn'),       /* name for clipping file*/
      kFlavorTypeDragToTrashOnly  = FOUR_CHAR_CODE('fdtt'),       /* for apps that want to allow dragging private data to the trash*/
      kFlavorTypeFinderNoTrackingBehavior = FOUR_CHAR_CODE('fntb') /* Finder completely ignores any drag containing this flavor*/
  };
  
  /*
    _________________________________________________________________________________________________________
        
     o DRAG TRACKING HANDLER MESSAGES
    _________________________________________________________________________________________________________
  */
  
  typedef SInt16 DragTrackingMessage;
  enum {
      kDragTrackingEnterHandler   = 1,                            /* drag has entered handler*/
      kDragTrackingEnterWindow    = 2,                            /* drag has entered window*/
      kDragTrackingInWindow       = 3,                            /* drag is moving within window*/
      kDragTrackingLeaveWindow    = 4,                            /* drag has exited window*/
      kDragTrackingLeaveHandler   = 5                             /* drag has exited handler*/
  };
  
  /*
    _________________________________________________________________________________________________________
        
     o HFS FLAVORS
    _________________________________________________________________________________________________________
  */
  
  struct HFSFlavor {
      OSType                          fileType;                   /* file type */
      OSType                          fileCreator;                /* file creator */
      UInt16                          fdFlags;                    /* Finder flags */
      FSSpec                          fileSpec;                   /* file system specification */
  };
  typedef struct HFSFlavor                HFSFlavor;
  
  struct PromiseHFSFlavor {
      OSType                          fileType;                   /* file type */
      OSType                          fileCreator;                /* file creator */
      UInt16                          fdFlags;                    /* Finder flags */
      FlavorType                      promisedFlavor;             /* promised flavor containing an FSSpec */
  };
  typedef struct PromiseHFSFlavor         PromiseHFSFlavor;
  /*
    _________________________________________________________________________________________________________
        
     o APPLICATION-DEFINED DRAG HANDLER ROUTINES
    _________________________________________________________________________________________________________
  */
  typedef CALLBACK_API( OSErr , DragTrackingHandlerProcPtr )(DragTrackingMessage message, WindowRef theWindow, void *handlerRefCon, DragRef theDrag);
  typedef CALLBACK_API( OSErr , DragReceiveHandlerProcPtr )(WindowRef theWindow, void *handlerRefCon, DragRef theDrag);
  typedef STACK_UPP_TYPE(DragTrackingHandlerProcPtr)              DragTrackingHandlerUPP;
  typedef STACK_UPP_TYPE(DragReceiveHandlerProcPtr)               DragReceiveHandlerUPP;
  if OPAQUE_UPP_TYPES
      EXTERN_API(DragTrackingHandlerUPP)
      NewDragTrackingHandlerUPP      (DragTrackingHandlerProcPtr userRoutine);
  
      EXTERN_API(DragReceiveHandlerUPP)
      NewDragReceiveHandlerUPP       (DragReceiveHandlerProcPtr userRoutine);
  
      EXTERN_API(void)
      DisposeDragTrackingHandlerUPP    (DragTrackingHandlerUPP userUPP);
  
      EXTERN_API(void)
      DisposeDragReceiveHandlerUPP    (DragReceiveHandlerUPP  userUPP);
  
      EXTERN_API(OSErr)
      InvokeDragTrackingHandlerUPP    (DragTrackingMessage    message,
                                      WindowRef               theWindow,
                                      void *                  handlerRefCon,
                                      DragRef                 theDrag,
                                      DragTrackingHandlerUPP  userUPP);
  
      EXTERN_API(OSErr)
      InvokeDragReceiveHandlerUPP    (WindowRef               theWindow,
                                      void *                  handlerRefCon,
                                      DragRef                 theDrag,
                                      DragReceiveHandlerUPP   userUPP);
  
  else
      enum { uppDragTrackingHandlerProcInfo = 0x00003FA0 };           /* pascal 2_bytes Func(2_bytes, 4_bytes, 4_bytes, 4_bytes) */
      enum { uppDragReceiveHandlerProcInfo = 0x00000FE0 };            /* pascal 2_bytes Func(4_bytes, 4_bytes, 4_bytes) */
      #define NewDragTrackingHandlerUPP(userRoutine)                  (DragTrackingHandlerUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppDragTrackingHandlerProcInfo, GetCurrentArchitecture())
      #define NewDragReceiveHandlerUPP(userRoutine)                   (DragReceiveHandlerUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppDragReceiveHandlerProcInfo, GetCurrentArchitecture())
      #define DisposeDragTrackingHandlerUPP(userUPP)                  DisposeRoutineDescriptor(userUPP)
      #define DisposeDragReceiveHandlerUPP(userUPP)                   DisposeRoutineDescriptor(userUPP)
      #define InvokeDragTrackingHandlerUPP(message, theWindow, handlerRefCon, theDrag, userUPP)  (OSErr)CALL_FOUR_PARAMETER_UPP((userUPP), uppDragTrackingHandlerProcInfo, (message), (theWindow), (handlerRefCon), (theDrag))
      #define InvokeDragReceiveHandlerUPP(theWindow, handlerRefCon, theDrag, userUPP)  (OSErr)CALL_THREE_PARAMETER_UPP((userUPP), uppDragReceiveHandlerProcInfo, (theWindow), (handlerRefCon), (theDrag))
  endif
  /* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */
  define NewDragTrackingHandlerProc(userRoutine)                 NewDragTrackingHandlerUPP(userRoutine)
  define NewDragReceiveHandlerProc(userRoutine)                  NewDragReceiveHandlerUPP(userRoutine)
  define CallDragTrackingHandlerProc(userRoutine, message, theWindow, handlerRefCon, theDrag) InvokeDragTrackingHandlerUPP(message, theWindow, handlerRefCon, theDrag, userRoutine)
  define CallDragReceiveHandlerProc(userRoutine, theWindow, handlerRefCon, theDrag) InvokeDragReceiveHandlerUPP(theWindow, handlerRefCon, theDrag, userRoutine)
  /*
    _________________________________________________________________________________________________________
        
     o APPLICATION-DEFINED ROUTINES
    _________________________________________________________________________________________________________
  */
  typedef CALLBACK_API( OSErr , DragSendDataProcPtr )(FlavorType theType, void *dragSendRefCon, DragItemRef theItemRef, DragRef theDrag);
  typedef CALLBACK_API( OSErr , DragInputProcPtr )(Point *mouse, SInt16 *modifiers, void *dragInputRefCon, DragRef theDrag);
  typedef CALLBACK_API( OSErr , DragDrawingProcPtr )(DragRegionMessage message, RgnHandle showRegion, Point showOrigin, RgnHandle hideRegion, Point hideOrigin, void *dragDrawingRefCon, DragRef theDrag);
  typedef STACK_UPP_TYPE(DragSendDataProcPtr)                     DragSendDataUPP;
  typedef STACK_UPP_TYPE(DragInputProcPtr)                        DragInputUPP;
  typedef STACK_UPP_TYPE(DragDrawingProcPtr)                      DragDrawingUPP;
  if OPAQUE_UPP_TYPES
      EXTERN_API(DragSendDataUPP)
      NewDragSendDataUPP             (DragSendDataProcPtr     userRoutine);
  
      EXTERN_API(DragInputUPP)
      NewDragInputUPP                (DragInputProcPtr        userRoutine);
  
      EXTERN_API(DragDrawingUPP)
      NewDragDrawingUPP              (DragDrawingProcPtr      userRoutine);
  
      EXTERN_API(void)
      DisposeDragSendDataUPP         (DragSendDataUPP         userUPP);
  
      EXTERN_API(void)
      DisposeDragInputUPP            (DragInputUPP            userUPP);
  
      EXTERN_API(void)
      DisposeDragDrawingUPP          (DragDrawingUPP          userUPP);
  
      EXTERN_API(OSErr)
      InvokeDragSendDataUPP          (FlavorType              theType,
                                      void *                  dragSendRefCon,
                                      DragItemRef             theItemRef,
                                      DragRef                 theDrag,
                                      DragSendDataUPP         userUPP);
  
      EXTERN_API(OSErr)
      InvokeDragInputUPP             (Point *                 mouse,
                                      SInt16 *                modifiers,
                                      void *                  dragInputRefCon,
                                      DragRef                 theDrag,
                                      DragInputUPP            userUPP);
  
      EXTERN_API(OSErr)
      InvokeDragDrawingUPP           (DragRegionMessage       message,
                                      RgnHandle               showRegion,
                                      Point                   showOrigin,
                                      RgnHandle               hideRegion,
                                      Point                   hideOrigin,
                                      void *                  dragDrawingRefCon,
                                      DragRef                 theDrag,
                                      DragDrawingUPP          userUPP);
  
  else
      enum { uppDragSendDataProcInfo = 0x00003FE0 };                  /* pascal 2_bytes Func(4_bytes, 4_bytes, 4_bytes, 4_bytes) */
      enum { uppDragInputProcInfo = 0x00003FE0 };                     /* pascal 2_bytes Func(4_bytes, 4_bytes, 4_bytes, 4_bytes) */
      enum { uppDragDrawingProcInfo = 0x000FFFA0 };                   /* pascal 2_bytes Func(2_bytes, 4_bytes, 4_bytes, 4_bytes, 4_bytes, 4_bytes, 4_bytes) */
      #define NewDragSendDataUPP(userRoutine)                         (DragSendDataUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppDragSendDataProcInfo, GetCurrentArchitecture())
      #define NewDragInputUPP(userRoutine)                            (DragInputUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppDragInputProcInfo, GetCurrentArchitecture())
      #define NewDragDrawingUPP(userRoutine)                          (DragDrawingUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppDragDrawingProcInfo, GetCurrentArchitecture())
      #define DisposeDragSendDataUPP(userUPP)                         DisposeRoutineDescriptor(userUPP)
      #define DisposeDragInputUPP(userUPP)                            DisposeRoutineDescriptor(userUPP)
      #define DisposeDragDrawingUPP(userUPP)                          DisposeRoutineDescriptor(userUPP)
      #define InvokeDragSendDataUPP(theType, dragSendRefCon, theItemRef, theDrag, userUPP)  (OSErr)CALL_FOUR_PARAMETER_UPP((userUPP), uppDragSendDataProcInfo, (theType), (dragSendRefCon), (theItemRef), (theDrag))
      #define InvokeDragInputUPP(mouse, modifiers, dragInputRefCon, theDrag, userUPP)  (OSErr)CALL_FOUR_PARAMETER_UPP((userUPP), uppDragInputProcInfo, (mouse), (modifiers), (dragInputRefCon), (theDrag))
      #define InvokeDragDrawingUPP(message, showRegion, showOrigin, hideRegion, hideOrigin, dragDrawingRefCon, theDrag, userUPP)  (OSErr)CALL_SEVEN_PARAMETER_UPP((userUPP), uppDragDrawingProcInfo, (message), (showRegion), (showOrigin), (hideRegion), (hideOrigin), (dragDrawingRefCon), (theDrag))
  endif
  /* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */
  define NewDragSendDataProc(userRoutine)                        NewDragSendDataUPP(userRoutine)
  define NewDragInputProc(userRoutine)                           NewDragInputUPP(userRoutine)
  define NewDragDrawingProc(userRoutine)                         NewDragDrawingUPP(userRoutine)
  define CallDragSendDataProc(userRoutine, theType, dragSendRefCon, theItemRef, theDrag) InvokeDragSendDataUPP(theType, dragSendRefCon, theItemRef, theDrag, userRoutine)
  define CallDragInputProc(userRoutine, mouse, modifiers, dragInputRefCon, theDrag) InvokeDragInputUPP(mouse, modifiers, dragInputRefCon, theDrag, userRoutine)
  define CallDragDrawingProc(userRoutine, message, showRegion, showOrigin, hideRegion, hideOrigin, dragDrawingRefCon, theDrag) InvokeDragDrawingUPP(message, showRegion, showOrigin, hideRegion, hideOrigin, dragDrawingRefCon, theDrag, userRoutine)
  /*
    _________________________________________________________________________________________________________
        
     o INSTALLING AND REMOVING HANDLERS API'S
    _________________________________________________________________________________________________________
  */
  
  EXTERN_API( OSErr )
  InstallTrackingHandler          (DragTrackingHandlerUPP  trackingHandler,
                                   WindowRef              theWindow,
                                   void *                 handlerRefCon)                      TWOWORDINLINE(0x7001, 0xABED);
  
  EXTERN_API( OSErr )
  InstallReceiveHandler           (DragReceiveHandlerUPP  receiveHandler,
                                   WindowRef              theWindow,
                                   void *                 handlerRefCon)                      TWOWORDINLINE(0x7002, 0xABED);
  
  EXTERN_API( OSErr )
  RemoveTrackingHandler           (DragTrackingHandlerUPP  trackingHandler,
                                   WindowRef              theWindow)                          TWOWORDINLINE(0x7003, 0xABED);
  
  EXTERN_API( OSErr )
  RemoveReceiveHandler            (DragReceiveHandlerUPP  receiveHandler,
                                   WindowRef              theWindow)                          TWOWORDINLINE(0x7004, 0xABED);
  
  /*
    _________________________________________________________________________________________________________
        
     o CREATING & DISPOSING
    _________________________________________________________________________________________________________
  */
  
  EXTERN_API( OSErr )
  NewDrag                         (DragRef *              theDrag)                            TWOWORDINLINE(0x7005, 0xABED);
  
  EXTERN_API( OSErr )
  DisposeDrag                     (DragRef                theDrag)                            TWOWORDINLINE(0x7006, 0xABED);
  
  /*
    _________________________________________________________________________________________________________
        
     o ADDING DRAG ITEM FLAVORS
    _________________________________________________________________________________________________________
  */
  
  EXTERN_API( OSErr )
  AddDragItemFlavor               (DragRef                theDrag,
                                   DragItemRef            theItemRef,
                                   FlavorType             theType,
                                   const void *           dataPtr,
                                   Size                   dataSize,
                                   FlavorFlags            theFlags)                           TWOWORDINLINE(0x7007, 0xABED);
  
  EXTERN_API( OSErr )
  SetDragItemFlavorData           (DragRef                theDrag,
                                   DragItemRef            theItemRef,
                                   FlavorType             theType,
                                   const void *           dataPtr,
                                   Size                   dataSize,
                                   UInt32                 dataOffset)                         TWOWORDINLINE(0x7009, 0xABED);
  
  /*
    _________________________________________________________________________________________________________
        
     o PROVIDING CALLBACK PROCEDURES
    _________________________________________________________________________________________________________
  */
  
  EXTERN_API( OSErr )
  SetDragSendProc                 (DragRef                theDrag,
                                   DragSendDataUPP        sendProc,
                                   void *                 dragSendRefCon)                     TWOWORDINLINE(0x700A, 0xABED);
  
  EXTERN_API( OSErr )
  SetDragInputProc                (DragRef                theDrag,
                                   DragInputUPP           inputProc,
                                   void *                 dragInputRefCon)                    TWOWORDINLINE(0x700B, 0xABED);
  
  EXTERN_API( OSErr )
  SetDragDrawingProc              (DragRef                theDrag,
                                   DragDrawingUPP         drawingProc,
                                   void *                 dragDrawingRefCon)                  TWOWORDINLINE(0x700C, 0xABED);
  
  /*
    _________________________________________________________________________________________________________
        
     o SETTING THE DRAG IMAGE
    _________________________________________________________________________________________________________
  */
  
  EXTERN_API( OSErr )
  SetDragImage                    (DragRef                theDrag,
                                   PixMapHandle           imagePixMap,
                                   RgnHandle              imageRgn,
                                   Point                  imageOffsetPt,
                                   DragImageFlags         theImageFlags)                      TWOWORDINLINE(0x7027, 0xABED);
  
  /*
    _________________________________________________________________________________________________________
        
     o ALTERING THE BEHAVIOR OF A DRAG
    _________________________________________________________________________________________________________
  */
  EXTERN_API( OSErr )
  ChangeDragBehaviors             (DragRef                theDrag,
                                   DragBehaviors          inBehaviorsToSet,
                                   DragBehaviors          inBehaviorsToClear)                 TWOWORDINLINE(0x7028, 0xABED);
  
  /*
    _________________________________________________________________________________________________________
        
     o PERFORMING A DRAG
    _________________________________________________________________________________________________________
  */
  EXTERN_API( OSErr )
  TrackDrag                       (DragRef                theDrag,
                                   const EventRecord *    theEvent,
                                   RgnHandle              theRegion)                          TWOWORDINLINE(0x700D, 0xABED);
  
  /*
    _________________________________________________________________________________________________________
        
     o GETTING DRAG ITEM INFORMATION
    _________________________________________________________________________________________________________
  */
  EXTERN_API( OSErr )
  CountDragItems                  (DragRef                theDrag,
                                   UInt16 *               numItems)                           TWOWORDINLINE(0x700E, 0xABED);
  
  EXTERN_API( OSErr )
  GetDragItemReferenceNumber      (DragRef                theDrag,
                                   UInt16                 index,
                                   DragItemRef *          theItemRef)                         TWOWORDINLINE(0x700F, 0xABED);
  
  EXTERN_API( OSErr )
  CountDragItemFlavors            (DragRef                theDrag,
                                   DragItemRef            theItemRef,
                                   UInt16 *               numFlavors)                         TWOWORDINLINE(0x7010, 0xABED);
  
  EXTERN_API( OSErr )
  GetFlavorType                   (DragRef                theDrag,
                                   DragItemRef            theItemRef,
                                   UInt16                 index,
                                   FlavorType *           theType)                            TWOWORDINLINE(0x7011, 0xABED);
  
  EXTERN_API( OSErr )
  GetFlavorFlags                  (DragRef                theDrag,
                                   DragItemRef            theItemRef,
                                   FlavorType             theType,
                                   FlavorFlags *          theFlags)                           TWOWORDINLINE(0x7012, 0xABED);
  
  EXTERN_API( OSErr )
  GetFlavorDataSize               (DragRef                theDrag,
                                   DragItemRef            theItemRef,
                                   FlavorType             theType,
                                   Size *                 dataSize)                           TWOWORDINLINE(0x7013, 0xABED);
  
  EXTERN_API( OSErr )
  GetFlavorData                   (DragRef                theDrag,
                                   DragItemRef            theItemRef,
                                   FlavorType             theType,
                                   void *                 dataPtr,
                                   Size *                 dataSize,
                                   UInt32                 dataOffset)                         TWOWORDINLINE(0x7014, 0xABED);
  
  /*
    _________________________________________________________________________________________________________
        
     o DRAG ITEM BOUNDS
    _________________________________________________________________________________________________________
  */
  
  EXTERN_API( OSErr )
  GetDragItemBounds               (DragRef                theDrag,
                                   DragItemRef            theItemRef,
                                   Rect *                 itemBounds)                         TWOWORDINLINE(0x7015, 0xABED);
  
  EXTERN_API( OSErr )
  SetDragItemBounds               (DragRef                theDrag,
                                   DragItemRef            theItemRef,
                                   const Rect *           itemBounds)                         TWOWORDINLINE(0x7016, 0xABED);
  
  /*
    _________________________________________________________________________________________________________
        
     o DROP LOCATIONS
    _________________________________________________________________________________________________________
  */
  
  EXTERN_API( OSErr )
  GetDropLocation                 (DragRef                theDrag,
                                   AEDesc *               dropLocation)                       TWOWORDINLINE(0x7017, 0xABED);
  
  EXTERN_API( OSErr )
  SetDropLocation                 (DragRef                theDrag,
                                   const AEDesc *         dropLocation)                       TWOWORDINLINE(0x7018, 0xABED);
  
  /*
    _________________________________________________________________________________________________________
        
     o GETTING INFORMATION ABOUT A DRAG
    _________________________________________________________________________________________________________
  */
  
  EXTERN_API( OSErr )
  GetDragAttributes               (DragRef                theDrag,
                                   DragAttributes *       flags)                              TWOWORDINLINE(0x7019, 0xABED);
  
  EXTERN_API( OSErr )
  GetDragMouse                    (DragRef                theDrag,
                                   Point *                mouse,
                                   Point *                globalPinnedMouse)                  TWOWORDINLINE(0x701A, 0xABED);
  
  EXTERN_API( OSErr )
  SetDragMouse                    (DragRef                theDrag,
                                   Point                  globalPinnedMouse)                  TWOWORDINLINE(0x701B, 0xABED);
  
  EXTERN_API( OSErr )
  GetDragOrigin                   (DragRef                theDrag,
                                   Point *                globalInitialMouse)                 TWOWORDINLINE(0x701C, 0xABED);
  
  EXTERN_API( OSErr )
  GetDragModifiers                (DragRef                theDrag,
                                   SInt16 *               modifiers,
                                   SInt16 *               mouseDownModifiers,
                                   SInt16 *               mouseUpModifiers)                   TWOWORDINLINE(0x701D, 0xABED);
  
  /*
    _________________________________________________________________________________________________________
        
     o DRAG HIGHLIGHTING
    _________________________________________________________________________________________________________
  */
  
  EXTERN_API( OSErr )
  ShowDragHilite                  (DragRef                theDrag,
                                   RgnHandle              hiliteFrame,
                                   Boolean                inside)                             TWOWORDINLINE(0x701E, 0xABED);
  
  EXTERN_API( OSErr )
  HideDragHilite                  (DragRef                theDrag)                            TWOWORDINLINE(0x701F, 0xABED);
  
  EXTERN_API( OSErr )
  DragPreScroll                   (DragRef                theDrag,
                                   SInt16                 dH,
                                   SInt16                 dV)                                 TWOWORDINLINE(0x7020, 0xABED);
  
  EXTERN_API( OSErr )
  DragPostScroll                  (DragRef                theDrag)                            TWOWORDINLINE(0x7021, 0xABED);
  
  EXTERN_API( OSErr )
  UpdateDragHilite                (DragRef                theDrag,
                                   RgnHandle              updateRgn)                          TWOWORDINLINE(0x7022, 0xABED);
  
  EXTERN_API( OSErr )
  GetDragHiliteColor              (WindowRef              window,
                                   RGBColor *             color)                              TWOWORDINLINE(0x7026, 0xABED);
  
  /*
    _________________________________________________________________________________________________________
        
     o UTILITIES
    _________________________________________________________________________________________________________
  */
  
  EXTERN_API( Boolean )
  WaitMouseMoved                  (Point                  initialMouse)                       TWOWORDINLINE(0x7023, 0xABED);
  
  EXTERN_API( OSErr )
  ZoomRects                       (const Rect *           fromRect,
                                   const Rect *           toRect,
                                   SInt16                 zoomSteps,
                                   ZoomAcceleration       acceleration)                       TWOWORDINLINE(0x7024, 0xABED);
  
  EXTERN_API( OSErr )
  ZoomRegion                      (RgnHandle              region,
                                   Point                  zoomDistance,
                                   SInt16                 zoomSteps,
                                   ZoomAcceleration       acceleration)                       TWOWORDINLINE(0x7025, 0xABED);
  
  /*
    _________________________________________________________________________________________________________
     o OLD NAMES
       These are provided for compatiblity with older source bases.  It is recommended to not use them since
       they may removed from this interface file at any time.
    _________________________________________________________________________________________________________
  */
  
  typedef DragRef                         DragReference;
  typedef DragItemRef                     ItemReference;
  if OLDROUTINENAMES
  enum {
      dragHasLeftSenderWindow     = kDragHasLeftSenderWindow,     /* drag has left the source window since TrackDrag */
      dragInsideSenderApplication = kDragInsideSenderApplication, /* drag is occurring within the sender application */
      dragInsideSenderWindow      = kDragInsideSenderWindow       /* drag is occurring within the sender window */
  };
  
  enum {
      dragTrackingEnterHandler    = kDragTrackingEnterHandler,    /* drag has entered handler */
      dragTrackingEnterWindow     = kDragTrackingEnterWindow,     /* drag has entered window */
      dragTrackingInWindow        = kDragTrackingInWindow,        /* drag is moving within window */
      dragTrackingLeaveWindow     = kDragTrackingLeaveWindow,     /* drag has exited window */
      dragTrackingLeaveHandler    = kDragTrackingLeaveHandler     /* drag has exited handler */
  };
  
  enum {
      dragRegionBegin             = kDragRegionBegin,             /* initialize drawing */
      dragRegionDraw              = kDragRegionDraw,              /* draw drag feedback */
      dragRegionHide              = kDragRegionHide,              /* hide drag feedback */
      dragRegionIdle              = kDragRegionIdle,              /* drag feedback idle time */
      dragRegionEnd               = kDragRegionEnd                /* end of drawing */
  };
  
  enum {
      zoomNoAcceleration          = kZoomNoAcceleration,          /* use linear interpolation */
      zoomAccelerate              = kZoomAccelerate,              /* ramp up step size */
      zoomDecelerate              = kZoomDecelerate               /* ramp down step size */
  };
  
  enum {
      kDragStandardImage          = kDragStandardTranslucency,    /* 65% image translucency (standard)*/
      kDragDarkImage              = kDragDarkTranslucency,        /* 50% image translucency*/
      kDragDarkerImage            = kDragDarkerTranslucency,      /* 25% image translucency*/
      kDragOpaqueImage            = kDragOpaqueTranslucency       /* 0% image translucency (opaque)*/
  };
  
  endif  /* OLDROUTINENAMES */
  
  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 /* __DRAG__ */
  
  


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.