Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
diamondburned
GitHub Repository: diamondburned/gtkcord4
Path: blob/main/internal/sidebar/directbutton/button.go
366 views
1
package directbutton
2
3
import (
4
"context"
5
"math"
6
7
"github.com/diamondburned/gotk4/pkg/gtk/v4"
8
"github.com/diamondburned/gotkit/gtkutil/cssutil"
9
"libdb.so/dissent/internal/gtkcord"
10
"libdb.so/dissent/internal/sidebar/sidebutton"
11
)
12
13
type Button struct {
14
*gtk.Overlay
15
Pill *sidebutton.Pill
16
Button *gtk.Button
17
18
ctx context.Context
19
}
20
21
var dmButtonCSS = cssutil.Applier("sidebar-dm-button-overlay", `
22
.sidebar-dm-button {
23
padding: 4px 12px;
24
border-radius: 0;
25
}
26
.sidebar-dm-button image {
27
padding-top: 4px;
28
padding-bottom: 2px;
29
}
30
`)
31
32
func NewButton(ctx context.Context) *Button {
33
b := Button{ctx: ctx}
34
35
icon := gtk.NewImageFromIconName("chat-bubbles-empty-symbolic")
36
icon.SetIconSize(gtk.IconSizeLarge)
37
icon.SetPixelSize(int(math.Round(gtkcord.GuildIconSize * 0.85)))
38
39
b.Button = gtk.NewButton()
40
b.Button.AddCSSClass("sidebar-dm-button")
41
b.Button.SetTooltipText("Direct Messages")
42
b.Button.SetChild(icon)
43
b.Button.SetHasFrame(false)
44
b.Button.ConnectClicked(func() {
45
b.Pill.State = sidebutton.PillActive
46
b.Pill.Invalidate()
47
48
parent := gtk.BaseWidget(b.Button.Parent())
49
parent.ActivateAction("win.open-dms", nil)
50
})
51
52
b.Pill = sidebutton.NewPill()
53
54
b.Overlay = gtk.NewOverlay()
55
b.Overlay.SetChild(b.Button)
56
b.Overlay.AddOverlay(b.Pill)
57
58
dmButtonCSS(b)
59
return &b
60
}
61
62