452 lines
14 KiB
C
452 lines
14 KiB
C
/*
|
|
File: CursorDevices.h
|
|
|
|
Contains: Cursor Devices (mouse/trackball/etc) Interfaces.
|
|
|
|
Version: Technology: System 7.5
|
|
Release: QuickTime 7.3
|
|
|
|
Copyright: (c) 2007 (c) 1993-1999 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_REGISTER68K( void , CursorDeviceCustomButtonProcPtr, (CursorDevicePtr ourDevice, short button) );
|
|
typedef REGISTER_UPP_TYPE(CursorDeviceCustomButtonProcPtr) CursorDeviceCustomButtonUPP;
|
|
#if CALL_NOT_IN_CARBON
|
|
/*
|
|
* NewCursorDeviceCustomButtonUPP()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: available as macro/inline
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( CursorDeviceCustomButtonUPP )
|
|
NewCursorDeviceCustomButtonUPP(CursorDeviceCustomButtonProcPtr userRoutine);
|
|
#if !OPAQUE_UPP_TYPES
|
|
enum { uppCursorDeviceCustomButtonProcInfo = 0x000ED802 }; /* register no_return_value Func(4_bytes:A2, 2_bytes:D3) */
|
|
#ifdef __cplusplus
|
|
inline DEFINE_API_C(CursorDeviceCustomButtonUPP) NewCursorDeviceCustomButtonUPP(CursorDeviceCustomButtonProcPtr userRoutine) { return (CursorDeviceCustomButtonUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppCursorDeviceCustomButtonProcInfo, GetCurrentArchitecture()); }
|
|
#else
|
|
#define NewCursorDeviceCustomButtonUPP(userRoutine) (CursorDeviceCustomButtonUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppCursorDeviceCustomButtonProcInfo, GetCurrentArchitecture())
|
|
#endif
|
|
#endif
|
|
|
|
/*
|
|
* DisposeCursorDeviceCustomButtonUPP()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: available as macro/inline
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( void )
|
|
DisposeCursorDeviceCustomButtonUPP(CursorDeviceCustomButtonUPP userUPP);
|
|
#if !OPAQUE_UPP_TYPES
|
|
#ifdef __cplusplus
|
|
inline DEFINE_API_C(void) DisposeCursorDeviceCustomButtonUPP(CursorDeviceCustomButtonUPP userUPP) { DisposeRoutineDescriptor((UniversalProcPtr)userUPP); }
|
|
#else
|
|
#define DisposeCursorDeviceCustomButtonUPP(userUPP) DisposeRoutineDescriptor(userUPP)
|
|
#endif
|
|
#endif
|
|
|
|
/*
|
|
* InvokeCursorDeviceCustomButtonUPP()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: available as macro/inline
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( void )
|
|
InvokeCursorDeviceCustomButtonUPP(
|
|
CursorDevicePtr ourDevice,
|
|
short button,
|
|
CursorDeviceCustomButtonUPP userUPP);
|
|
#if !OPAQUE_UPP_TYPES && (!TARGET_OS_MAC || !TARGET_CPU_68K || TARGET_RT_MAC_CFM)
|
|
#ifdef __cplusplus
|
|
inline DEFINE_API_C(void) InvokeCursorDeviceCustomButtonUPP(CursorDevicePtr ourDevice, short button, CursorDeviceCustomButtonUPP userUPP) { CALL_TWO_PARAMETER_UPP(userUPP, uppCursorDeviceCustomButtonProcInfo, ourDevice, button); }
|
|
#else
|
|
#define InvokeCursorDeviceCustomButtonUPP(ourDevice, button, userUPP) CALL_TWO_PARAMETER_UPP((userUPP), uppCursorDeviceCustomButtonProcInfo, (ourDevice), (button))
|
|
#endif
|
|
#endif
|
|
|
|
#endif /* CALL_NOT_IN_CARBON */
|
|
|
|
#if CALL_NOT_IN_CARBON || OLDROUTINENAMES
|
|
/* support for pre-Carbon UPP routines: New...Proc and Call...Proc */
|
|
#define NewCursorDeviceCustomButtonProc(userRoutine) NewCursorDeviceCustomButtonUPP(userRoutine)
|
|
#define CallCursorDeviceCustomButtonProc(userRoutine, ourDevice, button) InvokeCursorDeviceCustomButtonUPP(ourDevice, button, userRoutine)
|
|
#endif /* CALL_NOT_IN_CARBON */
|
|
|
|
#if CALL_NOT_IN_CARBON
|
|
/*
|
|
* CursorDeviceMove()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API( OSErr )
|
|
CursorDeviceMove(
|
|
CursorDevicePtr ourDevice,
|
|
long deltaX,
|
|
long deltaY) TWOWORDINLINE(0x7000, 0xAADB);
|
|
|
|
|
|
/*
|
|
* CursorDeviceMoveTo()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API( OSErr )
|
|
CursorDeviceMoveTo(
|
|
CursorDevicePtr ourDevice,
|
|
long absX,
|
|
long absY) TWOWORDINLINE(0x7001, 0xAADB);
|
|
|
|
|
|
/*
|
|
* CursorDeviceFlush()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API( OSErr )
|
|
CursorDeviceFlush(CursorDevicePtr ourDevice) TWOWORDINLINE(0x7002, 0xAADB);
|
|
|
|
|
|
/*
|
|
* CursorDeviceButtons()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API( OSErr )
|
|
CursorDeviceButtons(
|
|
CursorDevicePtr ourDevice,
|
|
short buttons) TWOWORDINLINE(0x7003, 0xAADB);
|
|
|
|
|
|
/*
|
|
* CursorDeviceButtonDown()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API( OSErr )
|
|
CursorDeviceButtonDown(CursorDevicePtr ourDevice) TWOWORDINLINE(0x7004, 0xAADB);
|
|
|
|
|
|
/*
|
|
* CursorDeviceButtonUp()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API( OSErr )
|
|
CursorDeviceButtonUp(CursorDevicePtr ourDevice) TWOWORDINLINE(0x7005, 0xAADB);
|
|
|
|
|
|
/*
|
|
* CursorDeviceButtonOp()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API( OSErr )
|
|
CursorDeviceButtonOp(
|
|
CursorDevicePtr ourDevice,
|
|
short buttonNumber,
|
|
ButtonOpcode opcode,
|
|
long data) TWOWORDINLINE(0x7006, 0xAADB);
|
|
|
|
|
|
/*
|
|
* CursorDeviceSetButtons()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API( OSErr )
|
|
CursorDeviceSetButtons(
|
|
CursorDevicePtr ourDevice,
|
|
short numberOfButtons) TWOWORDINLINE(0x7007, 0xAADB);
|
|
|
|
|
|
/*
|
|
* CursorDeviceSetAcceleration()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API( OSErr )
|
|
CursorDeviceSetAcceleration(
|
|
CursorDevicePtr ourDevice,
|
|
Fixed acceleration) TWOWORDINLINE(0x7008, 0xAADB);
|
|
|
|
|
|
/*
|
|
* CursorDeviceDoubleTime()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API( OSErr )
|
|
CursorDeviceDoubleTime(
|
|
CursorDevicePtr ourDevice,
|
|
long durationTicks) TWOWORDINLINE(0x7009, 0xAADB);
|
|
|
|
|
|
/*
|
|
* CursorDeviceUnitsPerInch()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API( OSErr )
|
|
CursorDeviceUnitsPerInch(
|
|
CursorDevicePtr ourDevice,
|
|
Fixed resolution) TWOWORDINLINE(0x700A, 0xAADB);
|
|
|
|
|
|
/*
|
|
* CursorDeviceNextDevice()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API( OSErr )
|
|
CursorDeviceNextDevice(CursorDevicePtr * ourDevice) TWOWORDINLINE(0x700B, 0xAADB);
|
|
|
|
|
|
/*
|
|
* CursorDeviceNewDevice()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API( OSErr )
|
|
CursorDeviceNewDevice(CursorDevicePtr * ourDevice) TWOWORDINLINE(0x700C, 0xAADB);
|
|
|
|
|
|
/*
|
|
* CursorDeviceDisposeDevice()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
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
|
|
/*
|
|
* CrsrDevMoveTo()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: in InterfaceLib 8.5 and later
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API( OSErr )
|
|
CrsrDevMoveTo(
|
|
CursorDevicePtr ourDevice,
|
|
long absX,
|
|
long absY) TWOWORDINLINE(0x7001, 0xAADB);
|
|
|
|
|
|
/*
|
|
* CrsrDevNextDevice()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: in InterfaceLib 8.5 and later
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
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__ */
|
|
|