From e672d71c61b2e27a75f99be6e8695b15dc2b5c87 Mon Sep 17 00:00:00 2001 From: Larry Clapp Date: Thu, 6 Feb 2020 08:22:03 -0500 Subject: [PATCH] widget: add some utility methods on Editor - Focused: returns whether editor is focused - CaretPos: returns the text line & column numbers of the caret. - CaretCoords: returns the x & y pixel coordinates of the caret. - NumLines: returns the number of text lines in the editor Signed-off-by: Larry Clapp --- widget/editor.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/widget/editor.go b/widget/editor.go index 0e41c899..35bac2e7 100644 --- a/widget/editor.go +++ b/widget/editor.go @@ -224,6 +224,11 @@ func (e *Editor) Focus() { e.requestFocus = true } +// Focused returns whether the editor is focused or not. +func (e *Editor) Focused() bool { + return e.focused +} + // Layout lays out the editor. func (e *Editor) Layout(gtx *layout.Context, sh text.Shaper, font text.Font, size unit.Value) { // Flush events from before the previous frame. @@ -456,6 +461,19 @@ func (e *Editor) layoutText(s text.Shaper) ([]text.Line, layout.Dimensions) { return lines, dims } +// CaretPos returns the line & column numbers of the caret. +func (e *Editor) CaretPos() (line, col int) { + line, col, _, _ = e.layoutCaret() + return +} + +// CaretCoords returns the x & y coordinates of the caret, relative to the +// editor itself. +func (e *Editor) CaretCoords() (x fixed.Int26_6, y int) { + _, _, x, y = e.layoutCaret() + return +} + func (e *Editor) layoutCaret() (carLine, carCol int, x fixed.Int26_6, y int) { var idx int var prevDesc fixed.Int26_6 @@ -647,5 +665,11 @@ func (e *Editor) scrollToCaret() { } } +// NumLines returns the number of lines in the editor. +func (e *Editor) NumLines() int { + e.makeValid() + return len(e.lines) +} + func (s ChangeEvent) isEditorEvent() {} func (s SubmitEvent) isEditorEvent() {}