Fyne でのアイコンや画像の取り扱い
Go の GUI ライブラリである Fyne について
(別サイトに掲載していたものを抜粋/一部追記修正)
About
GUI アプリケーションでは, ボタンのアイコンとして画像を使用したい, ということがあります. アプリケーションを配布したい場合, 当然画像ファイルなどのリソースファイルもまとめてシングルバイナリとしたいと思います.
Fyne ではこれを行うための仕組みや便利なコマンドが提供されています.
fyne コマンド
Fyne に関するいくつかの操作を実行できる fyne
コマンドが提供されています.
https://github.com/fyne-io/fyne/tree/master/cmd/fyne
インストール
go get でインストールします.
$ go get fyne.io/fyne/cmd/fyne
fyne bundle
fyne bundle
コマンドを利用することで, 画像等のリソースファイルを Fyne で扱えるデータ(バイト列生データを持った構造体)に変換することができます.
$ fyne bundle foo.svg > bundle.go
bundle.go
の中身は以下のようなファイルになっています.
package main
import "fyne.io/fyne"
var fooSvg = &fyne.StaticResource{
StaticName: "foo.svg",
StaticContent: []byte{
... // 生データの数値列
使ってみる
あとは必要な箇所(fyne.Resource
型を要求する箇所)にこの StaticResource
を渡してやればよいだけです.
たとえばボタンであれば以下のようになります.
widget.NewButtonWithIcon("button", fooSvg, func() { /* do something */ })
ボタンのアイコンとして SVG ファイルを設定する, というような場合, テーマに合わせて適切な色で描画したいということがあります. theme.NewThemedResource
を利用することで, テーマカラーに合わせていい感じの描画を行ってくれます.
widget.NewButtonWithIcon("button", theme.NewThemedResource(fooSvg, nil), func() { /* do something */ })
サンプルアプリケーション
以下のリポジトリでは, 上記の方法で組み込んだアイコンが一部で利用されています.
https://github.com/lusingander/go-gif-viewer
関連するファイルは以下です.
Makefile
のbundle
fyne bundle
の実行
resource.go
- 自動生成ファイル
./resource/icons/svg/
以下- 生成元アイコン
bar.go
の頭のvar
宣言- リソースの読み込み
リンク
公式のチュートリアル: Bundling resources (元記事を書いたときにはまだ存在しなかったはず…)