1. 07 Jul, 2017 3 commits
    • David Lawrence Ramsey's avatar
      softwrap: make the changes to actually allow the chunk width to vary · 8490f4ac
      David Lawrence Ramsey authored
      get_chunk_row() and get_chunk_leftedge() now become wrappers around
      get_chunk(); the latter is only used directly in place_the_cursor()
      when we need to get both the row and the leftedge.  get_chunk() now
      uses the proper formula to implement varying chunk width.
      
      Since chunk width now varies, place_the_cursor() sets the x position
      relative to the leftedge in a different way that works regardless
      of chunk width, update_softwrapped_line() loops until it gets all
      softwrap breakpoints instead of calculating the full length in
      advance and getting one full row at a time, the chunk iterators
      now count leftedges instead of rows, and fix_firstcolumn() does a
      full recalculation of the chunk that firstcolumn is on instead of
      simply shifting it back.
      
      Also, in update_softwrapped_line(), when a line's softwrap breakpoint
      is before the last column of the edit window, a ">" is now added to
      the end of it.
      
      The workaround in place_the_cursor() for when two-column characters
      straddle the edge of the screen is removed, as it's no longer needed
      now that chunks end before such characters.
      
      Furthermore, do_home() and do_end() use xplustabs() instead of
      placewewant again when calculating the leftedge, since placewewant
      refers to a column that may or may not be available (if it's not,
      the cursor will be placed wrongly).  Make get_edge_and_target() use
      xplustabs() instead of placewewant for the same reason; this also lets
      us simplify get_edge_and_target(), since xplustabs() will never be
      greater than strlenpt().  Finally, since do_end() now has to calculate
      rightedge as well as rightedge_x, use the former to implement the same
      time-saving optimizations as in do_home().
      
      The cursor is not yet adjusted when we try to go directly to a column
      past the end of a softwrap breakpoint, and placewewant handling in the
      vertical movement code is not yet adjusted for varying chunk lengths,
      but fixes for these are forthcoming.
      
      This fixes https://savannah.gnu.org/bugs/?49440.
      8490f4ac
    • David Lawrence Ramsey's avatar
      softwrap: add new functions for chunks of varying width · e375995d
      David Lawrence Ramsey authored
      get_chunk_row() replaces the formula "column / editwincols".
      
      get_chunk_leftedge() replaces "(column / editwincols) * editwincols".
      
      get_last_chunk_row() replaces "strlenpt() / editwincols".
      
      get_last_chunk_leftedge() replaces "(strlenpt() / editwincols) * editwincols".
      
      This prepares us for any changes in those formulas, and for more such
      functions later.
      e375995d
    • David Lawrence Ramsey's avatar
      softwrap: prepare for allowing the chunk width to vary · 35f6a176
      David Lawrence Ramsey authored
      The new function find_softwrap_breakpoint() returns the column number
      of the last position in screen range where we can wrap the given text
      without breaking a two-column character in half (as was done until now).
      The returned column number is the leftedge of the next softwrapped chunk.
      
      If the end of the text is reached while searching for a wrapping point,
      the parameter end_of_line is set to TRUE.
      
      The new function get_chunk() uses find_softwrap_breakpoint() to find the
      row and leftedge corresponding to a given column of a given line.
      35f6a176
  2. 02 Jul, 2017 2 commits
  3. 30 Jun, 2017 1 commit
  4. 04 Jun, 2017 3 commits
  5. 31 May, 2017 3 commits
  6. 29 May, 2017 3 commits
  7. 19 May, 2017 1 commit
  8. 16 May, 2017 1 commit
  9. 11 May, 2017 1 commit
  10. 08 May, 2017 1 commit
  11. 07 May, 2017 1 commit
  12. 05 May, 2017 2 commits
  13. 01 May, 2017 2 commits
  14. 30 Apr, 2017 1 commit
  15. 28 Apr, 2017 3 commits
  16. 25 Apr, 2017 5 commits
  17. 24 Apr, 2017 1 commit
  18. 19 Apr, 2017 1 commit
  19. 17 Apr, 2017 5 commits