Split the verified renderer, layout engine, Grid support, native boundary, tests, examples, and paired documentation into the independent Ebox repository. Keep ETAF and application concerns outside this package.
64 lines
2.8 KiB
EmacsLisp
64 lines
2.8 KiB
EmacsLisp
;;; ebox-render-context.el --- Shared render context binding -*- lexical-binding: t; -*-
|
|
|
|
;;; Commentary:
|
|
;; Owns the compile-safe render-context binding shared by the incremental
|
|
;; planner and the buffer backend. Keeping this macro below both modules avoids
|
|
;; their runtime dependency cycle becoming an invalid byte-compiled function.
|
|
|
|
;;; Code:
|
|
|
|
(defvar ebox-viewport-width nil)
|
|
(defvar ebox-viewport-height nil)
|
|
(defvar ebox--render-runtime-revision nil)
|
|
(defvar ebox--render-cache-table nil)
|
|
(defvar ebox--render-cache-signature-cache nil)
|
|
(defvar ebox--viewport-dependent-node-ids-cache nil)
|
|
(defvar ebox--viewport-dependent-subtree-cache nil)
|
|
(defvar ebox--viewport-height-dependent-subtree-cache nil)
|
|
(defvar ebox--flex-content-min-width-table nil
|
|
"Render-owned box measurements reusable by native scene compilation.")
|
|
|
|
(declare-function ebox--buffer-render-state
|
|
"ebox-incremental" (buffer))
|
|
|
|
(defmacro ebox--with-buffer-render-context (buffer &rest body)
|
|
"Evaluate BODY using BUFFER's stored render context."
|
|
(declare (indent 1) (debug t))
|
|
(let ((target-buffer (make-symbol "target-buffer"))
|
|
(render-state (make-symbol "render-state")))
|
|
`(let* ((,target-buffer ,buffer)
|
|
(,render-state
|
|
(ebox--buffer-render-state ,target-buffer)))
|
|
(with-current-buffer ,target-buffer
|
|
(let* ((ebox-viewport-width
|
|
(plist-get ,render-state :viewport-width))
|
|
(ebox-viewport-height
|
|
(plist-get ,render-state :viewport-height))
|
|
(ebox--render-runtime-revision
|
|
(plist-get ,render-state :runtime-revision))
|
|
(ebox--render-cache-table
|
|
(plist-get ,render-state :render-cache))
|
|
(ebox--render-cache-signature-cache
|
|
(or ebox--render-cache-signature-cache
|
|
(plist-get ,render-state :render-signature-cache)
|
|
(make-hash-table :test 'eq)))
|
|
(ebox--viewport-dependent-node-ids-cache
|
|
(or ebox--viewport-dependent-node-ids-cache
|
|
(make-hash-table :test 'eq)))
|
|
(ebox--viewport-dependent-subtree-cache
|
|
(or ebox--viewport-dependent-subtree-cache
|
|
(make-hash-table :test 'eq)))
|
|
(ebox--viewport-height-dependent-subtree-cache
|
|
(or ebox--viewport-height-dependent-subtree-cache
|
|
(plist-get
|
|
,render-state
|
|
:viewport-height-dependent-subtree-cache)
|
|
(make-hash-table :test 'eq)))
|
|
(ebox--flex-content-min-width-table
|
|
(or ebox--flex-content-min-width-table
|
|
(plist-get ,render-state :flex-content-min-widths))))
|
|
,@body)))))
|
|
|
|
(provide 'ebox-render-context)
|
|
;;; ebox-render-context.el ends here
|