Here are some references to things I've written about pie
menus:
- Pie Menu Video.
Instructional demo of ActiveX pie menus, and demos of
many different pie menus developed over 12 years.
- The Design and Implementation
of Pie Menus.
By Don Hopkins. Dr. Dobb's Journal, Dec. 1991. Lead
article, user interface issue.
- The Shape of PSIBER
Space: PostScript Interactive Bug Eradication Routines.
By Don Hopkins. Proc. 1989 Usenix Graphics Conference,
Monterey California.
- A Comparative Analysis of Pie Menu
Performance.
By Jack Callahan, Don Hopkins, Mark Weiser, and Ben
Shneiderman. Proc. CHI'88 conference, Washington D.C.
- Designing to Facilitate Browsing: a Look Back at the
HyperTIES Workstation Browser.
By Ben Shneiderman, Catherine Plaisant, Rodrigo Botafogo,
Don Hopkins, and William Weiland. Hypermedia, V3 #2, 1991
- Directional Selection is Easy as Pie Menus!
By Don Hopkins. ;login: The Usenix Association
Newsletter, V12 #5, Sept. 1987
I've implemented pie menus several times, for various window
systems, projects, and products:
- The first X10 pie menu proof of concept prototype,
written in C on a Sun 3/160. Convinced Professor Mark
Weiser that I should divert my time from system
administration to researching user interfaces. Convinced
Jack Callahan, who was taking Ben Shneiderman's human
factors class, to do a project comparing pie menus and
linear menus, which I helped him implement.
- Pie menu extension to X10 uwm "ultrix window
manager". There was no toolkit for X10 at the time,
so I extended the X10 "uwm" window manager to
implement pie menus as well as its normal pop up linear
menus. You could define your own trees of nested menus,
and bind them to window management commands, run
programs, etc. You could specify that any menu was linear
or pie, and it supported nested menus, mouse ahead,
display supression, and carefully addressed the screen
edge boundary condition and mouse warping problems (which
is tricky with an asynchronous protocol like X).
- Forth programmable pie
menu window
manager. I integrated the pie-menuified
"uwm" into Mitch Bradley's Sun Forth, to
perform the experiment for Jack Callahan's SIGCHI paper.
The paper's available here: callahan.ps.
- I made my first multithreaded programmable pie menu
window manager, by breaking open the inner loop of the C
window manager, linking it into Mitch Bradley's great
68000 Sun Forth, and writing code in Forth that could
create and pop up menus, track the mouse, and call into
and delegate events to the uwm code.
- We used it to administer, time, and record statistics for
the experiment we did, comparing pie menus and linear
menus. At one point, I wrote code that would let you
throw a window and it would bounce around the screen, by
starting a Forth thread that pushed it around. You could
have a whole bunch of windows boucing around the screen
and frantically repainting at once! I can't believe how
well it performed on a little Sun 3/160, compared to how
slow and bloated computers are today.
- This multitasking Forth
programmable window manager forshadowed my work with NeWS, a window manager
programmable in multithreaded PostScript, another stack
based language. Mike Gallaher and I went to visit Sun,
and I read the Red PostScript book on the plane. I met
the likes of Gilmore, Gosling, Rosenthal, Densmore, and
Bradley (who later hired me as a summer intern), and
finally saw and promptly crashed my first NeWS server
(then called SunDew).
- PostScript code to print pie menus on an Apple
LaserWriter. After implementing ugly pie menus in X10, I
experimented with many different graphical styles, using
PostScript. But all I had was the Apple LaserWriter in
the terminal room. I wrote my own object oriented system
using nested dictionaries to represent nested two
dimensional pie menus, with multiple rings of graphical
items. This foreshadowed my work programming NeWS, with Owen Densmore's
object oriented PostScript system. By the time I read
Owen's Usenet Graphics Conference paper, with its one
page listing of class.ps, I had already been working on
the same problem myself on the LaserWriter to print
nested graphics with inherited characteristics, so I was
quite excited to get NeWS and make interactive pie menus
on the screen instead of drawing them on paper.
- NeWS pie menus, written
in object oriented PostScript, with the Lite toolkit. I
designed, implemented, used, and re-implemented many
classes and subclasses of pie menus for NeWS 1.0, 1.1,
SGI's 4Sight, and Grasshopper's MacNeWS. I developed a
nice efficient pie menu based window manager, as well as
"tab windows", windows with tabs sticking out
of them, that you could use to easily pop up pie menus
and move and organize the windows. I worked on UniPress
Emacs, rewriting the NeWS display driver, and integrating
pie menus and tab windows into it, including an automatic
menu compiler that translated "hypertext" Info
trees into corresponding trees of pie menus bound to
emacs commands. This was the first version of emacs to
support multiple windows, so the convenient tab windows
and pie menus helped a lot when you had lots of windows
opened.
- I wrote a special subclass of pie menus for the SGI
4Sight version of NeWS, since 4Sight did not support
popup windows with "SaveBehind", because it
couldn't read pixels back from the screen efficiently.
Instead, its own special SGI style NeWS menus popped up
in the hardware overlay plane! So I put the necessary
hooks into the core pie menu class, so I could write a
subclass for the SGI that popped them up in the overlay
plane. The only problem was with the rainbow color wheel
pie menu, because you could only have black, white, and
one other color in the overlay. So I made a special
instance variable just to override the overlay behavior,
which the color wheel menu set, so it could pop up in the
color framebuffer, but still know enough about the
overlay plane to punch a hole in the overlay so the other
menus did not appear to overlap it!
- Pie menus and tab windows for the NeWS Development Environment
(NDE 1.0), on OpenWindows 1.0. I wrote pie menus and tab
windows from scratch on top of an early version of this
big, new, complex, object oriented PostScript toolkit for
NeWS, written by Sun. It was actually possible to manage X11
windows with NeWS tab windows and pie menus, because the X11 window
manager was written in NeWS, and used the default NDE
window frame, which I could customize and override. NeWS
Development Environment (NDE 1.0) was eventually
completely rewritten and renamed "The NeWS
Toolkit".
- Pie menus and tab windows for The NeWS Toolkit. When I
graduated, I went to work for Sun on TNT, The NeWS
Toolkit, for OpenWindows 2.0. TNT was loosely based on
NDE, also written in object oriented PostScript, but it
was twice the speed and half the size. Of course, I wrote
pie menus and tab windows from scratch again for TNT, and
continued to improve on the user interface, this time
adding spinning pop-up animation, and air-tight
synchronous mouse tracking (which is possible to do with
NeWS but not with X11).
The source code is available somewhere. [NOTE: make a
link here]
- Talking pie menus in SimCity
for HyperLook. I
ported SimCity to Unix,
reimplementing the user interface using the HyperLook
environment on NeWS, a
product that I was concurrently developing at the Turing
Institute in Glasgow with Arthur van Hoff.
SimCity for HyperLook was a really fun project to work
on, but it's hard to describe in words, and you really
have to see it
to believe it. I used the TNT pie menus for selecting city editing
tools, a task that you do all the time when editing
the map. They spoke the name of the selected tool, so you
knew you had the right tool even if you flicked the mouse
so fast that the pie menu wasn't displayed.
- The "piewm" X11 window
manager with pie menus. When I was a research
programmer at CMU, faced with using X11, I
realized that I needed pie menus to help me move my
windows around, so I went shopping around for a
reasonable window manager, and since there weren't any, I
choose the least unreasonable one at the time,
"tvtwm", and hacked it up with an updated
version of the old X10 "uwm" pie menus, and
called it "piewm". The source code is available
here: piewm.tar.Z.
- The TCL/Tk pie menu widget. I accidentally ported
the HyperLook. version of SimCity
to X11,
making it multi player in the process, using the TCL/Tk
toolkit, which was the only X11 toolkit that didn't suck.
I needed some fancy looking graphical pie menus, so I
made a TCL/Tk pie menu widget, whose window shape could
be shrink-wrapped around iconic labels. The source code
is available here: tkpie.tar.gz.
I recorded an X11
SimCity demo, showing pie menus in action. SimCity
for X11 won a "best product of 1992" award from
Unix World!
- The ScriptX
pie menu. I worked at Kaleida and wrote all kinds of
stuff in ScriptX, so of course one of those things was a
pie menu. I used it in a couple obscure places in the DreamScape demo.
- ActiveX pie menu component. I wrote a pie menu OLE
component, now known as ActiveX. With Internet Explorer,
you can put it on a web page, and program it in
JavaScript or Visual Basic Script. Wheeee. It has a
property sheet that lets you type an indented outline of
menu items into a multi line text editor. It's much
simpler to configure a nested tree of menus this way than
trying to use some fancy tree editor with lots of buttons
and scroll bars and text fields.
Other stuff I should mention some time:
- The intense discussions and bong
hits with Mike Gallaher that inspired my research.
- Mark Weiser's pie menu in his "SDI" game for
SunView.
- The pie versus linear menu experiment and SIGCHI paper
that Jack Callahan, Ben Shneiderman and I wrote.
- A description of the Forth
window manager that I developed to perform the
experiment.
- The story of giving Steve Jobs a pie menu demo.
"That sucks! That sucks! That sucks! Wow, that's
neat! That sucks!"
- My pseudoscientific
psiber pie menu performance at Empowered, CHI '90.
- The Momenta(ry) pen computer, with its patented 5-item
"command compass". (Doh!)
- Return to Zork has animated graphical drag and drop pie
menus.
- Alias, the high end SGI 3D tool, has user definable
"marking menus".
- The Japanese version of Habitat had pie menus to trigger
actions of your avitar like wave, bow, jump, etc.