source-engine/common/quicktime_win32/CursorDevices.h

452 lines
14 KiB
C
Raw Normal View History

2020-04-22 16:56:21 +00:00
/*
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__ */