summaryrefslogtreecommitdiff
path: root/sly/input
diff options
context:
space:
mode:
authorDavid Thompson <dthompson2@worcester.edu>2014-11-08 08:42:56 -0500
committerDavid Thompson <dthompson2@worcester.edu>2014-11-08 08:42:56 -0500
commitd0b686b4f48621c6a5adc5a0e115de77a0ba3724 (patch)
tree781ab5b96011b73d0c414c91f3ce3b1923ff9e7d /sly/input
parent7a8b86f6164bc35f7a26817d19a40ce841ddb02c (diff)
input: Move mouse module to sly/input directory.
* sly/mouse.scm: Delete. * sly/input/mouse.scm: New file. * Makefile.am (SOURCES): Add new file. Delete old one. * examples/font.scm: Use (sly input mouse).
Diffstat (limited to 'sly/input')
-rw-r--r--sly/input/mouse.scm98
1 files changed, 98 insertions, 0 deletions
diff --git a/sly/input/mouse.scm b/sly/input/mouse.scm
new file mode 100644
index 0000000..22c6d8c
--- /dev/null
+++ b/sly/input/mouse.scm
@@ -0,0 +1,98 @@
+;;; Sly
+;;; Copyright (C) 2013, 2014 David Thompson <dthompson2@worcester.edu>
+;;;
+;;; This program is free software: you can redistribute it and/or
+;;; modify it under the terms of the GNU General Public License as
+;;; published by the Free Software Foundation, either version 3 of the
+;;; License, or (at your option) any later version.
+;;;
+;;; This program 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
+;;; General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with this program. If not, see
+;;; <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;;
+;; Keyboard signals.
+;;
+;;; Code:
+
+(define-module (sly input mouse)
+ #:use-module ((sdl sdl) #:prefix SDL:)
+ #:use-module (sly event)
+ #:use-module (sly signal)
+ #:use-module (sly math vector)
+ #:export (mouse-move-hook
+ mouse-press-hook
+ mouse-click-hook
+ mouse-x
+ mouse-y
+ mouse-position
+ mouse-last-down
+ mouse-last-up
+ mouse-down?))
+
+(define mouse-move-hook (make-hook 2))
+
+(register-event-handler
+ 'mouse-motion
+ (lambda (e)
+ (run-hook mouse-move-hook
+ (SDL:event:motion:x e)
+ (SDL:event:motion:y e))))
+
+(define-signal mouse-position
+ (hook->signal mouse-move-hook
+ (vector2 0 0)
+ vector2))
+
+(define-signal mouse-x (signal-map vx mouse-position))
+(define-signal mouse-y (signal-map vy mouse-position))
+
+(define mouse-press-hook (make-hook 3))
+
+(register-event-handler
+ 'mouse-button-down
+ (lambda (e)
+ (run-hook mouse-press-hook
+ (SDL:event:button:button e)
+ (SDL:event:button:x e)
+ (SDL:event:button:y e))))
+
+(define-signal mouse-last-down
+ (hook->signal mouse-press-hook
+ 'none
+ (lambda (button x y)
+ button)))
+
+(define mouse-click-hook (make-hook 3))
+
+(register-event-handler
+ 'mouse-button-up
+ (lambda (e)
+ (run-hook mouse-click-hook
+ (SDL:event:button:button e)
+ (SDL:event:button:x e)
+ (SDL:event:button:y e))))
+
+(define-signal mouse-last-up
+ (hook->signal mouse-click-hook
+ 'none
+ (lambda (button x y)
+ button)))
+
+(define (mouse-down? button)
+ "Create a signal for the state of BUTTON. Value is #t when mouse
+button is pressed or #f otherwise."
+ (define (same-button? other-button)
+ (eq? button other-button))
+
+ (define (button-filter value signal)
+ (signal-constant value (signal-filter #f same-button? signal)))
+
+ (signal-merge (button-filter #f mouse-last-up)
+ (button-filter #t mouse-last-down)))