diff --git a/widget/editor.go b/widget/editor.go index c1620033..c0abeefb 100644 --- a/widget/editor.go +++ b/widget/editor.go @@ -146,7 +146,7 @@ type SubmitEvent struct { } type line struct { - offset f32.Point + offset image.Point clip op.CallOp } @@ -447,12 +447,13 @@ func (e *Editor) layout(gtx layout.Context) layout.Dimensions { } func (e *Editor) PaintText(gtx layout.Context) { - clip := textPadding(e.lines) - clip.Max = clip.Max.Add(e.viewSize) + cl := textPadding(e.lines) + cl.Max = cl.Max.Add(e.viewSize) for _, shape := range e.shapes { stack := op.Push(gtx.Ops) - op.Offset(shape.offset).Add(gtx.Ops) + op.Offset(layout.FPt(shape.offset)).Add(gtx.Ops) shape.clip.Add(gtx.Ops) + clip.Rect(cl.Sub(shape.offset)).Add(gtx.Ops) paint.PaintOp{}.Add(gtx.Ops) stack.Pop() } diff --git a/widget/label.go b/widget/label.go index 2cf4890d..629731d9 100644 --- a/widget/label.go +++ b/widget/label.go @@ -7,9 +7,9 @@ import ( "image" "unicode/utf8" - "gioui.org/f32" "gioui.org/layout" "gioui.org/op" + "gioui.org/op/clip" "gioui.org/op/paint" "gioui.org/text" "gioui.org/unit" @@ -38,7 +38,7 @@ type lineIterator struct { const inf = 1e6 -func (l *lineIterator) Next() (text.Layout, f32.Point, bool) { +func (l *lineIterator) Next() (text.Layout, image.Point, bool) { for len(l.Lines) > 0 { line := l.Lines[0] l.Lines = l.Lines[1:] @@ -82,10 +82,10 @@ func (l *lineIterator) Next() (text.Layout, f32.Point, bool) { endx += layout.Advances[rune] rune++ } - offf := f32.Point{X: float32(off.X) / 64, Y: float32(off.Y) / 64} + offf := image.Point{X: off.X.Floor(), Y: off.Y.Floor()} return layout, offf, true } - return text.Layout{}, f32.Point{}, false + return text.Layout{}, image.Point{}, false } func (l Label) Layout(gtx layout.Context, s text.Shaper, font text.Font, size unit.Value, txt string) layout.Dimensions { @@ -97,11 +97,11 @@ func (l Label) Layout(gtx layout.Context, s text.Shaper, font text.Font, size un } dims := linesDimens(lines) dims.Size = cs.Constrain(dims.Size) - clip := textPadding(lines) - clip.Max = clip.Max.Add(dims.Size) + cl := textPadding(lines) + cl.Max = cl.Max.Add(dims.Size) it := lineIterator{ Lines: lines, - Clip: clip, + Clip: cl, Alignment: l.Alignment, Width: dims.Size.X, } @@ -111,8 +111,9 @@ func (l Label) Layout(gtx layout.Context, s text.Shaper, font text.Font, size un break } stack := op.Push(gtx.Ops) - op.Offset(off).Add(gtx.Ops) + op.Offset(layout.FPt(off)).Add(gtx.Ops) s.Shape(font, textSize, l).Add(gtx.Ops) + clip.Rect(cl.Sub(off)).Add(gtx.Ops) paint.PaintOp{}.Add(gtx.Ops) stack.Pop() }