Compute whitespace properties and line metrics for each line eagerly #420
+229
−205
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR affects the computation of per-line "metrics" (
line_height
,ascent
,descent
, etc) and per-text-run "whitespace properties" (is_whitespace
,has_trailing_whitespace
).Previously, the computation of these metrics was deferred until line-breaking of all lines had completed (in the
BreakLines::finish
method). This PR moves the computations so that the metrics and whitespace properties for each line are computed immediately after that line is "committed" by the line breaker, and before the next line is laid out.The motivation for this is to make the
line_height
of line N available to help determine the y-position of line N+1. This is necessary for text layout with "excluded regions" (including floats) as in this scenario themax_advance
of a line depends on it's y-position.(note: the majority of the diff here is indentation because the body of a loop has been moved into it's own method)