text: remove SingleLine from LayoutOptions

Low level text layout should not deal with filtering newlines.

Updates gio#61

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2019-11-09 20:00:09 +01:00
parent 778b7e6398
commit 682d2810d3
3 changed files with 6 additions and 13 deletions
+1 -7
View File
@@ -81,12 +81,6 @@ func layoutText(buf *sfnt.Buffer, ppem fixed.Int26_6, str string, f *opentype, o
}
for prev.idx < len(str) {
c, s := utf8.DecodeRuneInString(str[prev.idx:])
nl := c == '\n'
if opts.SingleLine && nl {
nl = false
c = ' '
s = 1
}
a, ok := f.GlyphAdvance(buf, ppem, c)
if !ok {
prev.idx += s
@@ -99,7 +93,7 @@ func layoutText(buf *sfnt.Buffer, ppem fixed.Int26_6, str string, f *opentype, o
x: prev.x + prev.adv,
valid: true,
}
if nl {
if c == '\n' {
// The newline is zero width; use the previous
// character for line measurements.
prev.advs = append(prev.advs, 0)
+1 -3
View File
@@ -36,10 +36,8 @@ type Layout struct {
// LayoutOptions specify the constraints of a text layout.
type LayoutOptions struct {
// MaxWidth set the maximum width of the layout.
// MaxWidth is the available width of the layout.
MaxWidth int
// SingleLine specify that line breaks are ignored.
SingleLine bool
}
// Style is the font style.
+4 -3
View File
@@ -5,6 +5,7 @@ package widget
import (
"image"
"math"
"strings"
"time"
"unicode/utf8"
@@ -399,7 +400,7 @@ func (e *Editor) moveCoord(c unit.Converter, pos image.Point) {
func (e *Editor) layoutText(c unit.Converter, s *text.Shaper, font text.Font) ([]text.Line, layout.Dimensions) {
txt := e.rr.String()
opts := text.LayoutOptions{SingleLine: e.SingleLine, MaxWidth: e.maxWidth}
opts := text.LayoutOptions{MaxWidth: e.maxWidth}
textLayout := s.Layout(c, font, txt, opts)
lines := textLayout.Lines
dims := linesDimens(lines)
@@ -463,8 +464,8 @@ func (e *Editor) deleteRuneForward() {
}
func (e *Editor) append(s string) {
if e.SingleLine && s == "\n" {
return
if e.SingleLine {
s = strings.ReplaceAll(s, "\n", "")
}
e.prepend(s)
e.rr.caret += len(s)