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. Kristees 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 dont 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 didnt 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 didnt 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 dont 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 its 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 its 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 Kristees 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- <<StepII |||STOP||| IIStep>> -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- <<StepII |||STOP||| IIStep>> -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