Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix #134 and include a test for it. #175

Merged
merged 2 commits into from
Aug 28, 2023
Merged

Commits on Aug 26, 2023

  1. Fix pop-os#134 and include a test for it.

    Try to ensure that using "the width computed during an unconstrained
    layout" as the width constraint during a relayout produces the same
    layout. This is useful for certain UI layout algorithms.
    
    See pop-os#134
    
    * Instead of computing the LayoutLine width from the positioned and
      aligned glyphs, we pass through width computed during line wrapping
      (unless justified alignment is used, in this case we use the old
      approach because the use case for measuring the width isn't really
      applicable to justified text since that will just expand to the
      provided width). For the produced width to later give the same
      wrapping results when passed in as the `line_width` it needs to use
      the same exact float arithmatic that was used to compute the width
      that is compared against `line_width` when making line wrapping
      choices. Passing this width through as the LayoutLine width is the
      most covenient option without making more major changse to the API.
      Nevertheless, I am imagining that if we get a dedicated measurement
      method (i.e. that doesn't do the final positioning and alignment of
      glyphs and which caches `Vec<VisualLine>`), then this width can just
      be exposed there instead of preservering it in LayoutLine.
    * Incidentally, this fixes
      pop-os#169.
    * Switch substraction from `fit_x` to checking whether potential
      addition to the current line width would exceed the `line_width`. This
      avoids the float error being dependent on the provided `line_width`
      value.
    * When eliminating trailing space from the line width, we avoid
      backtracking with subtraction (which would not give the same exact
      value due to float error) and instead save the previous width and use
      that.
    * If the previous word did not exceed the line_width, we now include a
      single blank word even if it would cross the width limit since its
      width won't be counted. This is necessary to get the same wrapping
      behavior when re-using the measured width (which doesn't count a
      single trailing blank word). Note, this whitespace logic may be
      reworked anyway if <pop-os#155>
      is addressed.
    * Change tests to use `opt-level=1` to keep test runtime down.
    * Add `fonts` folder for fonts used in tests.
    * Fix an issue where a non-breaking whitespace was assumed to be the
      start of a section of spaces which included characters that weren't
      even whitespace.
    * Add some TODOs about incongruencies between `is_whitespace`,
      justification, and line breaks.
    Imberflur committed Aug 26, 2023
    Configuration menu
    Copy the full SHA
    91674d5 View commit details
    Browse the repository at this point in the history
  2. Comment typo fix

    Imberflur committed Aug 26, 2023
    Configuration menu
    Copy the full SHA
    13664ef View commit details
    Browse the repository at this point in the history