fix: add draw-text method for raw 2D arrays
Application code (passepartout TUI) calls draw-text with a framebuffer (2D array) as the first argument, but draw-text only had methods for framebuffer-backend CLOS instances. Added a method on array that sets cells directly on the framebuffer array, matching make-framebuffer's return type.
This commit is contained in:
@@ -356,9 +356,32 @@ does not need (e.g., reverse, dim, blink).
|
||||
do (%set-cell fb (+ x i) y (char string i)
|
||||
:fg fg :bg bg
|
||||
:bold bold :italic italic :underline underline
|
||||
:link-url link-url)))
|
||||
:link-url link-url)))
|
||||
#+END_SRC
|
||||
|
||||
*** draw-text (raw array)
|
||||
|
||||
Direct rendering onto a raw 2D framebuffer array (the type returned by
|
||||
~make-framebuffer~). This lets application code call ~draw-text~ directly on a
|
||||
framebuffer without wrapping it in a ~framebuffer-backend~.
|
||||
|
||||
#+begin_src lisp :tangle ../src/rendering/framebuffer.lisp
|
||||
(defmethod draw-text ((fb array) x y string fg bg
|
||||
&key bold italic underline reverse dim blink
|
||||
&allow-other-keys)
|
||||
(declare (ignore reverse dim blink))
|
||||
(let ((h (array-dimension fb 0))
|
||||
(w (array-dimension fb 1)))
|
||||
(loop for i from 0 below (length string)
|
||||
for cx from x
|
||||
while (< cx w)
|
||||
when (and (< y h) (>= cx 0) (>= y 0))
|
||||
do (setf (aref fb y cx)
|
||||
(make-cell :char (char string i)
|
||||
:fg fg :bg bg
|
||||
:bold bold :italic italic :underline underline)))))
|
||||
#+end_src
|
||||
|
||||
*** draw-rect
|
||||
|
||||
Fill a rectangular region with space characters and an optional background
|
||||
|
||||
Reference in New Issue
Block a user