Demo window 2. Getting user input

For almost all applications, you will want the user (or the participant in an experiment) to be able to click on things in the Demo window, or to control the Demo window by pressing keys. Here is a presentation with two screens:

`demo Erase all
` `demo Select inner viewport: 0, 100, 0, 100
` `demo Axes: 0, 100, 0, 100
` `demo Paint rectangle: “purple”, 0, 100, 0, 100
` `demo Pink
` `demo Text: 50, “centre”, 50, “half”, “This is the first page”
` `demoWaitForInput ()
` `demo Erase all
` `demo Paint rectangle: “purple”, 0, 100, 0, 100
` `demo Text: 50, “centre”, 50, “half”, “This is the second page”
`

In this example, you go from the first to the second screen either by clicking with the mouse or by pressing any key. You will usually want to be more selective in your choice of user actions to respond to. The function `demoWaitForInput` always returns 1, so that you can use it nicely in a loop, in which you can react selectively:

`label FIRST_SCREEN
` `demo Erase all
` `demo Black
` `demo Times
` `demo 24
` `demo Select inner viewport: 0, 100, 0, 100
` `demo Axes: 0, 100, 0, 100
` `demo Paint rectangle: “purple”, 0, 100, 0, 100
` `demo Pink
` `demo Text: 50, “centre”, 50, “half”, “This is the first page”
` `while demoWaitForInput ()
` `if demoClicked ()
` `goto SECOND_SCREEN
` `elsif demoKeyPressed ()
` `if demoKey$ () = “→” or demoKey$ () = “ ”
` `goto SECOND_SCREEN
` `endif
` `endif
` `endwhile
` `label SECOND_SCREEN
` `demo Erase all
` `demo Paint rectangle: “purple”, 0, 100, 0, 100
` `demo Text: 50, “centre”, 50, “half”, “This is the second page”
` `while demoWaitForInput ()
` `if demoClicked ()
` `goto END
` `elsif demoKeyPressed ()
` `if demoKey$ () = “←”
` `goto FIRST_SCREEN
` `elsif demoKey$ () = “→” or demoKey$ () = “ ”
` `goto END
` `endif
` `endif
` `endwhile
` `label END
`

This script allows you to use the arrow keys and the space bar to navigate between the two screens. A shorter version is:

`label FIRST_SCREEN
` `demo Erase all
` `demo Black
` `demo Times
` `demo 24
` `demo Select inner viewport: 0, 100, 0, 100
` `demo Axes: 0, 100, 0, 100
` `demo Paint rectangle: "purple", 0, 100, 0, 100
` `demo Pink
` `demo Text: 50, "centre", 50, "half", "This is the first page"
` `while demoWaitForInput ()
` `goto SECOND_SCREEN demoInput (“•→ ”)
` `endwhile
` `label SECOND_SCREEN
` `demo Erase all
` `demo Paint rectangle: "purple", 0, 100, 0, 100
` `demo Text: 50, "centre", 50, "half", "This is the second page"
` `while demoWaitForInput ()
` `goto END demoInput (“•→ ”)
` `goto FIRST_SCREEN demoInput (“←”)
` `endwhile
` `label END
`

This uses two tricks, namely the possibility of following the `goto` statement by a condition and using `demoInput` to quickly test for multiple possible inputs (the bullet represents a mouse click).

### Links to this page

- Demo window