/
thumbnail.go
48 lines (41 loc) · 1.19 KB
/
thumbnail.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package main
import (
"fmt"
"fyne.io/fyne"
"fyne.io/fyne/canvas"
"fyne.io/fyne/layout"
"fyne.io/fyne/widget"
"github.com/lusingander/go-gif-viewer/image"
"github.com/nfnt/resize"
)
const (
thumbnailListWindowName = "List"
)
var (
thumbnailListDefaultWidth = 150
thumbnailListDefaultHeight = 400
thumbnailListDefaultSize = fyne.NewSize(thumbnailListDefaultWidth, thumbnailListDefaultHeight)
)
func thumbnailContainer(img *canvas.Image, i int) fyne.CanvasObject {
label := fmt.Sprintf("%d", i+1)
return widget.NewGroup(label, img)
}
func addThumbnails(container *fyne.Container, gif *image.GIFImage) {
size := uint(thumbnailListDefaultWidth)
for i := 0; i < gif.Length(); i++ {
resized := resize.Resize(size, size, gif.Get(i), resize.NearestNeighbor)
img := &canvas.Image{
Image: resized,
FillMode: canvas.ImageFillOriginal,
}
container.AddObject(thumbnailContainer(img, i))
}
}
func newThumbnailListWindow(gif *image.GIFImage) fyne.Window {
w := fyne.CurrentApp().NewWindow(thumbnailListWindowName)
l := fyne.NewContainerWithLayout(layout.NewVBoxLayout())
w.SetContent(widget.NewVScrollContainer(l))
w.Resize(thumbnailListDefaultSize)
go addThumbnails(l, gif)
return w
}