summaryrefslogtreecommitdiff
path: root/src/layout/stack.rs
AgeCommit message (Collapse)Author
2021-10-26Simplify node constructionLaurenz
2021-10-26Fr in stack and parLaurenz
2021-10-23Introduce page / block / inline levelsLaurenz
2021-10-23Revise block node contractLaurenz
Frames produced by block nodes are now always treated as exactly one per given region and a frame must not be larger than its respective region. Any overflow must be handled internally. This means that stack and grid don't need to search for fitting regions anymore, since the child has already does that for them. This commit further moves stack spacing into a new `SpacingNode`.
2021-10-23Remove inline alignment from stackLaurenz
The current inline alignment is very broken and leads to lots of subtle weirdness. Getting rid of it simplifies the stack's interface a lot. At a later point either: - inline alignment will be added back in a better way, or - all nodes will be able to expand or align themselves, meaning that the stack's children take care of their alignment
2021-09-27Fix panic due to bad alignments in stack functionLaurenz
2021-09-25Prevent paragraph from overflowing due to trailing linebreakLaurenz
2021-09-10Reimplement `Debug` for layout nodesLaurenz
2021-09-10Set the correct base for grid cellsLaurenz
2021-08-21Shorter/clearer field name for geometry typesLaurenz
Size { width, height } => Size { w, h } Spec { horizontal, vertical } => Spec { x, y } Gen { cross, main } => Gen { inline, block }
2021-08-21Prune derivesLaurenz
2021-08-19Refactor layouting a bitLaurenz
Notably: - Handle aspect ratio in fixed node - Inline constraint inflation into pad node
2021-08-17Make percentages for h and v relative to area instead of font sizeLaurenz
2021-08-14Separate type for string valuesLaurenz
2021-07-10Reference-count complex valuesLaurenz
Rename some nodes types
2021-07-08Add lots of Eq implsLaurenz
2021-06-29Put incremental compilation behind featureMartin Haug
2021-06-27Code review: Reverse temperatureMartin Haug
2021-06-27Code review, new stack testMartin Haug
2021-06-27Testing for incrementalMartin Haug
Also, constraint bugfixes.
2021-06-18Ref count the framesMartin
2021-06-17Setter methodLaurenz
2021-06-17Constraints (#31)Martin
2021-06-15Refactor grid row layoutLaurenz
2021-06-13Refactor column resolvingLaurenz
2021-06-12Give up on not implementing Eq and OrdLaurenz
2021-06-11Push some nodes directly into the stackLaurenz
2021-06-09Tidy upLaurenz
2021-05-27Switch to N64 type aliasLaurenz
2021-05-26Add hash impls for all nodesMartin Haug
This prepares the incremental PR. Co-Authored-By: Laurenz <laurmaedje@gmail.com>
2021-05-21Rename areas to regionsLaurenz
2021-05-17Tidy up layouting codeLaurenz
2021-05-17Move aspect ratio into stackLaurenz
2021-05-17Rename expand to fixed and switch to boolsLaurenz
2021-04-03Fix multi-page paragraph bugs 🐞Laurenz
2021-04-03New paragraph layout 🚀Laurenz
The previous paragraph layout algorithm had a couple of flaws: - It always produced line break opportunities between runs although on the textual level there might have been none. - It didn't handle trailing spacing correctly in some cases. - It wouldn't have been easily adaptable to Knuth-Plass style optimal line breaking because it was fundamentally structured first-fit run-by-run. The new paragraph layout algorithm fixes these flaws. It proceeds roughly in the following stages: 1. Collect all text in the paragraph. 2. Compute BiDi embedding levels. 3. Shape all runs, layout all children and store the resulting items in a reusable (possibly even cacheable) `ParLayout`. 3. Iterate over all line breaks in the concatenated text. 4. Construct lightweight `LineLayout` objects for full lines instead of runs. These mostly borrow from the `ParLayout` and only reshape the first and last run if necessary. The design allows to use Harfbuzz's UNSAFE_TO_BREAK mechanism to make reshaping more efficient. The size of a `LineLayout` can be measured without building the line's frame. 5. Build only the selected line's frames and stack them.
2021-03-30Baseline alignment ⏏Laurenz
2021-03-25Refactor alignments & directions 📐Laurenz
- Adds lang function - Refactors execution context - Adds StackChild and ParChild enums
2021-03-20Square, circle and ellipse 🔵Laurenz
2021-03-19Scheduled maintenance 🔨Laurenz
- New naming scheme - TextNode instead of NodeText - CallExpr instead of ExprCall - ... - Less glob imports - Removes Value::Args variant - Removes prelude - Renames Layouted to Fragment - Moves font into env - Moves shaping into layout - Moves frame into separate module
2021-03-12Rename ChildAlign to LayoutAligns ✏Laurenz
2021-03-11Better expansion behaviour 🐪Laurenz
This makes expansion behaviour inheritable by placing it into the area and passing it down during layouting instead of computing some approximation of what we want during execution.
2021-01-20If expressions 🔀Laurenz
2021-01-13Unbounded pages 🌌Laurenz
2021-01-04Better value representations, type function 🌐Laurenz
2021-01-03Move and rename many things 🚛Laurenz
2020-10-13BoxAlign and Flow aliases ✏Laurenz
2020-10-13Rename geometric eval and apply to resolve ✏Laurenz
2020-10-12Naming and grammar ✔Laurenz
2020-10-12Less vecs in layouting ⚡Laurenz