From 8f3718977046ce73e0174b0fa550f91a18106e0d Mon Sep 17 00:00:00 2001 From: David Thompson Date: Sun, 1 Dec 2013 22:30:37 -0500 Subject: Move event handlers and signals into their own modules. * 2d/game.scm (register-event-handler): New procedure. (mouse-*, key-*, window-*): Remove signals. * 2d/window.scm (window-size): New signal. * 2d/mouse.scm: New module. * 2d/keyboard.scm: New module. --- 2d/mouse.scm | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 2d/mouse.scm (limited to '2d/mouse.scm') diff --git a/2d/mouse.scm b/2d/mouse.scm new file mode 100644 index 0000000..1c118b2 --- /dev/null +++ b/2d/mouse.scm @@ -0,0 +1,63 @@ +;;; guile-2d +;;; Copyright (C) 2013 David Thompson +;;; +;;; Guile-2d is free software: you can redistribute it and/or modify it +;;; under the terms of the GNU Lesser General Public License as +;;; published by the Free Software Foundation, either version 3 of the +;;; License, or (at your option) any later version. +;;; +;;; Guile-2d is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;;; Lesser General Public License for more details. +;;; +;;; You should have received a copy of the GNU Lesser General Public +;;; License along with this program. If not, see +;;; . + +;;; Commentary: +;; +;; Keyboard signals. +;; +;;; Code: + +(define-module (2d mouse) + #:use-module ((sdl sdl) #:prefix SDL:) + #:use-module (2d game) + #:use-module (2d signals) + #:use-module (2d vector2) + #:export (mouse-position + mouse-last-down + mouse-last-up + mouse-down?)) + +(define mouse-last-down (make-signal)) +(define mouse-last-up (make-signal)) +(define mouse-position (make-signal #:init (vector2 0 0))) + +(define (mouse-down? button) + "Create a signal for the state of BUTTON. Value is #t when mouse +button is pressed and #f otherwise." + (make-signal + #:filter (lambda (value old from) + (eq? value button)) + #:transformer (lambda (value old from) + (if (eq? from mouse-last-down) #t #f)) + #:connectors (list mouse-last-down mouse-last-up))) + +(register-event-handler + 'mouse-motion + (lambda (e) + (signal-set! mouse-position + (vector2 (SDL:event:motion:x e) + (SDL:event:motion:y e))))) + +(register-event-handler + 'mouse-down + (lambda (e) + (signal-set! mouse-last-down (SDL:event:button:button e)))) + +(register-event-handler + 'mouse-up + (lambda (e) + (signal-set! mouse-last-up (SDL:event:button:button e)))) -- cgit v1.2.3