topical media & game development

talk show tell print

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



  /*
       File:       CursorDevices.h
   
       Contains:   Cursor Devices (mouse/trackball/etc) Interfaces.
   
       Version:    Technology: System 7.5
                   Release:    QuickTime 6.0.2
   
       Copyright:  (c) 1993-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 __CURSORDEVICES__
  define __CURSORDEVICES__
  
  ifndef __MACTYPES__
  include <MacTypes.h>
  endif
  
  ifndef __MIXEDMODE__
  include <MixedMode.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
  
  /*
                          * * *  I M P O R T A N T  * * * 
  
              You will need CursorDevicesGlue.o to use CDM from PowerPC
  
      In order to use the Cursor Devices Manager (CDM) on PowerPC systems, you must 
      link with the file CursorDevicesGlue.o and InterfaceLib 1.1.3.  This is necessary
      because the original MixedMode transition code for CDM in InterfaceLib in ROM
      was wrong.  The code in CursorDevicesGlue.o will check to see if the ROM has
      been fixed and calls through to it if so.  If it detects that the ROM has not
      been fixed, it uses its own implementation of the CDM MixedMode transition 
      routines. 
      
  */
  
  typedef short                           ButtonOpcode;
  /* ButtonOpcodes */
  enum {
      kButtonNoOp                 = 0,                            /* No action for this button */
      kButtonSingleClick          = 1,                            /* Normal mouse button */
      kButtonDoubleClick          = 2,                            /* Click-release-click when pressed */
      kButtonClickLock            = 3                             /* Click on press, release on next press */
  };
  
  enum {
      kButtonCustom               = 6                             /* Custom behavior, data = CursorDeviceCustomButtonUPP */
  };
  
  /* Device Classes */
  enum {
      kDeviceClassAbsolute        = 0,                            /* a flat-response device */
      kDeviceClassMouse           = 1,                            /* mechanical or optical mouse */
      kDeviceClassTrackball       = 2,                            /* trackball */
      kDeviceClassTrackPad        = 3
  };
  
  enum {
      kDeviceClass3D              = 6                             /* a 3D pointing device */
  };
  
  /* Structures used in Cursor Device Manager calls */
  
  struct CursorData {
      struct CursorData *             nextCursorData;             /* next in global list */
      Ptr                             displayInfo;                /* unused (reserved for future) */
      Fixed                           whereX;                     /* horizontal position */
      Fixed                           whereY;                     /* vertical position */
      Point                           where;                      /* the pixel position */
      Boolean                         isAbs;                      /* has been stuffed with absolute coords */
      UInt8                           buttonCount;                /* number of buttons currently pressed */
      long                            screenRes;                  /* pixels per inch on the current display */
      short                           privateFields[22];          /* fields use internally by CDM */
  };
  typedef struct CursorData               CursorData;
  typedef CursorData *                    CursorDataPtr;
  
  struct CursorDevice {
      struct CursorDevice *           nextCursorDevice;           /* pointer to next record in linked list */
      CursorData *                    whichCursor;                /* pointer to data for target cursor */
      long                            refCon;                     /* application-defined */
      long                            unused;                     /* reserved for future */
      OSType                          devID;                      /* device identifier (from ADB reg 1) */
      Fixed                           resolution;                 /* units/inch (orig. from ADB reg 1) */
      UInt8                           devClass;                   /* device class (from ADB reg 1) */
      UInt8                           cntButtons;                 /* number of buttons (from ADB reg 1) */
      UInt8                           filler1;                    /* reserved for future */
      UInt8                           buttons;                    /* state of all buttons */
      UInt8                           buttonOp[8];                /* action performed per button */
      unsigned long                   buttonTicks[8];             /* ticks when button last went up (for debounce) */
      long                            buttonData[8];              /* data for the button operation */
      unsigned long                   doubleClickTime;            /* device-specific double click speed */
      Fixed                           acceleration;               /* current acceleration */
      short                           privateFields[15];          /* fields used internally to CDM */
  };
  typedef struct CursorDevice             CursorDevice;
  typedef CursorDevice *                  CursorDevicePtr;
  /* for use with CursorDeviceButtonOp when opcode = kButtonCustom */
  typedef CALLBACK_API( void , CursorDeviceCustomButtonProcPtr )(CursorDevicePtr ourDevice, short button);
  /*
      WARNING: CursorDeviceCustomButtonProcPtr uses register based parameters under classic 68k
               and cannot be written in a high-level language without 
               the help of mixed mode or assembly glue.
  */
  typedef REGISTER_UPP_TYPE(CursorDeviceCustomButtonProcPtr)      CursorDeviceCustomButtonUPP;
  if OPAQUE_UPP_TYPES
  if CALL_NOT_IN_CARBON
      EXTERN_API(CursorDeviceCustomButtonUPP)
      NewCursorDeviceCustomButtonUPP    (CursorDeviceCustomButtonProcPtr userRoutine);
  
      EXTERN_API(void)
      DisposeCursorDeviceCustomButtonUPP    (CursorDeviceCustomButtonUPP userUPP);
  
      EXTERN_API(void)
      InvokeCursorDeviceCustomButtonUPP    (CursorDevicePtr   ourDevice,
                                      short                   button,
                                      CursorDeviceCustomButtonUPP userUPP);
  
  endif  /* CALL_NOT_IN_CARBON */
  
  else
      enum { uppCursorDeviceCustomButtonProcInfo = 0x000ED802 };      /* register no_return_value Func(4_bytes:A2, 2_bytes:D3) */
      #define NewCursorDeviceCustomButtonUPP(userRoutine)             (CursorDeviceCustomButtonUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppCursorDeviceCustomButtonProcInfo, GetCurrentArchitecture())
      #define DisposeCursorDeviceCustomButtonUPP(userUPP)             DisposeRoutineDescriptor(userUPP)
      #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
      /* InvokeCursorDeviceCustomButtonUPP can't be called from classic 68k without glue code */
      #else
          #define InvokeCursorDeviceCustomButtonUPP(ourDevice, button, userUPP)  CALL_TWO_PARAMETER_UPP((userUPP), uppCursorDeviceCustomButtonProcInfo, (ourDevice), (button))
      #endif
  endif
  /* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */
  define NewCursorDeviceCustomButtonProc(userRoutine)            NewCursorDeviceCustomButtonUPP(userRoutine)
  define CallCursorDeviceCustomButtonProc(userRoutine, ourDevice, button) InvokeCursorDeviceCustomButtonUPP(ourDevice, button, userRoutine)
  if CALL_NOT_IN_CARBON
  EXTERN_API( OSErr )
  CursorDeviceMove                (CursorDevicePtr        ourDevice,
                                   long                   deltaX,
                                   long                   deltaY)                             TWOWORDINLINE(0x7000, 0xAADB);
  
  EXTERN_API( OSErr )
  CursorDeviceMoveTo              (CursorDevicePtr        ourDevice,
                                   long                   absX,
                                   long                   absY)                               TWOWORDINLINE(0x7001, 0xAADB);
  
  EXTERN_API( OSErr )
  CursorDeviceFlush               (CursorDevicePtr        ourDevice)                          TWOWORDINLINE(0x7002, 0xAADB);
  
  EXTERN_API( OSErr )
  CursorDeviceButtons             (CursorDevicePtr        ourDevice,
                                   short                  buttons)                            TWOWORDINLINE(0x7003, 0xAADB);
  
  EXTERN_API( OSErr )
  CursorDeviceButtonDown          (CursorDevicePtr        ourDevice)                          TWOWORDINLINE(0x7004, 0xAADB);
  
  EXTERN_API( OSErr )
  CursorDeviceButtonUp            (CursorDevicePtr        ourDevice)                          TWOWORDINLINE(0x7005, 0xAADB);
  
  EXTERN_API( OSErr )
  CursorDeviceButtonOp            (CursorDevicePtr        ourDevice,
                                   short                  buttonNumber,
                                   ButtonOpcode           opcode,
                                   long                   data)                               TWOWORDINLINE(0x7006, 0xAADB);
  
  EXTERN_API( OSErr )
  CursorDeviceSetButtons          (CursorDevicePtr        ourDevice,
                                   short                  numberOfButtons)                    TWOWORDINLINE(0x7007, 0xAADB);
  
  EXTERN_API( OSErr )
  CursorDeviceSetAcceleration     (CursorDevicePtr        ourDevice,
                                   Fixed                  acceleration)                       TWOWORDINLINE(0x7008, 0xAADB);
  
  EXTERN_API( OSErr )
  CursorDeviceDoubleTime          (CursorDevicePtr        ourDevice,
                                   long                   durationTicks)                      TWOWORDINLINE(0x7009, 0xAADB);
  
  EXTERN_API( OSErr )
  CursorDeviceUnitsPerInch        (CursorDevicePtr        ourDevice,
                                   Fixed                  resolution)                         TWOWORDINLINE(0x700A, 0xAADB);
  
  EXTERN_API( OSErr )
  CursorDeviceNextDevice          (CursorDevicePtr *      ourDevice)                          TWOWORDINLINE(0x700B, 0xAADB);
  
  EXTERN_API( OSErr )
  CursorDeviceNewDevice           (CursorDevicePtr *      ourDevice)                          TWOWORDINLINE(0x700C, 0xAADB);
  
  EXTERN_API( OSErr )
  CursorDeviceDisposeDevice       (CursorDevicePtr        ourDevice)                          TWOWORDINLINE(0x700D, 0xAADB);
  
  /*
                         * * *  W A R N I N G  * * * 
                  
      The routines CrsrDevMoveTo and CrsrDevNextDevice are no longer needed.
      They were added as a work around until the glue code CursorDevicesGlue.o
      was created.  Please use the functions CursorDeviceMoveTo and
      CursorDeviceNextDevice instead.
  
  */
  endif  /* CALL_NOT_IN_CARBON */
  
  if OLDROUTINENAMES
  if CALL_NOT_IN_CARBON
  EXTERN_API( OSErr )
  CrsrDevMoveTo                   (CursorDevicePtr        ourDevice,
                                   long                   absX,
                                   long                   absY)                               TWOWORDINLINE(0x7001, 0xAADB);
  
  EXTERN_API( OSErr )
  CrsrDevNextDevice               (CursorDevicePtr *      ourDevice)                          TWOWORDINLINE(0x700B, 0xAADB);
  
  endif  /* CALL_NOT_IN_CARBON */
  
  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 /* __CURSORDEVICES__ */
  
  


(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.