~eliasnaur/gio

b46c0f5907936194673ddaa254f2fb9e9a57e085 — Chris Waldon 11 months ago bebc73d
widget: use reliable text direction checks, not heuristics

This commit switches the way in which the editor and helper functions check
for RTL text from a heuristic to using the actual text direction.

Signed-off-by: Chris Waldon <christopher.waldon.dev@gmail.com>
2 files changed, 1 insertions(+), 8 deletions(-)

M widget/editor.go
M widget/label.go
M widget/editor.go => widget/editor.go +0 -3
@@ 794,9 794,6 @@ func (e *Editor) PaintText(gtx layout.Context) {
		start, end := clipLine(e.lines, e.Alignment, e.viewSize.X, cl, pos)
		line := e.lines[start.lineCol.Y]
		off := image.Point{X: start.x.Floor(), Y: start.y}.Sub(scroll)
		if start.lineCol.X > end.lineCol.X {
			start, end = end, start
		}
		l := subLayout(line, start, end)

		t := op.Offset(off).Push(gtx.Ops)

M widget/label.go => widget/label.go +1 -5
@@ 68,13 68,9 @@ func clipLine(lines []text.Line, alignment text.Alignment, width int, clip image
}

func subLayout(line text.Line, start, end combinedPos) text.Layout {
	if start.lineCol.X == line.Layout.Runes.Count {
		return text.Layout{}
	}

	startCluster := clusterIndexFor(line, start.lineCol.X, start.clusterIndex)
	endCluster := clusterIndexFor(line, end.lineCol.X, end.clusterIndex)
	if startCluster > endCluster {
	if line.Layout.Direction.Progression() == system.TowardOrigin {
		startCluster, endCluster = endCluster, startCluster
	}
	return line.Layout.Slice(startCluster, endCluster)