aboutsummaryrefslogtreecommitdiffstats
path: root/device_test/MousePaneController.m
diff options
context:
space:
mode:
authorDominik Pich2013-03-17 13:33:20 +0100
committerDominik Pich2013-03-17 13:33:20 +0100
commitd4ffd217288cfc0d2798b3df67ab20bc867a7f7e (patch)
treeab40c6fb784fbe578713381ea5cf1159934a9c34 /device_test/MousePaneController.m
parent77d2a9f99a289d247c5a8561879489c8f8162055 (diff)
downloadDDHidLib-d4ffd217288cfc0d2798b3df67ab20bc867a7f7e.tar.bz2
DDHIDLib 1.1.1
Diffstat (limited to 'device_test/MousePaneController.m')
-rw-r--r--device_test/MousePaneController.m211
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
+