mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-04-26 14:10:54 +00:00
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:
parent
d08fdfa221
commit
db98f96fca
5 changed files with 203 additions and 31 deletions
19
ChangeLog
19
ChangeLog
|
@ -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>
|
||||
|
||||
* Tools/make_services.m: Use 'Applications' not 'Apps'.
|
||||
|
|
|
@ -113,9 +113,9 @@ enum {
|
|||
{
|
||||
struct
|
||||
{
|
||||
int event_num;
|
||||
int click;
|
||||
float pressure;
|
||||
int event_num;
|
||||
int click;
|
||||
float pressure;
|
||||
} mouse;
|
||||
struct
|
||||
{
|
||||
|
@ -130,6 +130,12 @@ enum {
|
|||
int tracking_num;
|
||||
void *user_data;
|
||||
} tracking;
|
||||
struct
|
||||
{
|
||||
float deltaX;
|
||||
float deltaY;
|
||||
float deltaZ;
|
||||
} scrollWheel;
|
||||
struct
|
||||
{
|
||||
short sub_type;
|
||||
|
@ -174,6 +180,16 @@ enum {
|
|||
clickCount: (int)clickNum
|
||||
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
|
||||
location: (NSPoint)location
|
||||
modifierFlags: (unsigned int)flags
|
||||
|
|
140
Source/NSEvent.m
140
Source/NSEvent.m
|
@ -188,6 +188,41 @@ static Class eventClass;
|
|||
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
|
||||
location: (NSPoint)location
|
||||
modifierFlags: (unsigned int)flags
|
||||
|
@ -506,31 +541,70 @@ static Class eventClass;
|
|||
/*
|
||||
* 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
|
||||
{
|
||||
if (event_type != NSScrollWheel)
|
||||
if (event_type != NSScrollWheel
|
||||
&& (event_type < NSMouseMoved
|
||||
|| event_type > NSRightMouseDragged))
|
||||
[NSException raise: NSInvalidArgumentException
|
||||
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
|
||||
{
|
||||
if (event_type != NSScrollWheel)
|
||||
if (event_type != NSScrollWheel
|
||||
&& (event_type < NSMouseMoved
|
||||
|| event_type > NSRightMouseDragged))
|
||||
[NSException raise: NSInvalidArgumentException
|
||||
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
|
||||
{
|
||||
if (event_type != NSScrollWheel)
|
||||
if (event_type != NSScrollWheel
|
||||
&& (event_type < NSMouseMoved
|
||||
|| event_type > NSRightMouseDragged))
|
||||
[NSException raise: NSInvalidArgumentException
|
||||
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 NSRightMouseDown:
|
||||
case NSRightMouseUp:
|
||||
case NSMouseMoved:
|
||||
case NSLeftMouseDragged:
|
||||
case NSMiddleMouseDragged:
|
||||
case NSRightMouseDragged:
|
||||
[aCoder encodeValuesOfObjCTypes: "iif", &event_data.mouse.event_num,
|
||||
&event_data.mouse.click, &event_data.mouse.pressure];
|
||||
break;
|
||||
|
@ -586,7 +656,14 @@ static Class eventClass;
|
|||
&event_data.misc.data1, &event_data.misc.data2];
|
||||
break;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -608,10 +685,6 @@ static Class eventClass;
|
|||
case NSMiddleMouseUp:
|
||||
case NSRightMouseDown:
|
||||
case NSRightMouseUp:
|
||||
case NSMouseMoved:
|
||||
case NSLeftMouseDragged:
|
||||
case NSMiddleMouseDragged:
|
||||
case NSRightMouseDragged:
|
||||
[aDecoder decodeValuesOfObjCTypes: "iif", &event_data.mouse.event_num,
|
||||
&event_data.mouse.click, &event_data.mouse.pressure];
|
||||
break;
|
||||
|
@ -643,7 +716,14 @@ static Class eventClass;
|
|||
break;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -691,7 +771,8 @@ static Class eventClass;
|
|||
"systemDefined",
|
||||
"applicationDefined",
|
||||
"periodic",
|
||||
"cursorUpdate"
|
||||
"cursorUpdate",
|
||||
"scrollWheel"
|
||||
};
|
||||
|
||||
switch (event_type)
|
||||
|
@ -702,10 +783,6 @@ static Class eventClass;
|
|||
case NSMiddleMouseUp:
|
||||
case NSRightMouseDown:
|
||||
case NSRightMouseUp:
|
||||
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,"
|
||||
|
@ -757,8 +834,21 @@ static Class eventClass;
|
|||
event_data.misc.sub_type, event_data.misc.data1,
|
||||
event_data.misc.data2];
|
||||
break;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -289,8 +289,10 @@
|
|||
|
||||
- (void) scrollWheel: (NSEvent *)theEvent
|
||||
{
|
||||
// FIXME
|
||||
NSLog(@"Sorry, currently no support for scroll wheel.");
|
||||
if (_next_responder)
|
||||
return [_next_responder scrollWheel: theEvent];
|
||||
else
|
||||
return [self noResponderFor: @selector(scrollWheel:)];
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -292,7 +292,52 @@ static float scrollerWidth;
|
|||
|
||||
- (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
|
||||
|
|
Loading…
Reference in a new issue