Pie Menus
This is a web page about pie menus, by Don
Hopkins.
There's going to be more stuff here, and what's here will be more organized,
but for starters, this is an article I wrote for Dr. Dobb's Journal, called
The Design and Implementation of Pie Menus.
These are some other people who have done interesting stuff relating to
pie menus:
- Where in the world is Paolo
Tosolini? [Bellevue, WA, last
I heard.] He has written pie menus for Asymetrix
ToolBook, and the source code is available here: piemnu30.zip,
pie2lang.zip. He maintains a ToolBook
User's Web page where you can find all kinds of great stuff. If you
read Italian, and have an Acrobat reader, check out Gestures
as interaction technique with the computer. And here's a paper in English
called Time
and gesture based interfaces, a test case: Shinjuku Guide.
- Carl C. Rollo has implemented
pie menus for Windows, and has written web page about Pie
Menus for Windows, A
Brief Description of Pie Menus for Windows, and Pie
on the Menu in Your Program.
- Bert Bos has
written an X11 piemenu widget, for the Free
Widget Foundation.
- Here are some references to Kurtenbach and Buxton's work on "marking
menus": Kurtenback, Buxton, Issues in Combining Marking and Direct
Manipulation Techniques, Proceedings of UIST '91. Kurtenback, Sellen, Buxton,
An Empirical Evaluation of some Articulatory and Cognitive Aspects of Marking
Menus, Journal HCI, January 1993. Kurtenback, Buxton, The Limits of Expert
Performance Using Hierarchic Marking Menus. Proceedings of CHI '93.
- Pie menus are mentioned in A
Taxonomy of See-Through Tools, by Bier, Stone, Fishkin, Buxton, and
Baudel.
- And here's The
Pie Page, of course!
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.
Here are some references to things I've written about pie menus:
- Directional Selection is Easy as Pie Menus!
By Don Hopkins. ;login: The Usenix Association Newsletter, V12 #5, Sept.
1987
- A Comparative Analysis of Pie Menu Performance.
By Jack Callahan, Don Hopkins, Mark Weiser, and Ben Shneiderman. Proc. CHI'88
conference, Washington D.C.
- The Shape of PSIBER Space: PostScript
Interactive Bug Eradication Routines.
By Don Hopkins. Proc. 1989 Usenix Graphics Conference, Monterey California.
- 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
- The Design and Implementation of Pie Menus.
By Don Hopkins. Dr. Dobb's Journal, Dec. 1991. Lead article, user interface
issue.
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.
Pie Menu Poems and Slogans:
- Simple Simon popped a pie men-
u upon the screen.
With directional selection,
all is peachy keen.
- Thank you for choosing pie menus.
- You'll never get laid if you pull down your menu.
- IF YOU CHOOSE, please popup pie menus.
- If I wanted to waste my time, I would have selected linear menus.
- Popup pie menus or die.
- Linear menus are for freakin' fairies!
- The liberated user chooses pie menus.