Composite-pose chrome layout, composite-pose->draft, and
composite-draft->plan. Pure data-side: shared-scale reconciliation,
chrome geometry computation, per-leaf opt adjustment. The
plan-to-membrane rendering for composites lives in
render/composite.clj, keeping this namespace free of membrane
dependencies.
Shared scales are reconciled before drafting by stamping a forced domain on matching leaves (impl.pose/inject-shared-scales).
When the composite root carries a legend-producing mapping (:color/:size/:alpha), the chrome reserves a strip on the right of the grid; the per-leaf opts get :suppress-legend true so each cell hides its own legend, and the rendering side (render/ composite.clj) draws ONE shared legend in the reserved strip.
Composite-pose chrome layout, composite-pose->draft, and composite-draft->plan. Pure data-side: shared-scale reconciliation, chrome geometry computation, per-leaf opt adjustment. The plan-to-membrane rendering for composites lives in `render/composite.clj`, keeping this namespace free of membrane dependencies. Shared scales are reconciled before drafting by stamping a forced domain on matching leaves (impl.pose/inject-shared-scales). When the composite root carries a legend-producing mapping (:color/:size/:alpha), the chrome reserves a strip on the right of the grid; the per-leaf opts get :suppress-legend true so each cell hides its own legend, and the rendering side (render/ composite.clj) draws ONE shared legend in the reserved strip.
(composite-draft->plan composite-draft)Convert a CompositeDraft into a CompositePlan. Per sub-draft, this calls draft->plan to produce a leaf plan and wraps it with its rect and path in :sub-plots. The shared-legend spec is computed once from a representative leaf draft (eliminating the rep-leaf-plan N+1 issue from the round-2 internals review).
Convert a CompositeDraft into a CompositePlan. Per sub-draft, this calls draft->plan to produce a leaf plan and wraps it with its rect and path in :sub-plots. The shared-legend spec is computed once from a representative leaf draft (eliminating the rep-leaf-plan N+1 issue from the round-2 internals review).
(composite-pose->draft composite)Resolve a composite pose into a CompositeDraft. Each sub-draft entry carries the leaf's path, its rect inside the composite, the contextualized leaf draft (shared-scale domains injected, per-leaf opts adjusted), and the per-leaf opts (width/height merged from the rect).
Per-leaf draft contextualization happens here, not at plan stage:
The chrome-spec captures the resolved chrome geometry for the composite as a whole; the layout map (path -> rect) is kept as a first-class field on the CompositeDraft so downstream stages do not need to recompute layout from the original pose tree.
Resolve a composite pose into a CompositeDraft. Each sub-draft entry
carries the leaf's path, its rect inside the composite, the
contextualized leaf draft (shared-scale domains injected,
per-leaf opts adjusted), and the per-leaf opts (width/height
merged from the rect).
Per-leaf draft contextualization happens here, not at plan stage:
- Shared-scale domains are stamped via inject-shared-scales /
apply-shared-scale-domains, so per-leaf drafts carry forced
:x-scale / :y-scale.
- Matrix-layout strip labels suppress the per-leaf x-label /
y-label (so axis labels appear only on the strip, not inside
each cell).
The chrome-spec captures the resolved chrome geometry for the
composite as a whole; the layout map (path -> rect) is kept as a
first-class field on the CompositeDraft so downstream stages do
not need to recompute layout from the original pose tree.cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |