lyx_mirror/00README_STR_METRICS_BRANCH

48 lines
1.7 KiB
Plaintext
Raw Normal View History

This branch is where I (jmarc) try to implement string_wise metrics
computation. This is done through a series of cleanups. The expected
speed improvement will only be visible at the end of the road: indeed
for now we intend to keep unchanged behavior for testing purposes.
What is done:
* Make TextMetrics methods operate on Row objects: breakRow and
setRowHeight instead of rowBreakPoint and rowHeight.
* change breakRow operation to operate on text strings on which
metrics are computed. The list of elements is stored in the row object
in visual ordering, not logical.
* re-implement cursorX using row elements
* re-implement getColumnNearX using row elements (boundary is not
considered yet).
* Implement proper string metrics computation (with cache), when
lyxrc.force_paint_single_char is false. In this case, remove also
useless workarounds which disable kerning and ligatures.
Next steps:
* get rid of old code of cursorX and getColumnNearX (which have been
kept for comparison purpose, guarded with KEEP_OLD_METRICS_CODE).
* re-implement row painting using row elements (can it be done?)
* profile and see how performance can be improved.
* Document the code
Difference in behavior
* end of paragraph markers metrics are computed with the font of the
actual text, not default font. This will be extended to the other
methods.
* When cursor is after a LtR separator just before a RtL chunk, the
cursor posiiton is computed better with the new code.
Other differences that should be considered as bugs
* words longer than the screen are no monger broken at an arbitrary
point. This is a problem for languages like chinese that do not use
separators.
* Boundary is not taken in account properly in getColumnNearX