Skip to content

Commit a336022

Browse files
committed
add keys
1 parent 2fbbe7f commit a336022

5 files changed

Lines changed: 63 additions & 15 deletions

File tree

packages/gui/default-theme.ss

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2+
;;Copyright 2016-2080 evilbinary.
3+
;;作者:evilbinary on 12/24/16.
4+
;;邮箱:rootdebug@163.com
5+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

packages/gui/duck.ss

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
view pop progress)
99
(import (scheme) (utils libutil) (gui video) (gui edit)
1010
(gui widget) (gui draw) (gui graphic) (gui layout) (gui stb)
11-
(gui syntax))
11+
(gui keys) (gui syntax))
1212
(define (default-attrs widget)
1313
(let* ([text (widget-get-attr widget %text)]
1414
[font-name (widget-get-attrs widget 'font-name '())]
@@ -29,6 +29,12 @@
2929
widget
3030
'text-height
3131
(draw-get-text-height font font-size))
32+
(widget-set-attrs
33+
widget
34+
'focus-key-map-fun
35+
(lambda (key)
36+
(let ([k (get-default-key-map key)])
37+
(if (equal? k 'tab) 'next))))
3238
(widget-set-attrs
3339
widget
3440
"%event-font-size-hook"

packages/gui/keys.ss

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2+
;;Copyright 2016-2080 evilbinary.
3+
;;作者:evilbinary on 12/24/16.
4+
;;邮箱:rootdebug@163.com
5+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6+
(library (gui keys)
7+
(export
8+
default-key-maps
9+
get-default-key-map
10+
set-default-key-map)
11+
(import (scheme))
12+
(define default-key-map (make-hashtable equal-hash equal?))
13+
(define default-key-maps
14+
(list '(ctl 2) '(shift 1) '(alt 4) '(super 8) '(caps-lock 16)
15+
'(num-lock 32) '(a 65) '(b 66) '(c 67) '(d 68) '(v 86)
16+
'(x 88) '(up 265) '(down 264) '(left 263) '(right 262)
17+
'(tab 258)))
18+
(define (set-default-key-map key val)
19+
(hashtable-set! default-key-map key val))
20+
(define (get-default-key-map key)
21+
(hashtable-ref default-key-map key '())))
22+

packages/gui/theme.ss

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2+
;;Copyright 2016-2080 evilbinary.
3+
;;作者:evilbinary on 12/24/16.
4+
;;邮箱:rootdebug@163.com
5+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6+
(library (gui theme)
7+
(export)
8+
(import (scheme) (utils libutil) (cffi cffi) (gles gles2)
9+
(gui graphic) (gui widget) (gui layout) (gui draw)))
10+

packages/gui/widget.ss

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@
4242
%event-mouse-button %last-common-attr %event-key
4343
%event-motion %event-motion-out %event-active
4444
%event-deactive %event-button-down %event-button-up)
45-
(import (scheme) (gui graphic) (gui stb) (gui utils))
45+
(import (scheme) (gui keys) (gui graphic) (gui stb)
46+
(gui utils))
4647
(define %draw 5)
4748
(define %x 0)
4849
(define %y 1)
@@ -103,11 +104,6 @@
103104
(define default-cursor '())
104105
(define default-cursor-mode '())
105106
(define $last-hover '())
106-
(define default-key-map (make-hashtable equal-hash equal?))
107-
(define default-key-maps
108-
(list '(ctl 2) '(shift 1) '(alt 4) '(super 8) '(caps-lock 16)
109-
'(num-lock 32) '(a 65) '(b 66) '(c 67) '(d 68) '(v 86)
110-
'(x 88) '(up 265) '(down 264) '(left 263) '(right 262)))
111107
(define $widgets (list))
112108
(define (widget-init-cursor cursor)
113109
(set! default-cursor cursor))
@@ -125,10 +121,6 @@
125121
(set-default-key-map (cadar l) (caar l))
126122
(set-default-key-map (caar l) (cadar l))
127123
(loop (cdr l))))))
128-
(define (set-default-key-map key val)
129-
(hashtable-set! default-key-map key val))
130-
(define (get-default-key-map key)
131-
(hashtable-ref default-key-map key '()))
132124
(define (plus-child-y-offset widget offsety)
133125
(let loop ([child (vector-ref widget %child)])
134126
(if (pair? child)
@@ -259,8 +251,17 @@
259251
[(quote up)
260252
(if (< cy gy) (set! ret (append ret (list (car child)))))]
261253
[(quote down)
262-
(if (> cy gy)
263-
(set! ret (append ret (list (car child)))))])
254+
(if (> cy gy) (set! ret (append ret (list (car child)))))]
255+
[(quote next)
256+
(if (> cx gx)
257+
(set! ret (append ret (list (car child))))
258+
(if (> cy gy)
259+
(set! ret (append ret (list (car child))))))]
260+
[(quote prev)
261+
(if (< cx gx)
262+
(set! ret (append ret (list (car child))))
263+
(if (< cy gy)
264+
(set! ret (append ret (list (car child))))))])
264265
(loop (cdr child)))))
265266
(set! ret
266267
(list-sort
@@ -274,7 +275,11 @@
274275
ret))
275276
(define (widget-child-focus-event widget type data)
276277
(if (= (vector-ref data 2) 1)
277-
(let ([focus-child (widget-get-attrs widget 'focus-child)])
278+
(let ([focus-child (widget-get-attrs widget 'focus-child)]
279+
[focus-key-map-fun (widget-get-attrs
280+
widget
281+
'focus-key-map-fun
282+
get-default-key-map)])
278283
(if (> (length (widget-get-child widget)) 0)
279284
(let ([ret '()])
280285
(if (null? focus-child)
@@ -286,7 +291,7 @@
286291
(set! ret
287292
(widget-find-child-focus
288293
widget
289-
(get-default-key-map (vector-ref data 0))
294+
(focus-key-map-fun (vector-ref data 0))
290295
(list-ref gxy 0)
291296
(list-ref gxy 1)))))
292297
(if (> (length ret) 0)

0 commit comments

Comments
 (0)