92 lines
3.8 KiB
Scheme
92 lines
3.8 KiB
Scheme
|
(kbd/load-font "/home/user/.nix-profile/share/fonts/noto/NotoSans[wdth,wght].ttf")
|
|||
|
|
|||
|
(kbd/defclass en ()
|
|||
|
((init) (kbd/set-user-data 'state 'lower))
|
|||
|
((state) (display (or (kbd/get-user-data 'state) 'lower)) (or (kbd/get-user-data 'state) 'lower))
|
|||
|
((show-upper) (or (symbol=? (self state) 'upper) (symbol=? (self state) 'capslock)))
|
|||
|
((show-lower) (symbol=? (self state) 'lower))
|
|||
|
((show-symbols) (symbol=? (self state) 'symbols))
|
|||
|
((show-numbers) (symbol=? (self state) 'numbers))
|
|||
|
((show-preferences) (symbol=? (self state) 'preferences))
|
|||
|
|
|||
|
((rows)
|
|||
|
(cond
|
|||
|
((self show-upper) '((Q W E R T Y U I O P)
|
|||
|
(A S D F G H J K L)
|
|||
|
(Shift_L Z X C V B N M BackSpace)
|
|||
|
(show_numbers preferences space "." Return)))
|
|||
|
((self show-symbols) '((~ "`" "|" "·" √ π τ "÷" "×" "¶")
|
|||
|
("©" "®" "£" € "¥" ^ "°" * "{" "}")
|
|||
|
(show_numbers_from_symbols \ / < > = "[" "]" BackSpace)
|
|||
|
(show_letters preferences space "." Return)))
|
|||
|
((self show-numbers) '((1 2 3 4 5 6 7 8 9 0)
|
|||
|
("@" "#" $ % & - _ + "(" ")")
|
|||
|
(show_symbols "," "\"" "'" : ";" ! ? BackSpace)
|
|||
|
(show_letters preferences space "." Return)))
|
|||
|
(else '((q w e r t y u i o p)
|
|||
|
(a s d f g h j k l)
|
|||
|
(Shift_L z x c v b n m BackSpace)
|
|||
|
(show_numbers preferences space "." Return)))))
|
|||
|
|
|||
|
; 1 unit = keyboard width / total units in this row
|
|||
|
((button-width sym)
|
|||
|
(cond
|
|||
|
((equal? sym 'Shift_L) 13.0)
|
|||
|
((equal? sym 'BackSpace) 13.0)
|
|||
|
((equal? sym 'show_numbers) 13.0)
|
|||
|
((equal? sym 'show_letters) 13.0)
|
|||
|
((equal? sym 'space) 54.0)
|
|||
|
((equal? sym 'Return) 13.0)
|
|||
|
(else 10.0)))
|
|||
|
|
|||
|
((button-padding sym)
|
|||
|
(cond
|
|||
|
((equal? sym 'a) (cons 5.0 0.0))
|
|||
|
((equal? sym 'l) (cons 0.0 5.0))
|
|||
|
(else (cons 0.0 0.0))))
|
|||
|
|
|||
|
((make-button sym x y w h)
|
|||
|
(let ((sym (if (symbol? sym) (symbol->string sym) sym)))
|
|||
|
(list sym (kbd/make-text (cons x y) (cons w h) sym "Noto Sans" 74))))
|
|||
|
|
|||
|
((make-row syms y width height)
|
|||
|
(let ((total-x (apply + (map (lambda (sym)
|
|||
|
(let ((pad (self button-padding sym))
|
|||
|
(width (self button-width sym)))
|
|||
|
(+ width (car pad) (cdr pad))))
|
|||
|
syms))))
|
|||
|
(define (scale u) (/ (* u width) total-x))
|
|||
|
(define (calc x syms)
|
|||
|
(if (null? syms)
|
|||
|
'()
|
|||
|
(let* ((sym (car syms))
|
|||
|
(pad1 (self button-padding sym))
|
|||
|
(pad (cons (scale (car pad1)) (scale (cdr pad1))))
|
|||
|
(w (scale (self button-width sym))))
|
|||
|
(cons (self make-button sym (+ x (car pad)) y w height)
|
|||
|
(calc (+ x (car pad) w (cdr pad)) (cdr syms))))))
|
|||
|
(calc 0 syms)))
|
|||
|
|
|||
|
((height) 500.0)
|
|||
|
|
|||
|
((make-layout rows kbd-width)
|
|||
|
(define (height-list start end offset)
|
|||
|
(if (> start end) '() (cons start (height-list (+ start offset) end offset))))
|
|||
|
(define (append-all lists) (apply append lists))
|
|||
|
(let*
|
|||
|
((height (self height))
|
|||
|
(row-height (/ height (length rows)))
|
|||
|
(button-rows (map (lambda (row y) (self make-row row y kbd-width row-height))
|
|||
|
(reverse rows)
|
|||
|
(height-list 0 height row-height))))
|
|||
|
(kbd/make-layout (cons (list "!bg" (kbd/make-rect (cons 0 0) (cons kbd-width height))) (append-all button-rows)))))
|
|||
|
|
|||
|
((kbd-layout)
|
|||
|
(self make-layout (self rows) (kbd/width)))
|
|||
|
|
|||
|
; signals
|
|||
|
|
|||
|
((kbd/width-changed)
|
|||
|
(display "a !!!")
|
|||
|
(kbd/set-layout (self kbd-layout))))
|