commit 7eaac7306d96b79b44e3b41f106d82aa56d922e1
parent 91891d4730ba570540d106be1f44f11d867780ad
Author: Tomas Hlavaty <tom@logand.com>
Date: Sun, 6 Dec 2015 09:23:50 +0100
unicode-bitmaps in framebuffer
Diffstat:
M | fb.lisp | | | 36 | ++++++++++++++++++++++++++---------- |
1 file changed, 26 insertions(+), 10 deletions(-)
diff --git a/fb.lisp b/fb.lisp
@@ -41,17 +41,31 @@
;; rgba 8/16,8/8,8/0,0/0
;; endmode
+(defun unicode-bitmaps (psf2)
+ (let* ((bitmaps (rw.psf::psf2-bitmaps psf2))
+ (unicode (rw.psf::psf2-unicode psf2))
+ (z (make-hash-table)))
+ (assert (= 256 (length bitmaps) (length unicode)))
+ (dotimes (i 256 z)
+ (dolist (c (rw:till (rw:peek-reader
+ (rw:utf8-reader (rw:reader (pop unicode))))))
+ (setf (gethash (code-char c) z)
+ (aref bitmaps i))))))
+
+;;(unicode-bitmaps (rw.psf::load-font "/nix/store/3jzf1724gfkg942i8dbg0ixdncsv0qhf-kbd-2.0.3/share/consolefonts/Lat2-Terminus16.psfu.gz"))
+
(defun make-canvas (stream screen-width screen-height)
(declare (type fixnum screen-width screen-height))
- (let ((buffer (make-array (* 4 screen-width screen-height)
- :element-type '(unsigned-byte 8)
- :initial-element 0))
- (font (rw.psf::load-font
- ;;"/nix/store/sxrgxk6bw27c516zdvjh2mr6nk4hl9ni-terminus-font-4.39/share/consolefonts/ter-g28n.psf.gz"
- ;;"/nix/store/sxrgxk6bw27c516zdvjh2mr6nk4hl9ni-terminus-font-4.39/share/consolefonts/ter-g28b.psf.gz"
- ;;"/nix/store/3jzf1724gfkg942i8dbg0ixdncsv0qhf-kbd-2.0.3/share/consolefonts/default8x16.psfu.gz"
- "/nix/store/3jzf1724gfkg942i8dbg0ixdncsv0qhf-kbd-2.0.3/share/consolefonts/Lat2-Terminus16.psfu.gz"
- )))
+ (let* ((buffer (make-array (* 4 screen-width screen-height)
+ :element-type '(unsigned-byte 8)
+ :initial-element 0))
+ (font (rw.psf::load-font
+ ;;"/nix/store/sxrgxk6bw27c516zdvjh2mr6nk4hl9ni-terminus-font-4.39/share/consolefonts/ter-g28n.psf.gz"
+ ;;"/nix/store/sxrgxk6bw27c516zdvjh2mr6nk4hl9ni-terminus-font-4.39/share/consolefonts/ter-g28b.psf.gz"
+ ;;"/nix/store/3jzf1724gfkg942i8dbg0ixdncsv0qhf-kbd-2.0.3/share/consolefonts/default8x16.psfu.gz"
+ "/nix/store/3jzf1724gfkg942i8dbg0ixdncsv0qhf-kbd-2.0.3/share/consolefonts/Lat2-Terminus16.psfu.gz"
+ ))
+ (unicode-bitmaps (unicode-bitmaps font)))
(lambda (form)
(let ((*x* 0)
(*y* 0)
@@ -105,6 +119,8 @@
(pixel x y *ba* *br* *bg* *bb*)
(pixel x y *fa* *fr* *fg* *fb*)))))
(chara (c)
+ (bitmap (gethash c unicode-bitmaps))
+ #+nil
(let ((n (char-code c)))
(if (<= 1 n #x7f)
(bitmap (aref (rw.psf::psf2-bitmaps font) n))
@@ -240,6 +256,7 @@
*y* y)
(mapc #'rec b))))))))
(rec form)))
+ (file-position stream 0)
(write-sequence buffer stream))))
(defun test (&key (device "/dev/fb0") (width 1376 #+nil 1366) (height 768))
@@ -270,7 +287,6 @@
((:text :x 250 :y 150 :font-family "Verdana" :font-size 55)
"This is a SVG text element.")
(:font-preview)))))
- (file-position s 0)
(funcall fb "hi")))
(values))