Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
diamondburned
GitHub Repository: diamondburned/gtkcord4
Path: blob/main/internal/window/login/loggingin.go
452 views
1
package login
2
3
import (
4
"context"
5
6
"github.com/diamondburned/gotk4/pkg/gtk/v4"
7
"github.com/diamondburned/gotkit/gtkutil/cssutil"
8
)
9
10
// LoadingPage is the busy spinner screen that's shown while the application is
11
// trying to log in.
12
type LoadingPage struct {
13
*gtk.Box
14
Header *gtk.HeaderBar
15
16
Content struct { // whole page is draggable
17
*gtk.WindowHandle
18
Box *gtk.Box
19
Spinner *gtk.Spinner
20
Text *gtk.Label
21
}
22
}
23
24
var loggingInCSS = cssutil.Applier("login-loading", `
25
.login-loading headerbar {
26
background: none;
27
}
28
.login-loading-text {
29
margin-top: 8px;
30
font-size: 1.2em;
31
}
32
`)
33
34
// NewLoadingPage creates a new logging in loading screen.
35
func NewLoadingPage(ctx context.Context) *LoadingPage {
36
l := LoadingPage{}
37
l.Content.Spinner = gtk.NewSpinner()
38
l.Content.Spinner.SetSizeRequest(64, 64)
39
40
l.Content.Text = gtk.NewLabel("Connecting...")
41
l.Content.Text.AddCSSClass("login-loading-text")
42
43
l.Content.Box = gtk.NewBox(gtk.OrientationVertical, 0)
44
l.Content.Box.SetVAlign(gtk.AlignCenter)
45
l.Content.Box.SetHAlign(gtk.AlignCenter)
46
l.Content.Box.Append(l.Content.Spinner)
47
l.Content.Box.Append(l.Content.Text)
48
49
l.Content.WindowHandle = gtk.NewWindowHandle()
50
l.Content.WindowHandle.SetVExpand(true)
51
l.Content.WindowHandle.SetChild(l.Content.Box)
52
53
l.Header = gtk.NewHeaderBar()
54
l.Header.SetShowTitleButtons(true)
55
56
l.Box = gtk.NewBox(gtk.OrientationVertical, 0)
57
l.Box.Append(l.Header)
58
l.Box.Append(l.Content)
59
60
l.ConnectMap(l.Content.Spinner.Start)
61
l.ConnectUnmap(l.Content.Spinner.Stop)
62
loggingInCSS(l)
63
64
return &l
65
}
66
67
// SetText sets the text that's shown underneath the spinner.
68
func (l *LoadingPage) SetText(text string) {
69
l.Content.Text.SetText(text)
70
}
71
72