1 ;;; frame rendering routines
5 ;; The defmethods are found in the *-render.lisp files
6 (defgeneric frame-start-render
(frame)
7 (:documentation
"Do any setup we need before we beginning rendering the frame."))
9 (defgeneric frame-end-render
(frame)
10 (:documentation
"Do any cleanup or refreshing after the frame is rendered."))
12 ;; the defmethods are found in the *-render.lisp files
13 (defgeneric window-render
(window frame
)
14 (:documentation
"Render the window in the given frame."))
16 (defgeneric frame-read-event
(frame)
17 (:documentation
"Read a keyboard event for the specified frame."))
19 (defgeneric frame-move-cursor
(frame window x y
)
20 (:documentation
"Move the cursor to the X,Y location in WINDOW on the frame, FRAME."))
22 (defun frame-render (frame)
24 (let (cursor-x cursor-y win
)
25 (labels ((render (tree)
26 (cond ((null tree
) nil
)
29 (window-reset-cache tree
)
30 ;; Figure out what part to display
33 (truncate (window-height tree
) 2))
34 (dformat +debug-vvv
+ "after framer: ~a~%"
35 (lc-cache (window-cache tree
)))
37 (multiple-value-bind (x y
) (window-render tree frame
)
38 (when (eq tree
(frame-selected-window frame
))
39 (setf win tree cursor-x x cursor-y y
))))
40 (t (cons (render (car tree
))
41 (render (cdr tree
)))))))
42 (frame-start-render frame
)
43 (render (frame-window-tree frame
))
44 (when (and win cursor-x cursor-y
)
45 (frame-move-cursor frame win cursor-x cursor-y
))
46 (frame-end-render frame
))))