diff options
| author | Dominik Pich | 2013-03-17 13:33:20 +0100 |
|---|---|---|
| committer | Dominik Pich | 2013-03-17 13:33:20 +0100 |
| commit | d4ffd217288cfc0d2798b3df67ab20bc867a7f7e (patch) | |
| tree | ab40c6fb784fbe578713381ea5cf1159934a9c34 /device_test/MousePaneController.m | |
| parent | 77d2a9f99a289d247c5a8561879489c8f8162055 (diff) | |
| download | DDHidLib-d4ffd217288cfc0d2798b3df67ab20bc867a7f7e.tar.bz2 | |
DDHIDLib 1.1.1
Diffstat (limited to 'device_test/MousePaneController.m')
| -rw-r--r-- | device_test/MousePaneController.m | 211 |
1 files changed, 211 insertions, 0 deletions
diff --git a/device_test/MousePaneController.m b/device_test/MousePaneController.m new file mode 100644 index 0000000..74f1590 --- /dev/null +++ b/device_test/MousePaneController.m @@ -0,0 +1,211 @@ +/* + * Copyright (c) 2007 Dave Dribin + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#import "MousePaneController.h" +#import "DDHidLib.h" +#import "ButtonState.h" + + +@interface MousePaneController (Private) + +- (void) setMouseX: (int) mouseX; +- (void) setMouseY: (int) mouseY; +- (void) setMouseWheel: (int) mouseWheel; + +@end + +@implementation MousePaneController + +static int sMaxValue = 2500; + +static int applyDelta(int current, int delta) +{ + int newValue = (current + delta) % sMaxValue; + if (newValue < 0) + newValue = sMaxValue + newValue; + return newValue; +} + +- (void) awakeFromNib; +{ + mCurrentMouse = 0; + mMouseButtons = [[NSMutableArray alloc] init]; + + NSArray * mice = [DDHidMouse allMice]; + [mice makeObjectsPerformSelector: @selector(setDelegate:) + withObject: self]; + [self setMice: mice]; + [self setMouseIndex: 0]; +} + +//=========================================================== +// mice +//=========================================================== +- (NSArray *) mice +{ + return mMice; +} + +- (void) setMice: (NSArray *) theMice +{ + if (mMice != theMice) + { + [mMice release]; + mMice = [theMice retain]; + } +} + +- (NSArray *) mouseButtons; +{ + return mMouseButtons; +} + +- (BOOL) no; +{ + return NO; +} + +//=========================================================== +// - mouseIndex +//=========================================================== +- (unsigned) mouseIndex +{ + return mMouseIndex; +} + +//=========================================================== +// - setMouseIndex: +//=========================================================== +- (void) setMouseIndex: (unsigned) theMouseIndex +{ + if (mCurrentMouse != nil) + { + [mCurrentMouse stopListening]; + mCurrentMouse = nil; + } + mMouseIndex = theMouseIndex; + [mMiceController setSelectionIndex: mMouseIndex]; + if (mMouseIndex != NSNotFound) + { + mCurrentMouse = [mMice objectAtIndex: mMouseIndex]; + [mCurrentMouse startListening]; + [self setMouseX: sMaxValue/2]; + [self setMouseY: sMaxValue/2]; + [self setMouseWheel: sMaxValue/2]; + + [self willChangeValueForKey: @"mouseButtons"]; + [mMouseButtons removeAllObjects]; + NSArray * buttons = [mCurrentMouse buttonElements]; + NSEnumerator * e = [buttons objectEnumerator]; + DDHidElement * element; + while (element = [e nextObject]) + { + ButtonState * state = [[ButtonState alloc] initWithName: [[element usage] usageName]]; + [state autorelease]; + [mMouseButtons addObject: state]; + } + [self didChangeValueForKey: @"mouseButtons"]; + } +} + +- (int) maxValue; +{ + return sMaxValue; +} + +//=========================================================== +// - mouseX +//=========================================================== +- (int) mouseX +{ + return mMouseX; +} + +//=========================================================== +// - mouseY +//=========================================================== +- (int) mouseY +{ + return mMouseY; +} + +//=========================================================== +// - mouseWheel +//=========================================================== +- (int) mouseWheel +{ + return mMouseWheel; +} + +- (void) ddhidMouse: (DDHidMouse *) mouse xChanged: (SInt32) deltaX; +{ + [self setMouseX: applyDelta(mMouseX, deltaX)]; +} + +- (void) ddhidMouse: (DDHidMouse *) mouse yChanged: (SInt32) deltaY; +{ + [self setMouseY: applyDelta(mMouseY, deltaY)]; +} + +- (void) ddhidMouse: (DDHidMouse *) mouse wheelChanged: (SInt32) deltaWheel; +{ + // Some wheels only output -1 or +1, some output a more analog value. + // Normalize wheel to -1%/+1% movement. + deltaWheel = (deltaWheel/abs(deltaWheel))*(sMaxValue/100); + [self setMouseWheel: applyDelta(mMouseWheel, deltaWheel)]; +} + +- (void) ddhidMouse: (DDHidMouse *) mouse buttonDown: (unsigned) buttonNumber; +{ + ButtonState * state = [mMouseButtons objectAtIndex: buttonNumber]; + [state setPressed: YES]; +} + +- (void) ddhidMouse: (DDHidMouse *) mouse buttonUp: (unsigned) buttonNumber; +{ + ButtonState * state = [mMouseButtons objectAtIndex: buttonNumber]; + [state setPressed: NO]; +} + +@end + +@implementation MousePaneController (Private) + +- (void) setMouseX: (int) mouseX; +{ + mMouseX = mouseX; +} + +- (void) setMouseY: (int) mouseY; +{ + mMouseY = mouseY; +} + +- (void) setMouseWheel: (int) mouseWheel; +{ + mMouseWheel = mouseWheel; +} + +@end + |
