From 79bf201a81acf39c0523b93f18dec6e12d6deeb2 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sat, 26 Jul 2008 10:13:47 -0700 Subject: [PATCH] key-caps demo --- extra/game-input/scancodes/scancodes.factor | 8 +- extra/joystick-demo/authors.txt | 1 + extra/joystick-demo/joystick-demo.factor | 3 +- extra/joystick-demo/summary.txt | 1 + extra/joystick-demo/tags.txt | 2 + extra/key-caps/authors.txt | 1 + extra/key-caps/key-caps.factor | 176 ++++++++++++++++++++ extra/key-caps/summary.txt | 1 + extra/key-caps/tags.txt | 1 + 9 files changed, 189 insertions(+), 5 deletions(-) create mode 100644 extra/joystick-demo/authors.txt create mode 100644 extra/joystick-demo/summary.txt create mode 100644 extra/joystick-demo/tags.txt create mode 100644 extra/key-caps/authors.txt create mode 100644 extra/key-caps/key-caps.factor create mode 100644 extra/key-caps/summary.txt create mode 100644 extra/key-caps/tags.txt diff --git a/extra/game-input/scancodes/scancodes.factor b/extra/game-input/scancodes/scancodes.factor index 36e816e376..7b0e39ee9b 100644 --- a/extra/game-input/scancodes/scancodes.factor +++ b/extra/game-input/scancodes/scancodes.factor @@ -84,10 +84,10 @@ IN: game-input.scancodes : key-down-arrow HEX: 0051 ; inline : key-up-arrow HEX: 0052 ; inline : key-keypad-numlock HEX: 0053 ; inline -: key-keypad-slash HEX: 0054 ; inline -: key-keypad-asterisk HEX: 0055 ; inline -: key-keypad-dash HEX: 0056 ; inline -: key-keypad-plus HEX: 0057 ; inline +: key-keypad-/ HEX: 0054 ; inline +: key-keypad-* HEX: 0055 ; inline +: key-keypad-- HEX: 0056 ; inline +: key-keypad-+ HEX: 0057 ; inline : key-keypad-enter HEX: 0058 ; inline : key-keypad-1 HEX: 0059 ; inline : key-keypad-2 HEX: 005a ; inline diff --git a/extra/joystick-demo/authors.txt b/extra/joystick-demo/authors.txt new file mode 100644 index 0000000000..f13c9c1e77 --- /dev/null +++ b/extra/joystick-demo/authors.txt @@ -0,0 +1 @@ +Joe Groff diff --git a/extra/joystick-demo/joystick-demo.factor b/extra/joystick-demo/joystick-demo.factor index bbcf904737..6cc14b2500 100644 --- a/extra/joystick-demo/joystick-demo.factor +++ b/extra/joystick-demo/joystick-demo.factor @@ -109,7 +109,8 @@ M: joystick-demo-gadget ungraft* open-window ; : joystick-demo ( -- ) - open-game-input [ + [ + open-game-input get-controllers [ joystick-window ] each ] with-ui ; diff --git a/extra/joystick-demo/summary.txt b/extra/joystick-demo/summary.txt new file mode 100644 index 0000000000..e10653cafa --- /dev/null +++ b/extra/joystick-demo/summary.txt @@ -0,0 +1 @@ +Demonstrate gamepad and joystick input diff --git a/extra/joystick-demo/tags.txt b/extra/joystick-demo/tags.txt new file mode 100644 index 0000000000..4d4417f0b8 --- /dev/null +++ b/extra/joystick-demo/tags.txt @@ -0,0 +1,2 @@ +gamepads +joysticks diff --git a/extra/key-caps/authors.txt b/extra/key-caps/authors.txt new file mode 100644 index 0000000000..f13c9c1e77 --- /dev/null +++ b/extra/key-caps/authors.txt @@ -0,0 +1 @@ +Joe Groff diff --git a/extra/key-caps/key-caps.factor b/extra/key-caps/key-caps.factor new file mode 100644 index 0000000000..bd0160ca14 --- /dev/null +++ b/extra/key-caps/key-caps.factor @@ -0,0 +1,176 @@ +USING: game-input game-input.backend game-input.scancodes +kernel ui.gadgets ui.gadgets.buttons sequences accessors +words arrays assocs math calendar fry alarms ui +ui.gadgets.borders ; +IN: key-caps + +: key-locations H{ + { key-escape { { 0 0 } { 10 10 } } } + + { key-f1 { { 15 0 } { 10 10 } } } + { key-f2 { { 25 0 } { 10 10 } } } + { key-f3 { { 35 0 } { 10 10 } } } + { key-f4 { { 45 0 } { 10 10 } } } + + { key-f5 { { 60 0 } { 10 10 } } } + { key-f6 { { 70 0 } { 10 10 } } } + { key-f7 { { 80 0 } { 10 10 } } } + { key-f8 { { 90 0 } { 10 10 } } } + + { key-f9 { { 105 0 } { 10 10 } } } + { key-f10 { { 115 0 } { 10 10 } } } + { key-f11 { { 125 0 } { 10 10 } } } + { key-f12 { { 135 0 } { 10 10 } } } + + + { key-` { { 0 15 } { 10 10 } } } + { key-1 { { 10 15 } { 10 10 } } } + { key-2 { { 20 15 } { 10 10 } } } + { key-3 { { 30 15 } { 10 10 } } } + { key-4 { { 40 15 } { 10 10 } } } + { key-5 { { 50 15 } { 10 10 } } } + { key-6 { { 60 15 } { 10 10 } } } + { key-7 { { 70 15 } { 10 10 } } } + { key-8 { { 80 15 } { 10 10 } } } + { key-9 { { 90 15 } { 10 10 } } } + { key-0 { { 100 15 } { 10 10 } } } + { key-- { { 110 15 } { 10 10 } } } + { key-= { { 120 15 } { 10 10 } } } + { key-backspace { { 130 15 } { 15 10 } } } + + { key-tab { { 0 25 } { 15 10 } } } + { key-q { { 15 25 } { 10 10 } } } + { key-w { { 25 25 } { 10 10 } } } + { key-e { { 35 25 } { 10 10 } } } + { key-r { { 45 25 } { 10 10 } } } + { key-t { { 55 25 } { 10 10 } } } + { key-y { { 65 25 } { 10 10 } } } + { key-u { { 75 25 } { 10 10 } } } + { key-i { { 85 25 } { 10 10 } } } + { key-o { { 95 25 } { 10 10 } } } + { key-p { { 105 25 } { 10 10 } } } + { key-[ { { 115 25 } { 10 10 } } } + { key-] { { 125 25 } { 10 10 } } } + { key-\ { { 135 25 } { 10 10 } } } + + { key-caps-lock { { 0 35 } { 20 10 } } } + { key-a { { 20 35 } { 10 10 } } } + { key-s { { 30 35 } { 10 10 } } } + { key-d { { 40 35 } { 10 10 } } } + { key-f { { 50 35 } { 10 10 } } } + { key-g { { 60 35 } { 10 10 } } } + { key-h { { 70 35 } { 10 10 } } } + { key-j { { 80 35 } { 10 10 } } } + { key-k { { 90 35 } { 10 10 } } } + { key-l { { 100 35 } { 10 10 } } } + { key-; { { 110 35 } { 10 10 } } } + { key-' { { 120 35 } { 10 10 } } } + { key-return { { 130 35 } { 15 10 } } } + + { key-left-shift { { 0 45 } { 25 10 } } } + { key-z { { 25 45 } { 10 10 } } } + { key-x { { 35 45 } { 10 10 } } } + { key-c { { 45 45 } { 10 10 } } } + { key-v { { 55 45 } { 10 10 } } } + { key-b { { 65 45 } { 10 10 } } } + { key-n { { 75 45 } { 10 10 } } } + { key-m { { 85 45 } { 10 10 } } } + { key-, { { 95 45 } { 10 10 } } } + { key-. { { 105 45 } { 10 10 } } } + { key-/ { { 115 45 } { 10 10 } } } + { key-right-shift { { 125 45 } { 20 10 } } } + + { key-left-control { { 0 55 } { 15 10 } } } + { key-left-gui { { 15 55 } { 15 10 } } } + { key-left-alt { { 30 55 } { 15 10 } } } + { key-space { { 45 55 } { 55 10 } } } + { key-right-alt { { 100 55 } { 15 10 } } } + { key-right-gui { { 115 55 } { 15 10 } } } + { key-right-control { { 130 55 } { 15 10 } } } + + + { key-print-screen { { 150 0 } { 10 10 } } } + { key-scroll-lock { { 160 0 } { 10 10 } } } + { key-pause { { 170 0 } { 10 10 } } } + + { key-insert { { 150 15 } { 10 10 } } } + { key-home { { 160 15 } { 10 10 } } } + { key-page-up { { 170 15 } { 10 10 } } } + + { key-delete { { 150 25 } { 10 10 } } } + { key-end { { 160 25 } { 10 10 } } } + { key-page-down { { 170 25 } { 10 10 } } } + + { key-up-arrow { { 160 45 } { 10 10 } } } + { key-left-arrow { { 150 55 } { 10 10 } } } + { key-down-arrow { { 160 55 } { 10 10 } } } + { key-right-arrow { { 170 55 } { 10 10 } } } + + + { key-keypad-numlock { { 185 15 } { 10 10 } } } + { key-keypad-/ { { 195 15 } { 10 10 } } } + { key-keypad-* { { 205 15 } { 10 10 } } } + { key-keypad-- { { 215 15 } { 10 10 } } } + + { key-keypad-7 { { 185 25 } { 10 10 } } } + { key-keypad-8 { { 195 25 } { 10 10 } } } + { key-keypad-9 { { 205 25 } { 10 10 } } } + { key-keypad-+ { { 215 25 } { 10 20 } } } + + { key-keypad-4 { { 185 35 } { 10 10 } } } + { key-keypad-5 { { 195 35 } { 10 10 } } } + { key-keypad-6 { { 205 35 } { 10 10 } } } + + { key-keypad-1 { { 185 45 } { 10 10 } } } + { key-keypad-2 { { 195 45 } { 10 10 } } } + { key-keypad-3 { { 205 45 } { 10 10 } } } + { key-keypad-enter { { 215 45 } { 10 20 } } } + + { key-keypad-0 { { 185 55 } { 20 10 } } } + { key-keypad-. { { 205 55 } { 10 10 } } } +} ; + +: KEYBOARD-SIZE { 225 65 } ; +: FREQUENCY ( -- f ) 30 recip seconds ; + +TUPLE: key-caps-gadget < gadget keys alarm ; + +: make-key-gadget ( scancode dim array -- ) + [ + swap [ + " " [ ] + swap [ first >>loc ] [ second >>dim ] bi + ] [ execute ] bi* + ] dip set-nth ; + +: add-keys-gadgets ( gadget -- gadget ) + key-locations 256 f + [ [ make-key-gadget ] curry assoc-each ] + [ [ [ add-gadget ] when* ] each ] + [ >>keys ] tri ; + +: ( -- gadget ) + key-caps-gadget new-gadget + add-keys-gadgets ; + +M: key-caps-gadget pref-dim* drop KEYBOARD-SIZE ; + +: update-key-caps-state ( gadget -- ) + read-keyboard keys>> over keys>> + [ [ (>>selected?) ] [ drop ] if* ] 2each + relayout-1 ; + +M: key-caps-gadget graft* + dup '[ , update-key-caps-state ] FREQUENCY every >>alarm + drop ; + +M: key-caps-gadget ungraft* + alarm>> [ cancel-alarm ] when* ; + +: key-caps ( -- ) + [ + open-game-input + 5 "Key Caps" open-window + ] with-ui ; + +MAIN: key-caps diff --git a/extra/key-caps/summary.txt b/extra/key-caps/summary.txt new file mode 100644 index 0000000000..f7d7a2c67c --- /dev/null +++ b/extra/key-caps/summary.txt @@ -0,0 +1 @@ +Graphical keyboard diagram diff --git a/extra/key-caps/tags.txt b/extra/key-caps/tags.txt new file mode 100644 index 0000000000..c253983475 --- /dev/null +++ b/extra/key-caps/tags.txt @@ -0,0 +1 @@ +keyboard