Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Start fixing scrolling containing entries #1994

Merged
merged 2 commits into from Feb 26, 2021
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
31 changes: 23 additions & 8 deletions widget/entry.go
Expand Up @@ -158,13 +158,21 @@ func (e *Entry) CreateRenderer() fyne.WidgetRenderer {
// initialise
e.textProvider()
e.placeholderProvider()
scrolling := e.Wrapping != fyne.TextWrapOff
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Couldn't this just be moved into the if statement on line 169?


box := canvas.NewRectangle(theme.InputBackgroundColor())
line := canvas.NewRectangle(theme.ShadowColor())

e.content = &entryContent{entry: e}
e.scroll = widget.NewScroll(e.content)
objects := []fyne.CanvasObject{box, line, e.scroll}
e.scroll = &widget.Scroll{}
objects := []fyne.CanvasObject{box, line}
if scrolling {
e.scroll.Content = e.content
objects = append(objects, e.scroll)
} else {
e.scroll.Hide()
objects = append(objects, e.content)
}
e.content.scroll = e.scroll

if e.Password && e.ActionItem == nil {
Expand Down Expand Up @@ -1117,16 +1125,21 @@ func (r *entryRenderer) Layout(size fyne.Size) {

entrySize := size.Subtract(fyne.NewSize(xInset, theme.InputBorderSize()*2))
entryPos := fyne.NewPos(0, theme.InputBorderSize())
r.scroll.Resize(entrySize)
r.scroll.Move(entryPos)
if r.entry.Wrapping == fyne.TextWrapOff {
r.entry.content.Resize(entrySize)
r.entry.content.Move(entryPos)
} else {
r.scroll.Resize(entrySize)
r.scroll.Move(entryPos)
}
}

// MinSize calculates the minimum size of an entry widget.
// This is based on the contained text with a standard amount of padding added.
// If MultiLine is true then we will reserve space for at leasts 3 lines
func (r *entryRenderer) MinSize() fyne.Size {
if r.scroll.Direction == widget.ScrollNone {
return r.scroll.MinSize().Add(fyne.NewSize(0, theme.InputBorderSize()*2))
return r.entry.content.MinSize().Add(fyne.NewSize(0, theme.InputBorderSize()*2))
}

minSize := r.entry.placeholderProvider().charMinSize().Add(fyne.NewSize(theme.Padding()*2, theme.Padding()*2))
Expand Down Expand Up @@ -1193,7 +1206,7 @@ func (r *entryRenderer) Refresh() {
r.entry.validationStatus.Hide()
}

cache.Renderer(r.scroll.Content.(*entryContent)).Refresh()
cache.Renderer(r.entry.content).Refresh()
canvas.Refresh(r.entry.super())
}

Expand Down Expand Up @@ -1453,8 +1466,10 @@ func (r *entryContentRenderer) ensureCursorVisible() {
} else if cy2 >= offset.X+size.Height {
move.DY += cy2 - (offset.Y + size.Height)
}
r.content.scroll.Offset = r.content.scroll.Offset.Add(move)
r.content.scroll.Refresh()
if r.content.scroll.Content != nil {
r.content.scroll.Offset = r.content.scroll.Offset.Add(move)
r.content.scroll.Refresh()
}
}

func (r *entryContentRenderer) moveCursor() {
Expand Down
10 changes: 7 additions & 3 deletions widget/entry_test.go
Expand Up @@ -1567,8 +1567,7 @@ func TestPasswordEntry_Reveal(t *testing.T) {
// the Password field is set to true.
// In this case the action item will be set when the renderer is created.
t.Run("Entry with Password field", func(t *testing.T) {
entry := &widget.Entry{}
entry.Password = true
entry := &widget.Entry{Password: true, Wrapping: fyne.TextWrapWord}
entry.Refresh()
window := test.NewWindow(entry)
defer window.Close()
Expand Down Expand Up @@ -1657,7 +1656,12 @@ func checkNewlineIgnored(t *testing.T, entry *widget.Entry) {
func setupImageTest(t *testing.T, multiLine bool) (*widget.Entry, fyne.Window) {
test.NewApp()

entry := &widget.Entry{MultiLine: multiLine}
var entry *widget.Entry
if multiLine {
entry = &widget.Entry{MultiLine: true, Wrapping: fyne.TextWrapWord}
} else {
entry = &widget.Entry{Wrapping: fyne.TextWrapOff}
}
w := test.NewWindow(entry)
w.Resize(fyne.NewSize(150, 200))

Expand Down
1 change: 1 addition & 0 deletions widget/select_entry.go
Expand Up @@ -17,6 +17,7 @@ type SelectEntry struct {
func NewSelectEntry(options []string) *SelectEntry {
e := &SelectEntry{}
e.ExtendBaseWidget(e)
e.Wrapping = fyne.TextTruncate
e.options = options
return e
}
Expand Down
8 changes: 3 additions & 5 deletions widget/testdata/entry/disableable_disabled_custom_value.xml
Expand Up @@ -3,11 +3,9 @@
<widget pos="10,10" size="120x37" type="*widget.Entry">
<rectangle fillColor="rgba(102,102,102,255)" pos="0,2" size="120x33"/>
<rectangle fillColor="disabled" pos="0,35" size="120x2"/>
<widget pos="0,2" size="120x33" type="*widget.Scroll">
<widget size="120x33" type="*widget.entryContent">
<widget size="120x33" type="*widget.textProvider">
<text color="disabled" pos="8,6" size="112x21">Hello</text>
</widget>
<widget pos="0,2" size="120x33" type="*widget.entryContent">
<widget size="120x33" type="*widget.textProvider">
<text color="disabled" pos="8,6" size="112x21">Hello</text>
</widget>
</widget>
</widget>
Expand Down
14 changes: 6 additions & 8 deletions widget/testdata/entry/disableable_disabled_empty.xml
Expand Up @@ -3,14 +3,12 @@
<widget pos="10,10" size="120x37" type="*widget.Entry">
<rectangle fillColor="rgba(102,102,102,255)" pos="0,2" size="120x33"/>
<rectangle fillColor="disabled" pos="0,35" size="120x2"/>
<widget pos="0,2" size="120x33" type="*widget.Scroll">
<widget size="120x33" type="*widget.entryContent">
<widget size="120x33" type="*widget.textProvider">
<text color="disabled" pos="8,6" size="112x21"></text>
</widget>
<widget size="120x33" type="*widget.textProvider">
<text color="disabled" pos="8,6" size="112x21"></text>
</widget>
<widget pos="0,2" size="120x33" type="*widget.entryContent">
<widget size="120x33" type="*widget.textProvider">
<text color="disabled" pos="8,6" size="112x21"></text>
</widget>
<widget size="120x33" type="*widget.textProvider">
<text color="disabled" pos="8,6" size="112x21"></text>
</widget>
</widget>
</widget>
Expand Down
14 changes: 6 additions & 8 deletions widget/testdata/entry/disableable_disabled_placeholder.xml
Expand Up @@ -3,14 +3,12 @@
<widget pos="10,10" size="120x37" type="*widget.Entry">
<rectangle fillColor="rgba(102,102,102,255)" pos="0,2" size="120x33"/>
<rectangle fillColor="disabled" pos="0,35" size="120x2"/>
<widget pos="0,2" size="120x33" type="*widget.Scroll">
<widget size="120x33" type="*widget.entryContent">
<widget size="120x33" type="*widget.textProvider">
<text color="disabled" pos="8,6" size="112x21">Type!</text>
</widget>
<widget size="120x33" type="*widget.textProvider">
<text color="disabled" pos="8,6" size="112x21"></text>
</widget>
<widget pos="0,2" size="120x33" type="*widget.entryContent">
<widget size="120x33" type="*widget.textProvider">
<text color="disabled" pos="8,6" size="112x21">Type!</text>
</widget>
<widget size="120x33" type="*widget.textProvider">
<text color="disabled" pos="8,6" size="112x21"></text>
</widget>
</widget>
</widget>
Expand Down
8 changes: 3 additions & 5 deletions widget/testdata/entry/disableable_enabled_custom_value.xml
Expand Up @@ -3,11 +3,9 @@
<widget pos="10,10" size="120x37" type="*widget.Entry">
<rectangle fillColor="rgba(102,102,102,255)" pos="0,2" size="120x33"/>
<rectangle fillColor="shadow" pos="0,35" size="120x2"/>
<widget pos="0,2" size="120x33" type="*widget.Scroll">
<widget size="120x33" type="*widget.entryContent">
<widget size="120x33" type="*widget.textProvider">
<text pos="8,6" size="112x21">Hello</text>
</widget>
<widget pos="0,2" size="120x33" type="*widget.entryContent">
<widget size="120x33" type="*widget.textProvider">
<text pos="8,6" size="112x21">Hello</text>
</widget>
</widget>
</widget>
Expand Down
14 changes: 6 additions & 8 deletions widget/testdata/entry/disableable_enabled_empty.xml
Expand Up @@ -3,14 +3,12 @@
<widget pos="10,10" size="120x37" type="*widget.Entry">
<rectangle fillColor="rgba(102,102,102,255)" pos="0,2" size="120x33"/>
<rectangle fillColor="shadow" pos="0,35" size="120x2"/>
<widget pos="0,2" size="120x33" type="*widget.Scroll">
<widget size="120x33" type="*widget.entryContent">
<widget size="120x33" type="*widget.textProvider">
<text color="placeholder" pos="8,6" size="112x21"></text>
</widget>
<widget size="120x33" type="*widget.textProvider">
<text pos="8,6" size="112x21"></text>
</widget>
<widget pos="0,2" size="120x33" type="*widget.entryContent">
<widget size="120x33" type="*widget.textProvider">
<text color="placeholder" pos="8,6" size="112x21"></text>
</widget>
<widget size="120x33" type="*widget.textProvider">
<text pos="8,6" size="112x21"></text>
</widget>
</widget>
</widget>
Expand Down
14 changes: 6 additions & 8 deletions widget/testdata/entry/disableable_enabled_placeholder.xml
Expand Up @@ -3,14 +3,12 @@
<widget pos="10,10" size="120x37" type="*widget.Entry">
<rectangle fillColor="rgba(102,102,102,255)" pos="0,2" size="120x33"/>
<rectangle fillColor="shadow" pos="0,35" size="120x2"/>
<widget pos="0,2" size="120x33" type="*widget.Scroll">
<widget size="120x33" type="*widget.entryContent">
<widget size="120x33" type="*widget.textProvider">
<text color="placeholder" pos="8,6" size="112x21">Type!</text>
</widget>
<widget size="120x33" type="*widget.textProvider">
<text pos="8,6" size="112x21"></text>
</widget>
<widget pos="0,2" size="120x33" type="*widget.entryContent">
<widget size="120x33" type="*widget.textProvider">
<text color="placeholder" pos="8,6" size="112x21">Type!</text>
</widget>
<widget size="120x33" type="*widget.textProvider">
<text pos="8,6" size="112x21"></text>
</widget>
</widget>
</widget>
Expand Down
16 changes: 7 additions & 9 deletions widget/testdata/entry/focus_gained.xml
Expand Up @@ -3,16 +3,14 @@
<widget pos="10,10" size="120x37" type="*widget.Entry">
<rectangle fillColor="rgba(102,102,102,255)" pos="0,2" size="120x33"/>
<rectangle fillColor="primary" pos="0,35" size="120x2"/>
<widget pos="0,2" size="120x33" type="*widget.Scroll">
<widget size="120x33" type="*widget.entryContent">
<widget size="120x33" type="*widget.textProvider">
<text color="placeholder" pos="8,6" size="112x21"></text>
</widget>
<widget size="120x33" type="*widget.textProvider">
<text pos="8,6" size="112x21"></text>
</widget>
<rectangle fillColor="primary" pos="7,6" size="2x21"/>
<widget pos="0,2" size="120x33" type="*widget.entryContent">
<widget size="120x33" type="*widget.textProvider">
<text color="placeholder" pos="8,6" size="112x21"></text>
</widget>
<widget size="120x33" type="*widget.textProvider">
<text pos="8,6" size="112x21"></text>
</widget>
<rectangle fillColor="primary" pos="7,6" size="2x21"/>
</widget>
</widget>
</content>
Expand Down
14 changes: 6 additions & 8 deletions widget/testdata/entry/focus_lost.xml
Expand Up @@ -3,14 +3,12 @@
<widget pos="10,10" size="120x37" type="*widget.Entry">
<rectangle fillColor="rgba(102,102,102,255)" pos="0,2" size="120x33"/>
<rectangle fillColor="shadow" pos="0,35" size="120x2"/>
<widget pos="0,2" size="120x33" type="*widget.Scroll">
<widget size="120x33" type="*widget.entryContent">
<widget size="120x33" type="*widget.textProvider">
<text color="placeholder" pos="8,6" size="112x21"></text>
</widget>
<widget size="120x33" type="*widget.textProvider">
<text pos="8,6" size="112x21"></text>
</widget>
<widget pos="0,2" size="120x33" type="*widget.entryContent">
<widget size="120x33" type="*widget.textProvider">
<text color="placeholder" pos="8,6" size="112x21"></text>
</widget>
<widget size="120x33" type="*widget.textProvider">
<text pos="8,6" size="112x21"></text>
</widget>
</widget>
</widget>
Expand Down
16 changes: 7 additions & 9 deletions widget/testdata/entry/focus_with_popup_dismissed.xml
Expand Up @@ -3,16 +3,14 @@
<widget pos="10,10" size="120x37" type="*widget.Entry">
<rectangle fillColor="rgba(102,102,102,255)" pos="0,2" size="120x33"/>
<rectangle fillColor="primary" pos="0,35" size="120x2"/>
<widget pos="0,2" size="120x33" type="*widget.Scroll">
<widget size="120x33" type="*widget.entryContent">
<widget size="120x33" type="*widget.textProvider">
<text color="placeholder" pos="8,6" size="112x21"></text>
</widget>
<widget size="120x33" type="*widget.textProvider">
<text pos="8,6" size="112x21"></text>
</widget>
<rectangle fillColor="primary" pos="7,6" size="2x21"/>
<widget pos="0,2" size="120x33" type="*widget.entryContent">
<widget size="120x33" type="*widget.textProvider">
<text color="placeholder" pos="8,6" size="112x21"></text>
</widget>
<widget size="120x33" type="*widget.textProvider">
<text pos="8,6" size="112x21"></text>
</widget>
<rectangle fillColor="primary" pos="7,6" size="2x21"/>
</widget>
</widget>
</content>
Expand Down
16 changes: 7 additions & 9 deletions widget/testdata/entry/focus_with_popup_entry_selected.xml
Expand Up @@ -3,16 +3,14 @@
<widget pos="10,10" size="120x37" type="*widget.Entry">
<rectangle fillColor="rgba(102,102,102,255)" pos="0,2" size="120x33"/>
<rectangle fillColor="primary" pos="0,35" size="120x2"/>
<widget pos="0,2" size="120x33" type="*widget.Scroll">
<widget size="120x33" type="*widget.entryContent">
<widget size="120x33" type="*widget.textProvider">
<text color="placeholder" pos="8,6" size="112x21"></text>
</widget>
<widget size="120x33" type="*widget.textProvider">
<text pos="8,6" size="112x21"></text>
</widget>
<rectangle fillColor="primary" pos="7,6" size="2x21"/>
<widget pos="0,2" size="120x33" type="*widget.entryContent">
<widget size="120x33" type="*widget.textProvider">
<text color="placeholder" pos="8,6" size="112x21"></text>
</widget>
<widget size="120x33" type="*widget.textProvider">
<text pos="8,6" size="112x21"></text>
</widget>
<rectangle fillColor="primary" pos="7,6" size="2x21"/>
</widget>
</widget>
</content>
Expand Down
16 changes: 7 additions & 9 deletions widget/testdata/entry/focus_with_popup_initial.xml
Expand Up @@ -3,16 +3,14 @@
<widget pos="10,10" size="120x37" type="*widget.Entry">
<rectangle fillColor="rgba(102,102,102,255)" pos="0,2" size="120x33"/>
<rectangle fillColor="primary" pos="0,35" size="120x2"/>
<widget pos="0,2" size="120x33" type="*widget.Scroll">
<widget size="120x33" type="*widget.entryContent">
<widget size="120x33" type="*widget.textProvider">
<text color="placeholder" pos="8,6" size="112x21"></text>
</widget>
<widget size="120x33" type="*widget.textProvider">
<text pos="8,6" size="112x21"></text>
</widget>
<rectangle fillColor="primary" pos="7,6" size="2x21"/>
<widget pos="0,2" size="120x33" type="*widget.entryContent">
<widget size="120x33" type="*widget.textProvider">
<text color="placeholder" pos="8,6" size="112x21"></text>
</widget>
<widget size="120x33" type="*widget.textProvider">
<text pos="8,6" size="112x21"></text>
</widget>
<rectangle fillColor="primary" pos="7,6" size="2x21"/>
</widget>
</widget>
</content>
Expand Down
14 changes: 6 additions & 8 deletions widget/testdata/entry/focused_disabled.xml
Expand Up @@ -3,14 +3,12 @@
<widget pos="10,10" size="120x37" type="*widget.Entry">
<rectangle fillColor="rgba(102,102,102,255)" pos="0,2" size="120x33"/>
<rectangle fillColor="disabled" pos="0,35" size="120x2"/>
<widget pos="0,2" size="120x33" type="*widget.Scroll">
<widget size="120x33" type="*widget.entryContent">
<widget size="120x33" type="*widget.textProvider">
<text color="disabled" pos="8,6" size="112x21"></text>
</widget>
<widget size="120x33" type="*widget.textProvider">
<text color="disabled" pos="8,6" size="112x21"></text>
</widget>
<widget pos="0,2" size="120x33" type="*widget.entryContent">
<widget size="120x33" type="*widget.textProvider">
<text color="disabled" pos="8,6" size="112x21"></text>
</widget>
<widget size="120x33" type="*widget.textProvider">
<text color="disabled" pos="8,6" size="112x21"></text>
</widget>
</widget>
</widget>
Expand Down
16 changes: 7 additions & 9 deletions widget/testdata/entry/focused_enabled.xml
Expand Up @@ -3,16 +3,14 @@
<widget pos="10,10" size="120x37" type="*widget.Entry">
<rectangle fillColor="rgba(102,102,102,255)" pos="0,2" size="120x33"/>
<rectangle fillColor="primary" pos="0,35" size="120x2"/>
<widget pos="0,2" size="120x33" type="*widget.Scroll">
<widget size="120x33" type="*widget.entryContent">
<widget size="120x33" type="*widget.textProvider">
<text color="placeholder" pos="8,6" size="112x21"></text>
</widget>
<widget size="120x33" type="*widget.textProvider">
<text pos="8,6" size="112x21"></text>
</widget>
<rectangle fillColor="primary" pos="7,6" size="2x21"/>
<widget pos="0,2" size="120x33" type="*widget.entryContent">
<widget size="120x33" type="*widget.textProvider">
<text color="placeholder" pos="8,6" size="112x21"></text>
</widget>
<widget size="120x33" type="*widget.textProvider">
<text pos="8,6" size="112x21"></text>
</widget>
<rectangle fillColor="primary" pos="7,6" size="2x21"/>
</widget>
</widget>
</content>
Expand Down
14 changes: 6 additions & 8 deletions widget/testdata/entry/initial.xml
Expand Up @@ -3,14 +3,12 @@
<widget pos="10,10" size="120x37" type="*widget.Entry">
<rectangle fillColor="rgba(102,102,102,255)" pos="0,2" size="120x33"/>
<rectangle fillColor="shadow" pos="0,35" size="120x2"/>
<widget pos="0,2" size="120x33" type="*widget.Scroll">
<widget size="120x33" type="*widget.entryContent">
<widget size="120x33" type="*widget.textProvider">
<text color="placeholder" pos="8,6" size="112x21"></text>
</widget>
<widget size="120x33" type="*widget.textProvider">
<text pos="8,6" size="112x21"></text>
</widget>
<widget pos="0,2" size="120x33" type="*widget.entryContent">
<widget size="120x33" type="*widget.textProvider">
<text color="placeholder" pos="8,6" size="112x21"></text>
</widget>
<widget size="120x33" type="*widget.textProvider">
<text pos="8,6" size="112x21"></text>
</widget>
</widget>
</widget>
Expand Down