source: release/1.2/source/examples/cocoa/easygui/events.lisp

Last change on this file was 11797, checked in by cater, 16 years ago

Let easygui views inherit mouse handling

File size: 3.3 KB
RevLine 
[7472]1(in-package :easygui)
2
[11797]3;;; Changed by AWSC Feb 2009:
4;;; Modified define-chaining-responder-method to allow subclasses of easygui
5;;; views to inherit mouse handling behaviour.
6;;; Original work by an unknown author.
7;;; Permission to use the change is granted.
8
[7472]9;;; Event handling basics
10
11(defmacro define-chaining-responder-method (class-name
12 (objc-name lisp-name)
13 (self-arg event-arg)
14 &body arg-compute-forms)
15 `(objc:defmethod (,objc-name :void) ((,self-arg ,class-name)
16 ,event-arg)
[11797]17 (let ((superclasses (ccl:class-precedence-list (class-of (easygui-view-of ,self-arg)))))
18 (if (some #'(lambda (super)
19 (find-method #',lisp-name nil (list (class-name super)) nil))
20 superclasses)
[7472]21 (,lisp-name (easygui-view-of ,self-arg)
22 ,@arg-compute-forms)
23 (,objc-name (#/nextResponder ,self-arg) ,event-arg)))))
24
25(defmacro define-useful-mouse-event-handling-routines (class-name)
26 `(progn
27 (define-chaining-responder-method ,class-name
28 (#/mouseDown: mouse-down) (self event)
29 :cocoa-event event
30 :location (let ((objc-pt (#/convertPoint:fromView:
31 self
32 (#/locationInWindow event)
33 nil)))
34 (point (ns:ns-point-x objc-pt) (ns:ns-point-y objc-pt)))
35 :button (#/buttonNumber event)
36 :click-count (#/clickCount event)
37 :delta (point (#/deltaX event) (#/deltaY event)))
38 (define-chaining-responder-method ,class-name
39 (#/mouseUp: mouse-up) (self event)
40 :cocoa-event event
41 :location (let ((objc-pt (#/convertPoint:fromView:
42 self
43 (#/locationInWindow event)
44 nil)))
45 (point (ns:ns-point-x objc-pt) (ns:ns-point-y objc-pt)))
46 :button (#/buttonNumber event)
47 :click-count (#/clickCount event)
48 :delta (point (#/deltaX event) (#/deltaY event)))
49 (define-chaining-responder-method ,class-name
50 (#/mouseDragged: mouse-dragged) (self event)
51 :cocoa-event event
52 :location (let ((objc-pt (#/convertPoint:fromView:
53 self
54 (#/locationInWindow event)
55 nil)))
56 (point (ns:ns-point-x objc-pt) (ns:ns-point-y objc-pt))))))
57
58;;; Mouse:
59
60(defclass event-handler-mixin () ())
61
62(defclass mouse-event-handler-mixin () ())
63
64
65(macrolet ((defgeneric-and-empty-method (name (&rest args) &rest options)
66 `(defgeneric ,name ,args
67 ,@options
68 (:method ,args
69 (declare (ignore ,@args))))))
70 ;; TODO: mouse-move
71 (defgeneric-and-empty-method mouse-down (view &key cocoa-event location button
72 click-count delta))
73 (defgeneric-and-empty-method mouse-up (view &key cocoa-event location button
74 click-count delta))
75 (defgeneric-and-empty-method mouse-dragged (view &key cocoa-event location
76 delta)))
Note: See TracBrowser for help on using the repository browser.