mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-07 02:15:34 +00:00
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>
This commit is contained in:
@@ -984,6 +984,12 @@ func (e *Editor) Read(p []byte) (int, error) {
|
|||||||
return e.text.Read(p)
|
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 {
|
func max(a, b int) int {
|
||||||
if a > b {
|
if a > b {
|
||||||
return a
|
return a
|
||||||
|
|||||||
@@ -307,6 +307,10 @@ type Region struct {
|
|||||||
Baseline int
|
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
|
// 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
|
// [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.
|
// return results instead of allocating, provided that there is enough capacity.
|
||||||
|
|||||||
@@ -341,3 +341,9 @@ func (l *Selectable) Events() []EditorEvent {
|
|||||||
l.prevEvents = 0
|
l.prevEvents = 0
|
||||||
return events
|
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)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user