You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
451 lines
14 KiB
451 lines
14 KiB
/* |
|
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__ */ |
|
|
|
|