diff options
| author | Geenz <geenz@geenzo.com> | 2013-03-19 06:32:56 -0400 | 
|---|---|---|
| committer | Geenz <geenz@geenzo.com> | 2013-03-19 06:32:56 -0400 | 
| commit | ebe320e7c3579241e2e034a424ade9f087523b75 (patch) | |
| tree | 807e42d7930994c029bf173919303a9c39be76c1 | |
| parent | ad26f3c39002b6043e5fc4e00f9793e0f0e4941c (diff) | |
Refactored LLNSWindow and LLOpenGLView significantly.  All input goes through LLOpenGLView now.
| -rw-r--r-- | indra/llwindow/llopenglview-objc.h | 6 | ||||
| -rw-r--r-- | indra/llwindow/llopenglview-objc.mm | 290 | 
2 files changed, 80 insertions, 216 deletions
| diff --git a/indra/llwindow/llopenglview-objc.h b/indra/llwindow/llopenglview-objc.h index c144831da4..5134063193 100644 --- a/indra/llwindow/llopenglview-objc.h +++ b/indra/llwindow/llopenglview-objc.h @@ -19,6 +19,7 @@  {  	std::string mLastDraggedUrl;  	unsigned int mModifiers; +	float mMousePos[2];  }  - (id) initWithSamples:(NSUInteger)samples;  - (id) initWithSamples:(NSUInteger)samples andVsync:(BOOL)vsync; @@ -41,10 +42,7 @@  @end -@interface LLNSWindow : NSWindow { -	float mMousePos[2]; -	unsigned int mModifiers; -} +@interface LLNSWindow : NSWindow  - (NSPoint)convertToScreenFromLocalPoint:(NSPoint)point relativeToView:(NSView *)view;  - (NSPoint)flipPoint:(NSPoint)aPoint; diff --git a/indra/llwindow/llopenglview-objc.mm b/indra/llwindow/llopenglview-objc.mm index d568ed2fe5..45a5f24481 100644 --- a/indra/llwindow/llopenglview-objc.mm +++ b/indra/llwindow/llopenglview-objc.mm @@ -94,7 +94,6 @@  - (id) initWithFrame:(NSRect)frame withSamples:(NSUInteger)samples andVsync:(BOOL)vsync  { -	[[self window] makeFirstResponder:self];  	[self registerForDraggedTypes:[NSArray arrayWithObject:NSURLPboardType]];  	[self initWithFrame:frame]; @@ -188,102 +187,102 @@  // Various events can be intercepted by our view, thus not reaching our window.  // Intercept these events, and pass them to the window as needed. - Geenz -- (void) mouseDragged:(NSEvent *)theEvent +- (void) mouseDown:(NSEvent *)theEvent  { -	[_window mouseDragged:theEvent]; +	if ([theEvent clickCount] >= 2) +	{ +		callDoubleClick(mMousePos, mModifiers); +	} else if ([theEvent clickCount] == 1) { +		callLeftMouseDown(mMousePos, mModifiers); +	}  } -- (void) scrollWheel:(NSEvent *)theEvent +- (void) mouseUp:(NSEvent *)theEvent  { -	[_window scrollWheel:theEvent]; +	callLeftMouseUp(mMousePos, mModifiers);  } -- (void) mouseDown:(NSEvent *)theEvent +- (void) rightMouseDown:(NSEvent *)theEvent  { -	[self becomeFirstResponder]; -	[_window mouseDown:theEvent]; +	callRightMouseDown(mMousePos, mModifiers);  } -- (void) mouseUp:(NSEvent *)theEvent +- (void) rightMouseUp:(NSEvent *)theEvent  { -	[_window mouseUp:theEvent]; +	callRightMouseUp(mMousePos, mModifiers);  } -- (void) rightMouseDown:(NSEvent *)theEvent +- (void)mouseMoved:(NSEvent *)theEvent  { -	[_window rightMouseDown:theEvent]; +	float mouseDeltas[2] = { +		[theEvent deltaX], +		[theEvent deltaY] +	}; +	 +	callDeltaUpdate(mouseDeltas, 0); +	 +	NSPoint mPoint = [theEvent locationInWindow]; +	mMousePos[0] = mPoint.x; +	mMousePos[1] = mPoint.y; +	callMouseMoved(mMousePos, 0);  } -- (void) rightMouseUp:(NSEvent *)theEvent +// NSWindow doesn't trigger mouseMoved when the mouse is being clicked and dragged. +// Use mouseDragged for situations like this to trigger our movement callback instead. + +- (void) mouseDragged:(NSEvent *)theEvent  { -	[_window rightMouseUp:theEvent]; +	// Trust the deltas supplied by NSEvent. +	// The old CoreGraphics APIs we previously relied on are now flagged as obsolete. +	// NSEvent isn't obsolete, and provides us with the correct deltas. +	float mouseDeltas[2] = { +		[theEvent deltaX], +		[theEvent deltaY] +	}; +	 +	callDeltaUpdate(mouseDeltas, 0); +	 +	NSPoint mPoint = [theEvent locationInWindow]; +	mMousePos[0] = mPoint.x; +	mMousePos[1] = mPoint.y; +	callMouseMoved(mMousePos, 0);  }  - (void) otherMouseDown:(NSEvent *)theEvent  { -	[_window otherMouseDown:theEvent]; +	callMiddleMouseDown(mMousePos, mModifiers);  }  - (void) otherMouseUp:(NSEvent *)theEvent  { -	[_window otherMouseUp:theEvent]; +	callMiddleMouseUp(mMousePos, mModifiers); +} + +- (void) otherMouseDragged:(NSEvent *)theEvent +{ +	 +} + +- (void) scrollWheel:(NSEvent *)theEvent +{ +	callScrollMoved(-[theEvent deltaY]); +} + +- (void) mouseExited:(NSEvent *)theEvent +{ +	callMouseExit();  }  - (void) keyUp:(NSEvent *)theEvent  { -	[_window keyUp:theEvent]; +	callKeyUp([theEvent keyCode], mModifiers);  }  - (void) keyDown:(NSEvent *)theEvent  {  	[[self inputContext] handleEvent:theEvent];  	uint keycode = [theEvent keyCode]; -	 -	switch (keycode) { -		case 0x7b: -		case 0x7c: -		case 0x7d: -		case 0x7e: -			callKeyDown(keycode, mModifiers); -			break; -			 -		default: -			callKeyDown(keycode, mModifiers); -			NSString *chars = [theEvent characters]; -			for (uint i = 0; i < [chars length]; i++) { -				// Enter and Return are special cases. -				unichar returntest = [chars characterAtIndex:i]; -				if ((returntest == NSCarriageReturnCharacter || returntest == NSEnterCharacter) && -					!([theEvent modifierFlags] & NSCommandKeyMask) && -					!([theEvent modifierFlags] & NSAlternateKeyMask) && -					!([theEvent modifierFlags] & NSControlKeyMask)) -				{ -					callUnicodeCallback(13, 0); -				} else { -					// The command key being pressed is also a special case. -					// Control + <character> produces an ASCII control character code. -					// Command + <character> produces just the character's code. -					// Check to see if the command key is pressed, then filter through the different character ranges that are relevant to control characters, and subtract the appropriate range. -					if ([theEvent modifierFlags] & NSCommandKeyMask) -					{ -						if (returntest >= 64 && returntest <= 95) -						{ -							callUnicodeCallback(returntest - 63, mModifiers); -						} else if (returntest >= 97 && returntest <= 122) -						{ -							callUnicodeCallback(returntest - 96, mModifiers); -						} -					} -				} -			} -			break; -	} -	 -} - -- (void) mouseMoved:(NSEvent *)theEvent -{ -	[_window mouseMoved:theEvent]; +	callKeyDown(keycode, mModifiers);  }  - (void)flagsChanged:(NSEvent *)theEvent { @@ -291,11 +290,6 @@  	callModifier([theEvent modifierFlags]);  } -- (void) mouseExited:(NSEvent *)theEvent -{ -	[_window mouseExited:theEvent]; -} -  - (BOOL) acceptsFirstResponder  {  	return YES; @@ -386,6 +380,18 @@  	}  } +- (void) insertNewline:(id)sender +{ +	if (!(mModifiers & NSCommandKeyMask) && +		!(mModifiers & NSShiftKeyMask) && +		!(mModifiers & NSAlternateKeyMask)) +	{ +		callUnicodeCallback(13, 0); +	} else { +		callUnicodeCallback(13, mModifiers); +	} +} +  - (NSUInteger)characterIndexForPoint:(NSPoint)aPoint  {  	return NSNotFound; @@ -398,6 +404,10 @@  - (void)doCommandBySelector:(SEL)aSelector  { +	if (aSelector == @selector(insertNewline:)) +	{ +		[self insertNewline:self]; +	}  }  - (BOOL)drawsVerticallyForCharacterAtIndex:(NSUInteger)charIndex @@ -419,150 +429,6 @@  	return self;  } -- (void) keyDown:(NSEvent *)theEvent -{ -	 -	uint keycode = [theEvent keyCode]; -	 -	switch (keycode) { -		case 0x7b: -		case 0x7c: -		case 0x7d: -		case 0x7e: -			callKeyDown(keycode, mModifiers); -			break; -			 -		default: -			callKeyDown(keycode, mModifiers); -			NSString *chars = [theEvent characters]; -			for (uint i = 0; i < [chars length]; i++) { -				// Enter and Return are special cases. -				unichar returntest = [chars characterAtIndex:i]; -				if ((returntest == NSCarriageReturnCharacter || returntest == NSEnterCharacter) && -					!([theEvent modifierFlags] & NSCommandKeyMask) && -					!([theEvent modifierFlags] & NSAlternateKeyMask) && -					!([theEvent modifierFlags] & NSControlKeyMask)) -				{ -					callUnicodeCallback(13, 0); -				} else { -					// The command key being pressed is also a special case. -					// Control + <character> produces an ASCII control character code. -					// Command + <character> produces just the character's code. -					// Check to see if the command key is pressed, then filter through the different character ranges that are relevant to control characters, and subtract the appropriate range. -					if ([theEvent modifierFlags] & NSCommandKeyMask) -					{ -						if (returntest >= 64 && returntest <= 95) -						{ -							callUnicodeCallback(returntest - 63, mModifiers); -						} else if (returntest >= 97 && returntest <= 122) -						{ -							callUnicodeCallback(returntest - 96, mModifiers); -						} -					} else { -						callUnicodeCallback(returntest, mModifiers); -					} -				} -			} -			break; -	} -	  -} - -- (void) keyUp:(NSEvent *)theEvent { -	callKeyUp([theEvent keyCode], mModifiers); -} - -- (void)flagsChanged:(NSEvent *)theEvent { -	mModifiers = [theEvent modifierFlags]; -	callModifier([theEvent modifierFlags]); -} - -- (void) mouseDown:(NSEvent *)theEvent -{ -	if ([theEvent clickCount] >= 2) -	{ -		callDoubleClick(mMousePos, mModifiers); -	} else if ([theEvent clickCount] == 1) { -		callLeftMouseDown(mMousePos, mModifiers); -	} -} - -- (void) mouseUp:(NSEvent *)theEvent -{ -	callLeftMouseUp(mMousePos, mModifiers); -} - -- (void) rightMouseDown:(NSEvent *)theEvent -{ -	callRightMouseDown(mMousePos, mModifiers); -} - -- (void) rightMouseUp:(NSEvent *)theEvent -{ -	callRightMouseUp(mMousePos, mModifiers); -} - -- (void)mouseMoved:(NSEvent *)theEvent -{ -	float mouseDeltas[2] = { -		[theEvent deltaX], -		[theEvent deltaY] -	}; -	 -	callDeltaUpdate(mouseDeltas, 0); -	 -	NSPoint mPoint = [theEvent locationInWindow]; -	mMousePos[0] = mPoint.x; -	mMousePos[1] = mPoint.y; -	callMouseMoved(mMousePos, 0); -} - -// NSWindow doesn't trigger mouseMoved when the mouse is being clicked and dragged. -// Use mouseDragged for situations like this to trigger our movement callback instead. - -- (void) mouseDragged:(NSEvent *)theEvent -{ -	// Trust the deltas supplied by NSEvent. -	// The old CoreGraphics APIs we previously relied on are now flagged as obsolete. -	// NSEvent isn't obsolete, and provides us with the correct deltas. -	float mouseDeltas[2] = { -		[theEvent deltaX], -		[theEvent deltaY] -	}; -	 -	callDeltaUpdate(mouseDeltas, 0); -	 -	NSPoint mPoint = [theEvent locationInWindow]; -	mMousePos[0] = mPoint.x; -	mMousePos[1] = mPoint.y; -	callMouseMoved(mMousePos, 0); -} - -- (void) otherMouseDown:(NSEvent *)theEvent -{ -	callMiddleMouseDown(mMousePos, mModifiers); -} - -- (void) otherMouseUp:(NSEvent *)theEvent -{ -	callMiddleMouseUp(mMousePos, mModifiers); -} - -- (void) otherMouseDragged:(NSEvent *)theEvent -{ -	 -} - -- (void) scrollWheel:(NSEvent *)theEvent -{ -	callScrollMoved(-[theEvent deltaY]); -} - -- (void) mouseExited:(NSEvent *)theEvent -{ -	callMouseExit(); -} -  - (NSPoint)convertToScreenFromLocalPoint:(NSPoint)point relativeToView:(NSView *)view  {  	NSScreen *currentScreen = [NSScreen currentScreenForMouseLocation]; | 
