fix mouse position conversion and canvas moving
This commit is contained in:
parent
3b1b989ccc
commit
75189fbdee
|
@ -66,7 +66,8 @@
|
||||||
get-client-size
|
get-client-size
|
||||||
is-shown-to-root?
|
is-shown-to-root?
|
||||||
move get-x get-y
|
move get-x get-y
|
||||||
on-size)
|
on-size
|
||||||
|
register-as-child)
|
||||||
|
|
||||||
(define vscroll-ok? (and (memq 'vscroll style) #t))
|
(define vscroll-ok? (and (memq 'vscroll style) #t))
|
||||||
(define vscroll? vscroll-ok?)
|
(define vscroll? vscroll-ok?)
|
||||||
|
@ -120,6 +121,9 @@
|
||||||
(get-client-size xb yb)
|
(get-client-size xb yb)
|
||||||
(send dc reset-bounds (NSPoint-x p) (NSPoint-y p) (unbox xb) (unbox yb))))
|
(send dc reset-bounds (NSPoint-x p) (NSPoint-y p) (unbox xb) (unbox yb))))
|
||||||
|
|
||||||
|
(define/override (maybe-register-as-child parent on?)
|
||||||
|
(register-as-child parent on?))
|
||||||
|
|
||||||
(define/public (on-paint) (void))
|
(define/public (on-paint) (void))
|
||||||
|
|
||||||
(define/override (set-size x y w h)
|
(define/override (set-size x y w h)
|
||||||
|
|
|
@ -145,6 +145,8 @@
|
||||||
(define/override (is-parent-enabled-to-root?)
|
(define/override (is-parent-enabled-to-root?)
|
||||||
#t)
|
#t)
|
||||||
|
|
||||||
|
(define/override (is-view?) #f)
|
||||||
|
|
||||||
(define/public (flip-screen y)
|
(define/public (flip-screen y)
|
||||||
(let ([f (tell #:type _NSRect (tell cocoa screen) frame)])
|
(let ([f (tell #:type _NSRect (tell cocoa screen) frame)])
|
||||||
(- (NSSize-height (NSRect-size f)) y)))
|
(- (NSSize-height (NSRect-size f)) y)))
|
||||||
|
|
|
@ -31,6 +31,28 @@
|
||||||
x y w h
|
x y w h
|
||||||
style
|
style
|
||||||
label)
|
label)
|
||||||
|
(inherit register-as-child)
|
||||||
|
|
||||||
|
(define children null)
|
||||||
|
|
||||||
|
(define/public (fix-dc)
|
||||||
|
(for ([child (in-list children)])
|
||||||
|
(send child fix-dc)))
|
||||||
|
|
||||||
|
(define/override (set-size x y w h)
|
||||||
|
(super set-size x y w h)
|
||||||
|
(fix-dc))
|
||||||
|
|
||||||
|
(define/override (maybe-register-as-child parent on?)
|
||||||
|
(register-as-child parent on?))
|
||||||
|
|
||||||
|
(define/override (register-child child on?)
|
||||||
|
(let ([now-on? (and (memq child children) #t)])
|
||||||
|
(unless (eq? on? now-on?)
|
||||||
|
(set! children
|
||||||
|
(if on?
|
||||||
|
(cons child children)
|
||||||
|
(remq child children))))))
|
||||||
|
|
||||||
(super-new [parent parent]
|
(super-new [parent parent]
|
||||||
[cocoa
|
[cocoa
|
||||||
|
@ -39,4 +61,3 @@
|
||||||
initWithFrame: #:type _NSRect (make-NSRect (make-NSPoint x y)
|
initWithFrame: #:type _NSRect (make-NSRect (make-NSPoint x y)
|
||||||
(make-NSSize w h))))]
|
(make-NSSize w h))))]
|
||||||
[no-show? (memq 'deleted style)]))
|
[no-show? (memq 'deleted style)]))
|
||||||
|
|
||||||
|
|
|
@ -89,55 +89,57 @@
|
||||||
(let* ([modifiers (tell #:type _NSUInteger event modifierFlags)]
|
(let* ([modifiers (tell #:type _NSUInteger event modifierFlags)]
|
||||||
[bit? (lambda (m b) (positive? (bitwise-and m b)))]
|
[bit? (lambda (m b) (positive? (bitwise-and m b)))]
|
||||||
[pos (tell #:type _NSPoint event locationInWindow)]
|
[pos (tell #:type _NSPoint event locationInWindow)]
|
||||||
[str (tell #:type _NSString event characters)]
|
[str (tell #:type _NSString event characters)])
|
||||||
[k (new key-event%
|
(let-values ([(x y) (send wx window-point-to-view pos)])
|
||||||
[key-code (or
|
(let ([k (new key-event%
|
||||||
(map-key-code (tell #:type _ushort event keyCode))
|
[key-code (or
|
||||||
(if (string=? "" str)
|
(map-key-code (tell #:type _ushort event keyCode))
|
||||||
#\nul
|
(if (string=? "" str)
|
||||||
(string-ref str 0)))]
|
#\nul
|
||||||
[shift-down (bit? modifiers NSShiftKeyMask)]
|
(string-ref str 0)))]
|
||||||
[control-down (bit? modifiers NSControlKeyMask)]
|
[shift-down (bit? modifiers NSShiftKeyMask)]
|
||||||
[meta-down (bit? modifiers NSCommandKeyMask)]
|
[control-down (bit? modifiers NSControlKeyMask)]
|
||||||
[alt-down (bit? modifiers NSAlternateKeyMask)]
|
[meta-down (bit? modifiers NSCommandKeyMask)]
|
||||||
[x (NSPoint-x pos)]
|
[alt-down (bit? modifiers NSAlternateKeyMask)]
|
||||||
[y (NSPoint-y pos)]
|
[x (->long x)]
|
||||||
[time-stamp (->long (* (tell #:type _double event timestamp) 1000.0))]
|
[y (->long y)]
|
||||||
[caps-down (bit? modifiers NSAlphaShiftKeyMask)])])
|
[time-stamp (->long (* (tell #:type _double event timestamp) 1000.0))]
|
||||||
(if (send wx wants-all-events?)
|
[caps-down (bit? modifiers NSAlphaShiftKeyMask)])])
|
||||||
(begin
|
(if (send wx wants-all-events?)
|
||||||
(queue-window-event wx (lambda ()
|
(begin
|
||||||
(send wx dispatch-on-char k #f)))
|
(queue-window-event wx (lambda ()
|
||||||
#t)
|
(send wx dispatch-on-char k #f)))
|
||||||
(constrained-reply (send wx get-eventspace)
|
#t)
|
||||||
(lambda () (send wx dispatch-on-char k #t))
|
(constrained-reply (send wx get-eventspace)
|
||||||
#t))))
|
(lambda () (send wx dispatch-on-char k #t))
|
||||||
|
#t))))))
|
||||||
|
|
||||||
(define (do-mouse-event wx event kind l? m? r?)
|
(define (do-mouse-event wx event kind l? m? r?)
|
||||||
(let* ([modifiers (tell #:type _NSUInteger event modifierFlags)]
|
(let* ([modifiers (tell #:type _NSUInteger event modifierFlags)]
|
||||||
[bit? (lambda (m b) (positive? (bitwise-and m b)))]
|
[bit? (lambda (m b) (positive? (bitwise-and m b)))]
|
||||||
[pos (tell #:type _NSPoint event locationInWindow)]
|
[pos (tell #:type _NSPoint event locationInWindow)])
|
||||||
[m (new mouse-event%
|
(let-values ([(x y) (send wx window-point-to-view pos)])
|
||||||
[event-type kind]
|
(let ([m (new mouse-event%
|
||||||
[left-down l?]
|
[event-type kind]
|
||||||
[middle-down m?]
|
[left-down l?]
|
||||||
[right-down r?]
|
[middle-down m?]
|
||||||
[x (->long (NSPoint-x pos))]
|
[right-down r?]
|
||||||
[y (->long (send wx flip-client (NSPoint-y pos)))]
|
[x (->long x)]
|
||||||
[shift-down (bit? modifiers NSShiftKeyMask)]
|
[y (->long y)]
|
||||||
[control-down (bit? modifiers NSControlKeyMask)]
|
[shift-down (bit? modifiers NSShiftKeyMask)]
|
||||||
[meta-down (bit? modifiers NSCommandKeyMask)]
|
[control-down (bit? modifiers NSControlKeyMask)]
|
||||||
[alt-down (bit? modifiers NSAlternateKeyMask)]
|
[meta-down (bit? modifiers NSCommandKeyMask)]
|
||||||
[time-stamp (->long (* (tell #:type _double event timestamp) 1000.0))]
|
[alt-down (bit? modifiers NSAlternateKeyMask)]
|
||||||
[caps-down (bit? modifiers NSAlphaShiftKeyMask)])])
|
[time-stamp (->long (* (tell #:type _double event timestamp) 1000.0))]
|
||||||
(if (send wx wants-all-events?)
|
[caps-down (bit? modifiers NSAlphaShiftKeyMask)])])
|
||||||
(begin
|
(if (send wx wants-all-events?)
|
||||||
(queue-window-event wx (lambda ()
|
(begin
|
||||||
(send wx dispatch-on-event m #f)))
|
(queue-window-event wx (lambda ()
|
||||||
#t)
|
(send wx dispatch-on-event m #f)))
|
||||||
(constrained-reply (send wx get-eventspace)
|
#t)
|
||||||
(lambda () (send wx dispatch-on-event m #t))
|
(constrained-reply (send wx get-eventspace)
|
||||||
#t))))
|
(lambda () (send wx dispatch-on-event m #t))
|
||||||
|
#t))))))
|
||||||
|
|
||||||
(define window%
|
(define window%
|
||||||
(class object%
|
(class object%
|
||||||
|
@ -173,7 +175,14 @@
|
||||||
(define/public (show on?)
|
(define/public (show on?)
|
||||||
(if on?
|
(if on?
|
||||||
(tellv (send parent get-cocoa-content) addSubview: cocoa)
|
(tellv (send parent get-cocoa-content) addSubview: cocoa)
|
||||||
(tellv cocoa removeFromSuperview)))
|
(tellv cocoa removeFromSuperview))
|
||||||
|
(maybe-register-as-child parent on?))
|
||||||
|
(define/public (maybe-register-as-child parent on?)
|
||||||
|
(void))
|
||||||
|
(define/public (register-as-child parent on?)
|
||||||
|
(send parent register-child this on?))
|
||||||
|
(define/public (register-child child on?)
|
||||||
|
(void))
|
||||||
|
|
||||||
(define/public (is-shown?)
|
(define/public (is-shown?)
|
||||||
(and (tell cocoa superview) #t))
|
(and (tell cocoa superview) #t))
|
||||||
|
@ -210,6 +219,16 @@
|
||||||
(- y (client-y-offset))))))
|
(- y (client-y-offset))))))
|
||||||
(define/public (client-y-offset) 0)
|
(define/public (client-y-offset) 0)
|
||||||
|
|
||||||
|
(define/public (is-view?) #t)
|
||||||
|
(define/public (window-point-to-view pos)
|
||||||
|
(let ([pos (if (is-view?)
|
||||||
|
(tell #:type _NSPoint (get-cocoa-content)
|
||||||
|
convertPoint: #:type _NSPoint pos
|
||||||
|
fromView: #f)
|
||||||
|
pos)])
|
||||||
|
(values (NSPoint-x pos)
|
||||||
|
(flip-client (NSPoint-y pos)))))
|
||||||
|
|
||||||
(define/public (get-x)
|
(define/public (get-x)
|
||||||
(->long (NSPoint-x (NSRect-origin (get-frame)))))
|
(->long (NSPoint-x (NSRect-origin (get-frame)))))
|
||||||
(define/public (get-y)
|
(define/public (get-y)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user