home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OpenStep 4.2J (Developer)
/
os42jdev.iso
/
NextDeveloper
/
Headers
/
driverkit
/
eventProtocols.h
< prev
next >
Wrap
Text File
|
1995-07-27
|
6KB
|
196 lines
/* Copyright (c) 1992 NeXT Computer, Inc. All rights reserved.
*
* eventProtocols.h - ObjC protocols used by the Event Driver and it's clients.
*
* HISTORY
* 31 Mar 1992 Mike Paquette at NeXT
* Created.
* 4 Aug 1993 Erik Kay at NeXT
* API cleanup
*/
#import <driverkit/generalFuncs.h>
#import <driverkit/driverTypes.h>
#import <bsd/dev/ev_types.h> /* Basic types for event system */
#import <bsd/dev/event.h> /* Event flags */
#import <objc/objc.h>
/*
* Methods exported by the EventDriver to event source objects.
*
* The IOEventSourceClient protocol is used by event source objects to
* post state changes into the event driver.
* The event driver implements this protocol.
*/
@protocol IOEventSourceClient
/*
* Called when another client wishes to assume ownership of calling
* IOEventSource. This happens when a client attempts a becomeOwner: on a
* source which is owned by the callee of this method.
*
* Returns:
* IO_R_SUCCESS ==> It's OK to give ownership of the source to other client.
* In this case, callee no longer owns the source.
* IO_R_BUSY ==> Don't transfer ownership.
*
* Note that this call occurs during (i.e., before the return of) a
* becomeOwner: call to the caller of this method.
*/
- (IOReturn)relinquishOwnershipRequest : source;
/*
* Method by which a client, who has registered "intent to own" via
* desireOwnership:client, is notified that the calling device is available.
* Client will typically call becomeOwner: during this call.
*/
- (void)canBecomeOwner : source;
/* Mouse event reporting */
- relativePointerEvent:(int)buttons deltaX:(int)dx deltaY:(int)dy;
- relativePointerEvent:(int)buttons
deltaX:(int)dx
deltaY:(int)dy
atTime:(ns_time_t)ts;
/* Tablet event reporting */
- absolutePointerEvent:(int)buttons
at:(Point *)newLoc
inProximity:(BOOL)proximity;
- absolutePointerEvent:(int)buttons
at:(Point *)newLoc
inProximity:(BOOL)proximity
withPressure:(int)pressure;
- absolutePointerEvent:(int)buttons
at:(Point *)newLoc
inProximity:(BOOL)proximity
withPressure:(int)pressure
withAngle:(int)stylusAngle
atTime:(ns_time_t)ts;
/* Keyboard Event reporting */
- keyboardEvent:(unsigned)eventType
flags:(unsigned)flags
keyCode:(unsigned)key
charCode:(unsigned)charCode
charSet:(unsigned)charSet
originalCharCode:(unsigned)origCharCode
originalCharSet:(unsigned)origCharSet
repeat:(BOOL)repeat
atTime:(ns_time_t)ts;
- keyboardSpecialEvent:(unsigned)eventType
flags:(unsigned)flags
keyCode:(unsigned)key
specialty:(unsigned)flavor
atTime:(ns_time_t)ts;
- updateEventFlags:(unsigned)flags; /* Does not generate events */
/* Return current event flag values */
- (int)eventFlags;
@end /* IOEventSourceClient */
/*
* The EventClient API lists generally useful methods exported by the Event
* driver. These can be used by Event sources, or other users of the event
* system within the same address space.
*/
@protocol IOEventThread
/*
* Event clients may need to use an I/O thread from time to time.
* Rather than have each instance running it's own thread, we provide
* a callback mechanism to let all the instances share a common Event I/O
* thread running in the IOTask space, and managed by the Event Driver.
*/
- (IOReturn)sendIOThreadMsg: (SEL)selector // Selector to call back on
to : (id)instance // Instance to call back
with : (id)data; // Data to pass back
/* Returns self, or nil on error. */
- sendIOThreadAsyncMsg: (SEL)selector // Selector to call back on
to : (id)instance // Instance to call back
with : (id)data; // Data to pass back
@end /* IOEventThread */
/*
* Methods exported by IOEventSource objects.
*/
@protocol IOEventSourceExported
/*
* Register for event dispatch via IOEventSourceClient protocol. Returns
* IO_R_SUCCESS if successful, else IO_R_BUSY. The relinquishOwnershipRequest:
* method may be called on another client during the execution of this method.
*/
- (IOReturn)becomeOwner : client;
/*
* Relinquish ownership. Returns IO_R_BUSY if caller is not current owner.
*/
- (IOReturn)relinquishOwnership : client;
/*
* Request notification (via canBecomeOwner:) when relinquishOwnership: is
* called. This allows one potential client to place itself "next in line"
* for ownership. The queue is only one deep.
*/
- (IOReturn)desireOwnership : client;
@end /* IOEventSourceExported */
/*
* Methods exported by the EventDriver for display systems.
*
* The screenRegister protocol is used by frame buffer drivers to register
* themselves with the Event Driver. These methods are called in response
* to an _IOGetParameterInIntArray() call with "IO_Framebuffer_Register" or
* "IO_Framebuffer_Unregister".
*/
@protocol IOScreenRegistration
- (int) registerScreen: (id)instance
bounds:(Bounds *)bp
shmem:(void **)addr
size:(int *)size;
- (void) unregisterScreen:(int)token;
@end /* IOScreenRegistration */
/*
* Methods exported by compliant frame buffer drivers to the Event Driver.
*
* Any frame buffer driver which will be used by the Window Server should
* implement this protocol. The methods in this protocol are invoked by
* the Event Driver on command from the Window Server and from the pointer
* management software.
*
* The frame field is an integer index into the driver's private array of
* cursor bitmaps. It is used to select the cursor to be displayed.
* The token field is a small integer as returned by registerScreen, which
* indicates which of the driver's screens should be used for drawing.
*/
@protocol IOScreenEvents
- (port_t) devicePort;
- hideCursor: (int)token;
- moveCursor:(Point*)cursorLoc frame:(int)frame token:(int)t;
- showCursor:(Point*)cursorLoc frame:(int)frame token:(int)t;
- setBrightness:(int)level token:(int)t;
@end /* IOScreenEvents */
@protocol IOWorkspaceBounds
/*
* Absolute position input devices and some specialized output devices
* may need to know the bounding rectangle for all attached displays.
* The following method returns a Bounds* for the workspace. Please note
* that the bounds are kept as signed values, and that on a multi-display
* system the minx and miny values may very well be negative.
*/
- (Bounds *)workspaceBounds;
@end