MCPcopy Create free account
hub / github.com/gioui/gio / layoutText

Method layoutText

widget/text.go:486–524  ·  view source on GitHub ↗
(lt *text.Shaper)

Source from the content-addressed store, hash-verified

484}
485
486func (e *textView) layoutText(lt *text.Shaper) {
487 e.Seek(0, io.SeekStart)
488 var r io.Reader = e
489 if e.Mask != 0 {
490 e.maskReader.Reset(e, e.Mask)
491 r = &e.maskReader
492 }
493 e.index.reset()
494 it := textIterator{viewport: image.Rectangle{Max: image.Point{X: math.MaxInt, Y: math.MaxInt}}}
495 if lt != nil {
496 lt.Layout(e.params, r)
497 for {
498 g, ok := lt.NextGlyph()
499 if !it.processGlyph(g, ok) {
500 break
501 }
502 e.index.Glyph(g)
503 }
504 } else {
505 // Make a fake glyph for every rune in the reader.
506 b := bufio.NewReader(r)
507 for _, _, err := b.ReadRune(); err != io.EOF; _, _, err = b.ReadRune() {
508 g := text.Glyph{Runes: 1, Flags: text.FlagClusterBreak}
509 _ = it.processGlyph(g, true)
510 e.index.Glyph(g)
511 }
512 }
513 e.paragraphReader.SetSource(e.rr)
514 e.graphemes = e.graphemes[:0]
515 for g := e.paragraphReader.Graphemes(); len(g) > 0; g = e.paragraphReader.Graphemes() {
516 if len(e.graphemes) > 0 && g[0] == e.graphemes[len(e.graphemes)-1] {
517 g = g[1:]
518 }
519 e.graphemes = append(e.graphemes, g...)
520 }
521 dims := layout.Dimensions{Size: it.bounds.Size()}
522 dims.Baseline = dims.Size.Y - it.baseline
523 e.dims = dims
524}
525
526// CaretPos returns the line & column numbers of the caret.
527func (e *textView) CaretPos() (line, col int) {

Callers 1

makeValidMethod · 0.95

Calls 10

SeekMethod · 0.95
processGlyphMethod · 0.95
NextGlyphMethod · 0.80
GlyphMethod · 0.80
GraphemesMethod · 0.80
SizeMethod · 0.65
ResetMethod · 0.45
resetMethod · 0.45
LayoutMethod · 0.45
SetSourceMethod · 0.45

Tested by

no test coverage detected