Source/NSEvent.h

Headers/gnustep/gui/NSEvent.h
Source/NSResponder.m
Source/NSScrollView.m


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@12908 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
pyr 2002-02-28 21:45:38 +00:00
parent d08fdfa221
commit db98f96fca
5 changed files with 203 additions and 31 deletions

View file

@ -1,3 +1,22 @@
2002-02-28 Pierre-Yves Rivaille <pyrivail@ens-lyon.fr>
* Headers/gnustep/gui/NSEvent.h:
new element in event_data union, provides support for deltaX, deltaY
and deltaZ.
* Source/NSEvent.m
([NSEvent +mouseEventWithType:location:modifierFlags:timestamp:
windowNumber:context:deltaX:deltaY:deltaZ:]):
new method : support for creating event with deltaX, deltaY and deltaZ.
([NSEvent -delta{X, Y, Z}]): methods implemented.
([NSEvent -description]):
([NSEvent -initWithCoder:]):
([NSEvent -encodeWithCoder:]):
suppor for deltaX, deltaY and deltaZ
* Source/NSResponder.m ([NSResponder -scrollWheel:]):
implementation.
* Source/NSScrollView.m ([NSScrollView -scrollWheel:]):
implementation, does scroll the document view.
Thu Feb 28 16:47:58 2002 Nicola Pero <n.pero@mi.flashnet.it> Thu Feb 28 16:47:58 2002 Nicola Pero <n.pero@mi.flashnet.it>
* Tools/make_services.m: Use 'Applications' not 'Apps'. * Tools/make_services.m: Use 'Applications' not 'Apps'.

View file

