Table of Contents |
Changes and New
Features
|
Intro to XWinder
|
System Requirements |
Enabling XWinder Chords |
General Usage |
on Windows 2000/XP... |
on Mac OS X... |
Source File List
|
Feedback |
Copyright (c) 2003-2004 FingerWorks, Inc. All rights reserved. Most files in thisproject are subject to the MPL 1.1/GPL 2.0/LGPL 2.1 open-source tri-license(The License), but see individual source files for license details. You maynot use these files except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for thespecific language governing rights and limitations under the License.
With XWinder, FingerWorks introduces another fundamental advance in human-computer interaction--a simple utility that simultaneously moves and resizes application windows via intuitive motions of BOTH hands. When TouchStream customers drop 3 fingers of both hands on the surface simultaneously, their left hand drags the upper-left window corner while their right hand drags the lower-right window corner. Thus by 'grabbing' opposite window corners with 3 fingers, customers can move and resize applications windows in one intuitive step! Once again, the power of multi-finger gestures eliminates several separate title-bar-click, title-bar-drag, grow-area-point, grow-area-drag steps!
TouchStream and iGesture customers can also move/resize windows with
special chords of one hand. With these chords, hand translation
moves thewindow while, hand scaling motions resize the window, and hand
rotation motions vary the window's aspect ratio (ratio of width to
height).
Several animated demos of these XWinder capabilities our available
on the FingerWorks website:
FingerWorks provides the XWinder source code under the MPL/GPL/LGPL open-source tri-license. This means Linux, BeOS, BSD, and other operating system enthusiasts can easily port XWinder to their favorite operating system or windowing system.
XWinder also demonstrates the power of FingerWorks' FWHID Hand Tracking SDK. This SDK will allow developers to design their applications forhighly intuitive two-handed manipulations, like panning/zooming a CAD drawing with the left hand while the right hand draws or drags objects over large distances and scales. With the FingerWorks HID Hand Tracking SDK, applications can receive Hand Motion Events, an extended form of mouse event that includes chording, translation/rotation/scaling motion and hand source data. These rich, two-handed manipulations are simply impossible through the standard mouse/keyboard APIs provided by existing operating systems.
Third party Mac OS X mouse drivers like USB Overdrive must be UNINSTALLED, not just disabled, for HID Manager drivers used by Hand Motion SDK to work!
Impatient developers should look up the XWindows Window Manager APIs for grabbing the window under the pointer and changing application window bounds. Then try to reimplement src/win32/XWinderShell.c with appropriate XWindows, Linux, Gnome, and/or KDE APIs.
For XWinder to receive any hand motion from your FingerWorks Product, you must:
The XWinder chord options are:
The MyGesture Editor lets you add Hand Motion Events to any other chords you like so long as you remove any mouse/key/macro gestures already assigned to those chords. But XWinder will only respond to hand motion events from other chords if you modify the chord selection filters in XWinderCalcs.c.
By default XWinder uses the "focus follows mouse" paradigm to grab windows. This means when you start an XWinder hand motion chord, XWinder won't necessarily grab the topmost, "keyboard focus" window. It will grab whatever window the mouse pointer is over. This allows you to move/resize windows behind the topmost window, without bringing them to the front. If you want to bring them to the front, click on them.
Once you've grabbed a window with one of the XWinder Chords that you enabled in the Feature Selector, the window won't be released until ALL fingers lift off the surface. So you can keep dragging with just one finger, or all five if you like.
Some people find the one-handed chord (thumb+index+pinky) somewhat
awkward to use. In this case just lift index finger after the
initial chord selection for comfortable rotation and scaling with just
thumb and pinky.
XWinder
behavior changes slightly if you drop all five fingers to the surface
(after starting with thumb+index+pinky). Hand expansions then
vary window width instead
of window size, and hand rotations vary window height instead of window
aspect ratio.
XWinder also makes good use of taps of the one-handed XWinder chords
(thumb+index+pinky):
The MultiTouch Utilities installation should have put XWinder in yourStartup Folder, so it will start each time you reboot your system. If ithasn't started, you can run it by clicking on Start->Programs->FingerWorks->XWinder.exe
Once launched, XWinder does not appear as a full application with itsown windows and menus. It just appears as this icon:
(FingerWorks hand with X)
in the Windows task/status bar (usually lower righthand corner of your screen).
Clicking the XWinder Status icon pops up a menu with a few simple options:
To build the XWinder project, it should be kept in a sibling directory of the "FWHID_HandTracking" project.
Next open "XWinder/msdev_net/XWinder.sln" with Microsoft Visual Studio and select the XWinder on XP build target. Click build. This should re-create XWinder/bin/XWinder.exe
For build to succeed, you may need to update "FWHID_HandTracking" header & library paths in Xcode. The build must have valid references to:
On Windows XP you can also rebuild the Hand Motion API library by opening "FWHID_HandTracking/msdev_net/fwhand.sln" with Microsoft Visual Studio and selecting the LibWinXP build target. Click build. This should create the "FWHID_HandTracking/lib/fwhandxp.lib" static link library. Then have XWinder link with fwhandxp.lib instead of fwtrack.lib.
This Mac OS X implementation of XWinder relies on the Accessibility APIs introduced in Jaguar to move and resize the selected windows. Unfortunately, the Accessibility APIs are not as efficient at moving/resizing asthe normal title-bar and grow-area drag mechanisms orchestrated by Mac OSX. Depending on your processor speed, larger, more complicated applicationwindows may resize sluggishly.
Also, some applications may not 'like' having their windows moved viathe Accessibility APIs. For instance, Microsoft Word for Mac OS X does notredraw documents properly after document windows have been moved with theAccessibility APIs. Therefore XWinder does NOT try to grab and move MicrosoftWord windows. XWinder Beta testers should check that each of their applications redraw properly before using XWinder heavily. If you findan application that does not play well with XWinder, please report it toFingerWorks Support so XWinder can be updated to ignore that application'swindows.
FingerWorks preliminary testing indicates that XWinder works fine with these applications:
Finder
Safari
TextEdit
Terminal
Xcode
PhotoShop Elements
Microsoft Excel
Microsoft PowerPoint
With Safari 1.2, Grab Window Under Pointer may not work with some portions (e.g. rules and table borders) of Safari browser windows. Choose Grab Key Focus Window option or put pointer over browser text before grabbing.
Carbon applications do not mind being moved by XWinder, but do not resize their internal contents when the window frame is resized by XWinder. DreamWeaver, Internet Explorer, MyGesture Editor, and other applicationswith Java or Carbon window implementations fall in this category.
If you want better XWinder performance on Mac OS X, lobby Apple to
build XWinder into Mac OS X, or to expose a high-performance Public API
that utilities such as XWinder and virtual desktops can use to
move/resize applicationwindows efficiently.
The MultiTouch Utilities installation should have put XWinder in your Startup Folder, so it will start each time you reboot your system. If ithasn't started, you can run it by clicking on /Applications/FingerWorks/XWinder.app
Once launched, XWinder does not appear as a full application with itsown windows and menus. It just appears as this icon:
(oval with omni-directional arrows)
in the status bar, next to the clock and volume status icons.
Clicking the XWinder Status icon pops down a menu with a few simple options:
When not checked, the left hand motions moves the window, while right hand motion independently resizes the window. This latter method helps avoid extraneous resizing but is less physically intuitive.
In this beta version, changes you've made to these options are NOT remembered if you restart XWinder.
To build the XWinder project, it should be kept in a sibling directory of the "FWHID_HandTracking" project.
Open "XWinder.xcode" with XCode, Panther's new IDE.
For build to succeed, you may need to update "FWHID_HandTracking" header & library paths in Xcode. The build must have valid referencesto:
- ../FWHID_HandTracking/include/FWHID_HandMotion.h ---- Hand Motion API external header file
- ../FWHID_HandTracking/lib/libFWHID_HandMotion.a (or libFWHID_track.a) ---- Hand Motion static-link library for Mac OS X
The XWinder project was originally adapted from Apple's "UIElementInspector" Accessibility API sample application, available at:
http://developer.apple.com/samplecode/Sample_Code/OS_Utilities/UIElementInspector.htm
These "UIElementInspector" source files implement a floating inspector window that can print various debugging information about the windows grabbed by XWinder:
InspectorWindow.m
InspectorWindow.h
InspectorApp.m
InspectorApp.h
These files were modified slightly from the Apple originals to work with XWinder. To enable the inspector windows for your debugging pleasure:
msdev_net/XWinder.sln ---- Microsoft Visual Studio Solution file
msdev_net/XWinder.vcproj ---- Microsoft Visual StudioProject file
XWinder.xcode ---- Apple Xcode IDE Project fileinclude/XWinderCalcs.h ---- Platform-independent XWinder API declarations.
src/common/XWinderCalcs.c ---- Platform-independent computation of window motion from hand motion eventssrc/macosx/XWinder_Prefix.pch ---- Precompilation header for Cocoa and Carbon includes.
src/macosx/XWinderShell.h ---- Objective-C declarations for XWinderShell class
src/macosx/XWinderShell.m ---- Objective-C class that uses Accesibility API to grab, move, and resize windowssrc/macosx/main.m ---- application entry point for Cocoa
src/macosx/Info.plist ---- XWinder.app properties list file
src/win32/XWinderShell.c ---- WinXP implementation of taskbar shell and Win32 windowmove/resize calls
src/win32/resource.h ---- XWinder Resources header file
src/win32/XWinder.rc ---- XWinder Resource File (for icons, status menu, and About Dialog)icons/ ---- XWinder icon files in various sizes and formats.
bin/XWinder.app ---- The XWinder build product on Mac OS X.
bin/XWinder.exe ---- The XWinder build product on Windows.
Any suggestions and/or bugs can be posted in the FingerWorks Forums, XWinder threads:
http://forums.fingerworks.com/
or directed to FingerWorks support at: http://www.fingerworks.com/support.html