/
advanced.go
91 lines (76 loc) · 2.5 KB
/
advanced.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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package tutorials
import (
"strconv"
"time"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/driver/desktop"
"fyne.io/fyne/v2/widget"
)
func scaleString(c fyne.Canvas) string {
return strconv.FormatFloat(float64(c.Scale()), 'f', 2, 32)
}
func texScaleString(c fyne.Canvas) string {
pixels, _ := c.PixelCoordinateForPosition(fyne.NewPos(1, 1))
texScale := float32(pixels) / c.Scale()
return strconv.FormatFloat(float64(texScale), 'f', 2, 32)
}
func prependTo(g *fyne.Container, s string) {
g.Objects = append([]fyne.CanvasObject{widget.NewLabel(s)}, g.Objects...)
g.Refresh()
}
func setScaleText(scale, tex *widget.Label, win fyne.Window) {
for scale.Visible() {
scale.SetText(scaleString(win.Canvas()))
tex.SetText(texScaleString(win.Canvas()))
time.Sleep(time.Second)
}
}
// advancedScreen loads a panel that shows details and settings that are a bit
// more detailed than normally needed.
func advancedScreen(win fyne.Window) fyne.CanvasObject {
scale := widget.NewLabel("")
tex := widget.NewLabel("")
screen := widget.NewCard("Screen info", "", widget.NewForm(
&widget.FormItem{Text: "Scale", Widget: scale},
&widget.FormItem{Text: "Texture Scale", Widget: tex},
))
go setScaleText(scale, tex, win)
label := widget.NewLabel("Just type...")
generic := container.NewVBox()
desk := container.NewVBox()
genericCard := widget.NewCard("", "Generic", container.NewVScroll(generic))
deskCard := widget.NewCard("", "Desktop", container.NewVScroll(desk))
win.Canvas().SetOnTypedRune(func(r rune) {
prependTo(generic, "Rune: "+string(r))
})
win.Canvas().SetOnTypedKey(func(ev *fyne.KeyEvent) {
prependTo(generic, "Key : "+string(ev.Name))
})
if deskCanvas, ok := win.Canvas().(desktop.Canvas); ok {
deskCanvas.SetOnKeyDown(func(ev *fyne.KeyEvent) {
prependTo(desk, "KeyDown: "+string(ev.Name))
})
deskCanvas.SetOnKeyUp(func(ev *fyne.KeyEvent) {
prependTo(desk, "KeyUp : "+string(ev.Name))
})
}
buildStatus, ok := fyne.CurrentApp().Metadata().Custom["HelperText"]
if !ok {
buildStatus = "No helper text provided at compile time."
}
labelBuildStatus := widget.NewLabel(buildStatus)
return container.NewHBox(
container.NewVBox(screen,
widget.NewButton("Custom Theme", func() {
fyne.CurrentApp().Settings().SetTheme(newCustomTheme())
}),
widget.NewButton("Fullscreen", func() {
win.SetFullScreen(!win.FullScreen())
}),
),
container.NewBorder(label, labelBuildStatus, nil, nil,
container.NewGridWithColumns(2, genericCard, deskCard),
),
)
}