summaryrefslogtreecommitdiff
path: root/src/layout/par.rs
AgeCommit message (Collapse)Author
2021-10-31Reorganize modulesLaurenz
Instead of separating functionality into layout and library, everything lives in the library now. This way, related things live side by side and there are no duplicate file names in the two directories.
2021-10-26Simplify node constructionLaurenz
2021-10-26Fr in stack and parLaurenz
2021-10-23Simplify decorationsLaurenz
2021-10-23Introduce page / block / inline levelsLaurenz
2021-10-10Rename `State` to `Style` and move it into its own moduleLaurenz
2021-09-27Refactor line reordering from callback to iteratorLaurenz
2021-09-27Fix panic due to bad alignments in stack functionLaurenz
2021-09-27Fix paragraph constraintsLaurenz
Co-Authored-By: Martin <mhaug@live.de>
2021-09-26Simplify decoration handlingLaurenz
2021-09-26More useful `Debug` implsLaurenz
2021-09-25Prevent paragraph from overflowing due to trailing linebreakLaurenz
2021-09-10Reimplement `Debug` for layout nodesLaurenz
2021-08-24Switch from state to decorations for underline/strikethrough/overlineLaurenz
2021-08-23Links! (#43)Martin
Co-authored-by: Laurenz <laurmaedje@gmail.com>
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-17Library functions behave more imperativelyLaurenz
- Templates scope state changes - State-modifying function operate in place instead of returning a template - Internal template representation contains actual owned nodes instead of a pointer to a syntax tree + an expression map - No more wide calls
2021-08-17Make percentages for h and v relative to area instead of font sizeLaurenz
2021-07-29Refactor stateLaurenz
2021-07-29Move EcoString and OptionExt into utilLaurenz
2021-07-25Merge font and par state into text stateLaurenz
2021-07-25Move and refactorLaurenz
2021-07-10Reference-count complex valuesLaurenz
Rename some nodes types
2021-07-10Eco string 🌱Laurenz
2021-07-08Add lots of Eq implsLaurenz
2021-06-30Make clippy a bit happierLaurenz
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-27Apply suggestions from code reviewMartin
Co-authored-by: Laurenz <laurmaedje@gmail.com>
2021-06-27Testing for incrementalMartin Haug
Also, constraint bugfixes.
2021-06-18Ref count the framesMartin
2021-06-17Constraints (#31)Martin
2021-06-15Refactor grid row layoutLaurenz
2021-06-13Refactor column resolvingLaurenz
2021-06-11Push some nodes directly into the stackLaurenz
2021-06-11Remove props in favor of using state for everythingLaurenz
2021-06-10Text decorationsMartin Haug
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-17Convert font units to lengths earlierLaurenz
2021-05-17Tidy up layouting codeLaurenz
2021-05-17Rename expand to fixed and switch to boolsLaurenz
2021-04-07Refactor and comment ♻Laurenz
2021-04-05Reshaping with unsafe-to-break ⚡Laurenz
Co-Authored-By: Martin <mhaug@live.de>
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-30Refactor ♻Laurenz