~eliasnaur/gio

dc6fbf07f0adfff7719aad0584078ee32b9e3188 — Chris Waldon 5 months ago e98c895
widget: expose text region resolution

This commit adds exported methods to both LabelState and Editor
allowing callers to locate the text regions representing a range
of runes. This can be used to build interactive subregions of text,
like (for instance) hyperlinks.

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

M widget/editor.go
M widget/index.go
M widget/selectable.go
M widget/editor.go => widget/editor.go +6 -0
@@ 984,6 984,12 @@ func (e *Editor) Read(p []byte) (int, error) {
	return e.text.Read(p)
}

// Regions returns visible regions covering the rune range [start,end).
func (e *Editor) Regions(start, end int, regions []Region) []Region {
	e.initBuffer()
	return e.text.Regions(start, end, regions)
}

func max(a, b int) int {
	if a > b {
		return a

M widget/index.go => widget/index.go +4 -0
@@ 307,6 307,10 @@ type Region struct {
	Baseline int
}

// region is identical to Region except that its coordinates are in document
// space instead of a widget coordinate space.
type region = Region

// locate returns highlight regions covering the glyphs that represent the runes in
// [startRune,endRune). If the rects parameter is non-nil, locate will use it to
// return results instead of allocating, provided that there is enough capacity.

M widget/selectable.go => widget/selectable.go +6 -0
@@ 341,3 341,9 @@ func (l *Selectable) Events() []EditorEvent {
	l.prevEvents = 0
	return events
}

// Regions returns visible regions covering the rune range [start,end).
func (l *Selectable) Regions(start, end int, regions []Region) []Region {
	l.initialize()
	return l.text.Regions(start, end, regions)
}