Gestures
Volume Number: 5
Issue Number: 2
Column Tag: HyperChat™
Gestural Devices
By Fred Stauder, HyperChat Editor, Zurich, Switzerland
on HyperChat
Gestural Devices
This month I would like to talk about gestural control devices, what they are, and
how to build them to give you more flexibility in HyperCard.
What is a gestural control device? The Oxford dictionary defines the word
“gesture” as: “a move calculated to evoke a response from another or to convey
intention”. In this case “another” is your Macintosh, and our intention is that we want
HyperCard to do something for us. An example of a gesture used as a device is
“AutoScriptEdit” which I first brought to you in the May issue and which later evolved
into “AutoHyperEdit”. There I used a gesture moving past the top of a button while the
mouse was still down. This gesture replaced menu selections and mouse clicks. Another
good example is the Gestural Video Controller from Kristee Kreitman (December Issue
MacTutor see fig 1.)of the Human Interface Group at Apple Computer. Her G Device
(Gestural Device) inspired me to build one using the message box in HyperCard.
Kristee’s video controller works by moving the cursor left and right you enter regions
which give different responses to a video player, such as “step” and “scan”.
Figure 1.
I built my G Device for two reasons. The first, was that I could control a videodisc
player from any stack easily, secondly I wanted to utilize the message box. The message
box can be moved anywhere easily even out of the card window (this is very useful if
you have a large screen), and if the user hits a command period to halt something, you
don’t have anything remaining such as an extra field or button. I thought this type of
controller would be great for slide presentations using HyperCard. I had seen some
other types of navigational controllers that would change cursors etc, but they felt
clumsy to me and didn’t provide enough feedback. I thought you could use the rect of the
message box and use the right half of it to go to next card and the left half to go to
previous card. This also didn’t give enough feedback, so after a some experimentation I
came up with the Gestural Video Controller (fig 2.).
Figure 2.
For a prototype I used a controller for going back and forward in a stack rather
than using a videodisc player. Since many of you don’t have a videodisc player I shall
show you the “CardControl” script.
The Design Considerations
It had to be called from a Handler in the home stack so it could be used anywhere.
It had to not interfere with any card or stack it was in.
It had to have feedback.
I decided it had to be modal because it would be too much of a strain on the idle
loop. It is invoked by typing in “CardControl” or it’s alias “CC” into the message box
or by blind typing. This brings up the message box if it is not visible and changes the
cursor to a cross (see fig 3.), and tells the user to click the mouse to exit. The
controller then appears (figs 2,3) the command that is executing currently is
highlited(fig 3.). Moving the cursor left and right changes the command selection, for
ease of navigation in this case I chose not to make vertical movement important. If you
look at listing 1. I get item 1 of rect of msg to determine it’s horizontal offset.
Next I have a main loop that contains sub loops which determine if the cursor is
within the commands horizontal domain. I precalculated the horizontal offsets for each
command. The loops are bulky, I tried different approaches but this way seemed to give
the best all around results. When the cursor is within the horizontal domain of a
command the command word or symbol is selected and a click is produced (this gives
additional auditory feedback), then the command is invoked.
The enterKey handler is used to bring up the CardControl again simply by
pressing enter if the msg has not been emptied.
Figure 3.
Listing 1.
-- Gestural CardControl Device 0.2b --
-- By Fred Stauder
-- ©1988 all rights reserved
-- Inspired By Kristee’s Gestural Controller
-- Turns Message Box into a gestural video controller
-- put it into your Home Stack Script so it is available in all
Stacks
on enterkey --This lets you hit enter again after stopping to
resume--
if
“<<<<<<<< ••-Rev-•• <> ••-Fwd-••
>>>>>>>>”
is in msg then videocontrol
else pass enterkey
end enterkey
on CC --Alias--
cardControl
end CC
on cardControl

-- initialisation and let the user know whats going on --
set cursor to 3
put “ ••••• Hold Down Mouse Button to Exit •••••”
wait 10
select line 1 of msg
wait 10
select empty
wait 10
select line 1 of msg
wait 10
select empty
wait 80
put empty into msg
wait 20

put “<<<<<<<< ••-Rev-•• <> ••-Fwd-••
>>>>>>>>” into msg

wait 10
select line 1 of msg
wait 10
select empty
wait 10
select line 1 of msg
wait 10
select empty
wait 40
put item 1 of rect of msg into left

repeat forever -- Main Loop --

repeat forever -- Loop 1 from left --
if the mouse is down
then
hide msg
exit cardControl
end if
if the mouseH > left + 60 then exit repeat
else
play harpsichord tempo 100 b#x7
select word 1 of msg
go to previous card
end if
end repeat

repeat forever -- Loop 2 from left --
if the mouse is down
then
hide msg
exit cardControl
end if
if the mouseH < left + 70 then exit repeat
if the mouseH > left + 135 then exit repeat
else
play harpsichord tempo 100 b#x7
select word 2 of msg
wait 10
go to previous card
end if
end repeat

repeat forever -- Loop 3 from left --
if the mouse is down
then
hide msg
exit cardControl
end if
if the mouseH < left + 140 then exit repeat
if the mouseH > left + 190 then exit repeat
else
play harpsichord tempo 100 b#x7
select word 3 of msg
wait 30
go to previous card
end if
end repeat

repeat forever -- Loop 3 from left --
if the mouse is down
then
hide msg
exit cardControl
end if
if the mouseH < left + 200 then exit repeat
if the mouseH > left + 250 then exit repeat
else
select word 4 of msg
end if
end repeat

repeat forever -- Loop 4 from left --
if the mouse is down
then
hide msg
exit cardControl
end if
if the mouseH < left + 260 then exit repeat
if the mouseH > left + 305 then exit repeat
else
play harpsichord tempo 100 b#x7
select word 5 of msg
wait 30
go to next card
end if
end repeat

repeat forever -- Loop 5 from left --
if the mouse is down
then
hide msg
exit cardControl
end if
if the mouseH < left + 310 then exit repeat
if the mouseH > left +380 then exit repeat
else
play harpsichord tempo 100 b#x7
select word 6 of msg
wait 10
go to next card
end if
end repeat

repeat forever -- Loop 6 from left --
if the mouse is down
then
hide msg
exit cardControl
end if
if the mouseH < left + 390 then exit repeat
else
play harpsichord tempo 100 b#x7
select word 7 of msg
go to next card
end if
end repeat
end repeat
put cardControl into msg
end cardControl
This script can be modified and used for many purposes such as I have done with a
videodisk contoller, or CD controller etc. Experiment with different types of G
devices. Next month I will bring you an XCMD that automates creating such a G Device.
end HyperChat