@ -113,9 +113,9 @@ enum {
{ {
struct struct
{ {
int event_num; int event_num;
int click; int click;
float pressure; float pressure;
} mouse; } mouse;
struct struct
{ {
@ -130,6 +130,12 @@ enum {
int tracking_num; int tracking_num;
void *user_data; void *user_data;
} tracking; } tracking;
struct
{
float deltaX;
float deltaY;
float deltaZ;
} scrollWheel;
struct struct
{ {
short sub_type; short sub_type;
@ -174,6 +180,16 @@ enum {
clickCount: (int)clickNum clickCount: (int)clickNum
pressure: (float)pressureValue; pressure: (float)pressureValue;
+ (NSEvent*) mouseEventWithType: (NSEventType)type
location: (NSPoint)location
modifierFlags: (unsigned int)flags
timestamp: (NSTimeInterval)time
windowNumber: (int)windowNum
context: (NSGraphicsContext*)context
deltaX: (float)deltaX
deltaY: (float)deltaY
deltaZ: (float)deltaZ;
+ (NSEvent*) otherEventWithType: (NSEventType)type + (NSEvent*) otherEventWithType: (NSEventType)type
location: (NSPoint)location location: (NSPoint)location
modifierFlags: (unsigned int)flags modifierFlags: (unsigned int)flags

View file

@ -188,6 +188,41 @@ static Class eventClass;
return e; return e;
} }
+ (NSEvent*) mouseEventWithType: (NSEventType)type
location: (NSPoint)location
modifierFlags: (unsigned int)flags
timestamp: (NSTimeInterval)time
windowNumber: (int)windowNum
context: (NSGraphicsContext*)context
deltaX: (float)deltaX
deltaY: (float)deltaY
deltaZ: (float)deltaZ
{
NSEvent *e;
if ((type < NSMouseMoved || type > NSRightMouseDragged)
&& (type != NSScrollWheel))
[NSException raise: NSInvalidArgumentException
format: @"mouseEvent with wrong type"];
e = (NSEvent*)NSAllocateObject(self, 0, NSDefaultMallocZone());
if (self != eventClass)
e = [e init];
AUTORELEASE(e);
e->event_type = type;
e->location_point = location;
e->modifier_flags = flags;
e->event_time = time;
e->window_num = windowNum;
e->event_context = context;
e->event_data.scrollWheel.deltaX = deltaX;
e->event_data.scrollWheel.deltaY = deltaY;
e->event_data.scrollWheel.deltaZ = deltaZ;
return e;
}
+ (NSEvent*) otherEventWithType: (NSEventType)type + (NSEvent*) otherEventWithType: (NSEventType)type
location: (NSPoint)location location: (NSPoint)location
modifierFlags: (unsigned int)flags modifierFlags: (unsigned int)flags
@ -506,31 +541,70 @@ static Class eventClass;
/* /*
* Scroll event data * Scroll event data
*/ */
/**
<p>
Returns the movement of the mouse on the X axis.
</p>
<p>
This method is only valid for NSMouseMoved, NS*MouseDragged and
NSScrollWheel events, otherwise it will raise an
NSInvalidArgumentException.
</p>
*/
- (float)deltaX - (float)deltaX
{ {
if (event_type != NSScrollWheel) if (event_type != NSScrollWheel
&& (event_type < NSMouseMoved
|| event_type > NSRightMouseDragged))
[NSException raise: NSInvalidArgumentException [NSException raise: NSInvalidArgumentException
format: @"deltaX requested for invalid event type"]; format: @"deltaX requested for invalid event type"];
// FIXME
return 0.0; return event_data.scrollWheel.deltaX;
} }
/**
<p>
Returns the movement of the mouse on the Y axis.
</p>
<p>
This method is only valid for NSMouseMoved, NS*MouseDragged and
NSScrollWheel events, otherwise it will raise an
NSInvalidArgumentException.
</p>
*/
- (float)deltaY - (float)deltaY
{ {
if (event_type != NSScrollWheel) if (event_type != NSScrollWheel
&& (event_type < NSMouseMoved
|| event_type > NSRightMouseDragged))
[NSException raise: NSInvalidArgumentException [NSException raise: NSInvalidArgumentException
format: @"deltaY requested for invalid event type"]; format: @"deltaY requested for invalid event type"];
// FIXME
return 0.0; return event_data.scrollWheel.deltaY;
} }
/**
<p>
Returns the movement of the mouse on the Z axis.
</p>
<p>
This method is only valid for NSMouseMoved, NS*MouseDragged and
NSScrollWheel events, otherwise it will raise an
NSInvalidArgumentException.
</p>
<p>
The value returned is 0.0 in most cases.
</p>
*/
- (float)deltaZ - (float)deltaZ
{ {
if (event_type != NSScrollWheel) if (event_type != NSScrollWheel
&& (event_type < NSMouseMoved
|| event_type > NSRightMouseDragged))
[NSException raise: NSInvalidArgumentException [NSException raise: NSInvalidArgumentException
format: @"deltaZ requested for invalid event type"]; format: @"deltaZ requested for invalid event type"];
// FIXME
return 0.0; return event_data.scrollWheel.deltaZ;
} }
/* /*
@ -552,10 +626,6 @@ static Class eventClass;
case NSMiddleMouseUp: case NSMiddleMouseUp:
case NSRightMouseDown: case NSRightMouseDown:
case NSRightMouseUp: case NSRightMouseUp:
case NSMouseMoved:
case NSLeftMouseDragged:
case NSMiddleMouseDragged:
case NSRightMouseDragged:
[aCoder encodeValuesOfObjCTypes: "iif", &event_data.mouse.event_num, [aCoder encodeValuesOfObjCTypes: "iif", &event_data.mouse.event_num,
&event_data.mouse.click, &event_data.mouse.pressure]; &event_data.mouse.click, &event_data.mouse.pressure];
break; break;
@ -586,7 +656,14 @@ static Class eventClass;
&event_data.misc.data1, &event_data.misc.data2]; &event_data.misc.data1, &event_data.misc.data2];
break; break;
case NSScrollWheel: case NSScrollWheel:
// FIXME case NSMouseMoved:
case NSLeftMouseDragged:
case NSMiddleMouseDragged:
case NSRightMouseDragged:
[aCoder encodeValuesOfObjCTypes: "fff",
&event_data.scrollWheel.deltaX,
&event_data.scrollWheel.deltaY,
&event_data.scrollWheel.deltaZ];
break; break;
} }
} }
@ -608,10 +685,6 @@ static Class eventClass;
case NSMiddleMouseUp: case NSMiddleMouseUp:
case NSRightMouseDown: case NSRightMouseDown:
case NSRightMouseUp: case NSRightMouseUp:
case NSMouseMoved:
case NSLeftMouseDragged:
case NSMiddleMouseDragged:
case NSRightMouseDragged:
[aDecoder decodeValuesOfObjCTypes: "iif", &event_data.mouse.event_num, [aDecoder decodeValuesOfObjCTypes: "iif", &event_data.mouse.event_num,
&event_data.mouse.click, &event_data.mouse.pressure]; &event_data.mouse.click, &event_data.mouse.pressure];
break; break;
@ -643,7 +716,14 @@ static Class eventClass;
break; break;
case NSScrollWheel: case NSScrollWheel:
// FIXME case NSMouseMoved:
case NSLeftMouseDragged:
case NSMiddleMouseDragged:
case NSRightMouseDragged:
[aDecoder decodeValuesOfObjCTypes: "fff",
&event_data.scrollWheel.deltaX,
&event_data.scrollWheel.deltaY,
&event_data.scrollWheel.deltaZ];
break; break;
} }
@ -691,7 +771,8 @@ static Class eventClass;
"systemDefined", "systemDefined",
"applicationDefined", "applicationDefined",
"periodic", "periodic",
"cursorUpdate" "cursorUpdate",
"scrollWheel"
}; };
switch (event_type) switch (event_type)
@ -702,10 +783,6 @@ static Class eventClass;
case NSMiddleMouseUp: case NSMiddleMouseUp:
case NSRightMouseDown: case NSRightMouseDown:
case NSRightMouseUp: case NSRightMouseUp:
case NSMouseMoved:
case NSLeftMouseDragged:
case NSMiddleMouseDragged:
case NSRightMouseDragged:
return [NSString stringWithFormat: return [NSString stringWithFormat:
@"NSEvent: eventType = %s, point = { %f, %f }, modifiers = %u," @"NSEvent: eventType = %s, point = { %f, %f }, modifiers = %u,"
@" time = %f, window = %d, dpsContext = %p," @" time = %f, window = %d, dpsContext = %p,"
@ -757,8 +834,21 @@ static Class eventClass;
event_data.misc.sub_type, event_data.misc.data1, event_data.misc.sub_type, event_data.misc.data1,
event_data.misc.data2]; event_data.misc.data2];
break; break;
case NSScrollWheel: case NSScrollWheel:
// FIXME case NSMouseMoved:
case NSLeftMouseDragged:
case NSMiddleMouseDragged:
case NSRightMouseDragged:
return [NSString stringWithFormat:
@"NSEvent: eventType = %s, point = { %f, %f }, modifiers = %u,"
@" time = %f, window = %d, dpsContext = %p,"
@" deltaX = %f, deltaY = %f, deltaZ = %f",
eventTypes[event_type], location_point.x, location_point.y,
modifier_flags, event_time, window_num, event_context,
event_data.scrollWheel.deltaX,
event_data.scrollWheel.deltaY,
event_data.scrollWheel.deltaZ];
break; break;
} }

View file

@ -289,8 +289,10 @@
- (void) scrollWheel: (NSEvent *)theEvent - (void) scrollWheel: (NSEvent *)theEvent
{ {
// FIXME if (_next_responder)
NSLog(@"Sorry, currently no support for scroll wheel."); return [_next_responder scrollWheel: theEvent];
else
return [self noResponderFor: @selector(scrollWheel:)];
} }
/* /*

View file

@ -292,7 +292,52 @@ static float scrollerWidth;
- (void) scrollWheel: (NSEvent *)theEvent - (void) scrollWheel: (NSEvent *)theEvent
{ {
// FIXME NSRect clipViewBounds = [_contentView bounds];
float deltaY = [theEvent deltaY];
float amount;
NSPoint point = clipViewBounds.origin;
if (([theEvent modifierFlags] & NSAlternateKeyMask) == NSAlternateKeyMask)
{
amount = - (clipViewBounds.size.height - _vPageScroll) * deltaY;
}
else
{
amount = - _vLineScroll * deltaY;
}
if (!_contentView->_rFlags.flipped_view)
{
/* If view is flipped reverse the scroll direction */
amount = -amount;
}
NSDebugLog (@"increment/decrement: amount = %f, flipped = %d",
amount, _contentView->_rFlags.flipped_view);
point.y = clipViewBounds.origin.y + amount;
if (_hasHeaderView)
{
NSPoint scrollTo;
scrollTo = [_headerClipView bounds].origin;
scrollTo.x += point.x - clipViewBounds.origin.x;
[_headerClipView scrollToPoint: scrollTo];
}
[_contentView scrollToPoint: point];
if (_rulersVisible == YES)
{
if (_hasHorizRuler)
{
[_horizRuler setNeedsDisplay: YES];
}
if (_hasVertRuler)
{
[_vertRuler setNeedsDisplay: YES];
}
}
} }
- (void) _doScroll: (NSScroller*)scroller - (void) _doScroll: (NSScroller*)scroller