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 * Implement proper string metrics computation (with cache), when lyxrc.force_paint_single_char is false. Next steps: * re-implement getColumnNearX using row elements * get rid of old code of cursorX and getColumnNearX (which have been kept for comparison purpose). * 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.