summaryrefslogtreecommitdiff
path: root/lisparuga/utils.scm
diff options
context:
space:
mode:
Diffstat (limited to 'lisparuga/utils.scm')
-rw-r--r--lisparuga/utils.scm15
1 files changed, 14 insertions, 1 deletions
diff --git a/lisparuga/utils.scm b/lisparuga/utils.scm
index 0c67504..db7c1d8 100644
--- a/lisparuga/utils.scm
+++ b/lisparuga/utils.scm
@@ -15,12 +15,25 @@
;;; along with Lisparuga. If not, see <http://www.gnu.org/licenses/>.
(define-module (lisparuga utils)
+ #:use-module (sly input keyboard)
#:use-module (sly math rect)
#:use-module (sly math vector)
+ #:use-module (sly signal)
#:export (resolution
origin2
- bounds))
+ bounds
+ key-toggle))
(define resolution (vector2 120 160))
(define origin2 (vector2 0 0))
(define bounds (make-rect (vector2 0 0) resolution))
+
+(define (key-toggle key)
+ "Create a signal that is initially #f and toggles between #t and #f
+each time KEY is pressed."
+ (signal-fold (lambda (down? previous)
+ (and down? (not previous)))
+ #f
+ (signal-filter identity #f
+ ;; Ignore repeated key down signals.
+ (signal-drop-repeats (key-down? key)))))