Skip to content

Commit

Permalink
Show SVG icons in window border
Browse files Browse the repository at this point in the history
Thanks @ChandanChainani for the inspiration.
Fixes #2579
  • Loading branch information
andydotxyz committed Nov 29, 2021
1 parent 26f4cc0 commit a2e3b0e
Showing 1 changed file with 14 additions and 10 deletions.
24 changes: 14 additions & 10 deletions internal/driver/glfw/window.go
Expand Up @@ -13,12 +13,14 @@ import (
"github.com/go-gl/glfw/v3.3/glfw"

"fyne.io/fyne/v2"
"fyne.io/fyne/v2/canvas"
"fyne.io/fyne/v2/driver/desktop"
"fyne.io/fyne/v2/internal"
"fyne.io/fyne/v2/internal/app"
"fyne.io/fyne/v2/internal/cache"
"fyne.io/fyne/v2/internal/driver"
"fyne.io/fyne/v2/internal/driver/common"
"fyne.io/fyne/v2/internal/painter"
"fyne.io/fyne/v2/internal/painter/gl"
)

Expand All @@ -28,6 +30,7 @@ const (
scrollSpeed = float32(10)
doubleClickDelay = 300 // ms (maximum interval between clicks for double click detection)
dragMoveThreshold = 2 // how far can we move before it is a drag
winIconSize = 256 // standard size for window icons
)

var (
Expand Down Expand Up @@ -240,24 +243,25 @@ func (w *window) SetIcon(icon fyne.Resource) {
return
}

if string(icon.Content()[:4]) == "<svg" {
fyne.LogError("Window icon does not support vector images", nil)
return
}

w.runOnMainWhenCreated(func() {
if w.icon == nil {
w.viewport.SetIcon(nil)
return
}

pix, _, err := image.Decode(bytes.NewReader(w.icon.Content()))
if err != nil {
fyne.LogError("Failed to decode image for window icon", err)
return
var img image.Image
if string(icon.Content()[:4]) == "<svg" {
img = painter.PaintImage(&canvas.Image{Resource: w.icon}, nil, winIconSize, winIconSize)
} else {
pix, _, err := image.Decode(bytes.NewReader(w.icon.Content()))
if err != nil {
fyne.LogError("Failed to decode image for window icon", err)
return
}
img = pix
}

w.viewport.SetIcon([]image.Image{pix})
w.viewport.SetIcon([]image.Image{img})
})
}

Expand Down

0 comments on commit a2e3b0e

Please sign in to comment.