mirror of
https://github.com/diamondburned/cchat-gtk.git
synced 2024-11-01 03:54:16 +00:00
65 lines
1.3 KiB
Go
65 lines
1.3 KiB
Go
|
package gts
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
|
||
|
"github.com/diamondburned/cchat-gtk/internal/log"
|
||
|
"github.com/gotk3/gotk3/gdk"
|
||
|
"github.com/gotk3/gotk3/gtk"
|
||
|
"github.com/markbates/pkger"
|
||
|
"github.com/pkg/errors"
|
||
|
)
|
||
|
|
||
|
var cssRepos = map[string]*gtk.CssProvider{}
|
||
|
|
||
|
func getDefaultScreen() *gdk.Screen {
|
||
|
d, _ := gdk.DisplayGetDefault()
|
||
|
s, _ := d.GetDefaultScreen()
|
||
|
return s
|
||
|
}
|
||
|
|
||
|
func loadProviders(screen *gdk.Screen) {
|
||
|
for file, repo := range cssRepos {
|
||
|
gtk.AddProviderForScreen(
|
||
|
screen, repo,
|
||
|
uint(gtk.STYLE_PROVIDER_PRIORITY_APPLICATION),
|
||
|
)
|
||
|
// mark as done
|
||
|
delete(cssRepos, file)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func LoadCSS(files ...string) {
|
||
|
var buf bytes.Buffer
|
||
|
for _, file := range files {
|
||
|
buf.Reset()
|
||
|
|
||
|
if err := readFile(&buf, file); err != nil {
|
||
|
log.Error(errors.Wrap(err, "Failed to load a CSS file"))
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
prov, _ := gtk.CssProviderNew()
|
||
|
if err := prov.LoadFromData(buf.String()); err != nil {
|
||
|
log.Error(errors.Wrap(err, "Failed to parse CSS "+file))
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
cssRepos[file] = prov
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func readFile(buf *bytes.Buffer, file string) error {
|
||
|
f, err := pkger.Open(file)
|
||
|
if err != nil {
|
||
|
return errors.Wrap(err, "Failed to load a CSS file")
|
||
|
}
|
||
|
defer f.Close()
|
||
|
|
||
|
if _, err := buf.ReadFrom(f); err != nil {
|
||
|
return errors.Wrap(err, "Failed to read file")
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|