125 Commits

Author SHA1 Message Date
Laurenz
d3f6040ced Horizon alignment 2021-11-23 11:58:16 +01:00
Laurenz
02f114d072 Remove decorum 2021-11-22 15:50:35 +01:00
Laurenz
cef46e6c40 Strokes 2021-11-20 15:51:07 +01:00
Laurenz
b2e6a29789 Refactoring 2021-11-18 00:58:32 +01:00
Laurenz
89f2e71852 Align node 2021-11-17 17:09:19 +01:00
Laurenz
9a800daa82 Image fit modes 2021-11-16 21:32:29 +01:00
Laurenz
0cdf17216f Abstraction for fr resolving 2021-11-16 18:15:47 +01:00
Laurenz
73c4701749 Introduce SizedNode 2021-11-16 11:40:42 +01:00
Martin Haug
5677766715 Fix some comments 2021-11-24 20:07:44 +01:00
Martin Haug
c020707ebc Add tracking to font function 2021-11-20 12:36:03 +01:00
Laurenz
75fffc1f9b Fine-grained capturing 2021-11-08 11:52:09 +01:00
Laurenz
65fac0e57c Refactoring
Co-Authored-By: Martin <mhaug@live.de>
2021-11-05 13:46:41 +01:00
Laurenz
feff013abb More useful Spec helpers 2021-10-31 14:40:15 +01:00
Laurenz
564cb7e989 Fix panic in pad node 2021-10-31 13:51:28 +01:00
Laurenz
fb0cd3df6e Fr in stack and par 2021-10-26 14:56:10 +02:00
Laurenz
6690bc2354 Revise block node contract
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-23 20:22:47 +02:00
Laurenz
9ac125dea8 Rename State to Style and move it into its own module 2021-10-10 21:04:10 +02:00
Laurenz
d4cc8c775d Move paint and colors into geom 2021-10-10 20:26:58 +02:00
Laurenz
7f48e8fe66 Make user-facing "debug" representation use Debug instead of Display 2021-08-31 16:25:12 +02:00
Laurenz
ee84bf7408 Add abs() function 2021-08-30 16:59:09 +02:00
Laurenz
0806af4aec Kerned PDF output 2021-08-23 13:21:44 +02:00
Laurenz
c0377de653 Shorter/clearer field name for geometry types
Size { width, height } => Size { w, h }
Spec { horizontal, vertical } => Spec { x, y }
Gen { cross, main } => Gen { inline, block }
2021-08-21 19:08:47 +02:00
Laurenz
0dd4ae0a7a Prune derives 2021-08-21 17:30:21 +02:00
Laurenz
f71c38b38d Turn backlog into iterator 2021-08-21 15:28:26 +02:00
Laurenz
a6f260ca39 Refactor layouting a bit
Notably:
- Handle aspect ratio in fixed node
- Inline constraint inflation into pad node
2021-08-19 15:52:15 +02:00
Laurenz
9462fb17b3 Convert single-field structs to tuple structs 2021-08-16 19:15:03 +02:00
Laurenz
f6814b7732 Optimize memory sizes 2021-08-13 18:17:24 +02:00
Laurenz
42a27b48df Change derive order 2021-07-29 22:27:10 +02:00
Laurenz
2c6127dea6 Refactor state 2021-07-29 13:28:19 +02:00
Laurenz
7d15dc634b Move font family and refactor alignment 2021-07-29 12:28:54 +02:00
Martin
57bd3e23c7
Apply suggestions from code review
Co-authored-by: Laurenz <laurmaedje@gmail.com>
2021-06-27 17:08:40 +02:00
Martin Haug
6b6cdae7ce Testing for incremental
Also, constraint bugfixes.
2021-06-27 12:31:27 +02:00
Laurenz
2e87808cdd Setter method 2021-06-17 14:32:24 +02:00
Martin
e14e804789
Constraints (#31) 2021-06-17 14:18:43 +02:00
Laurenz
e2cdda67dc Refactor grid row layout 2021-06-15 16:34:41 +02:00
Laurenz
a61ee46ed2 Refactor column resolving 2021-06-13 00:22:39 +02:00
Laurenz
4c37ebb936 Give up on not implementing Eq and Ord 2021-06-12 18:24:31 +02:00
Martin
fec1f41106
Allow grid cells to span multiple regions. (#30) 2021-06-12 18:19:18 +02:00
Laurenz
3330767c20 Remove props in favor of using state for everything 2021-06-11 11:30:18 +02:00
Laurenz
bce553a991 Tidy up 2021-06-09 22:44:40 +02:00
Martin Haug
29cfef0a6d Add a grid layouter 2021-06-09 22:44:40 +02:00
Martin Haug
73fa2eda2c Introduce frs 2021-06-09 22:44:40 +02:00
Laurenz
b886ced408 Switch to N64 type alias 2021-05-27 14:48:45 +02:00
Martin Haug
e27f6c1014 Add hash impls for all nodes
This prepares the incremental PR.

Co-Authored-By: Laurenz <laurmaedje@gmail.com>
2021-05-26 22:57:29 +02:00
Laurenz
c975d0d5e9 Tidy up layouting code 2021-05-17 22:55:31 +02:00
Laurenz
72478946c2 Make frames serializable 📚
This also makes serialization support non-optional since it's too much feature-management for too little benefit.
2021-04-21 21:17:25 +02:00
Laurenz
d74c9378b8 New paragraph layout 🚀
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-04-03 21:09:17 +02:00
Laurenz
76fc4cca62 Refactor alignments & directions 📐
- Adds lang function
- Refactors execution context
- Adds StackChild and ParChild enums
2021-03-25 21:32:33 +01:00
Laurenz
5e08028fb3 Syntax functions 🚀
This adds overridable functions that markup desugars into. Specifically:
- \ desugars into linebreak
- Two newlines desugar into parbreak
- * desugars into strong
- _ desugars into emph
- = .. desugars into heading
- `..` desugars into raw
2021-03-21 17:50:56 +01:00
Laurenz
898728f260 Square, circle and ellipse 🔵 2021-03-20 20:19:30 +01:00