動機
シングルアプリケーションをkioskモードで動かしたい。
そうすることで、ラズパイとかでアプリ作って・・・みたいなことがやりやすそう。
flutter-elinux でもいいんだけど、dart 覚えるの大変そう。
Go でできるなら Go でやりたい。
webview/webview とかでそれっぽいことできないかなぁ~?
昔は webview/webview でも Fullscreen() メソッドがあったけどなぜか最新ではなくなってる。
最新でも Fullscreen() したい!!
そんな感じの動機。
WebKitGtk
webview/webview は linux の場合、 Windowの表示に Gtk3 を使っているみたい。
webview/webview.go at 899018ad0e5cc22a18cd734393ccae4d55e3b2b4 · webview/webview · GitHub
さっきも書いた通り、Webviewにはウィンドウを操作するメソッドは生えてない。あるのはウィンドウへのポインタを返す Window() メソッドがあるのみ。そのポインタを使って勝手に良しなにしてくださいな。ということのようだ。
gotk3/gotk3
Go で Gtk3 を操作するためのライブラリに gotk3/gotk3 というのがある。
GitHub - gotk3/gotk3: Go bindings for GTK3
こいつには Fullscreen() のメソッドがある。
gtk package - github.com/gotk3/gotk3/gtk - Go Packages
なので、このライブラリに webview から取得したポイントを使って Window を作ればフルスクリーンにできるはず。
gotk3/gtk/window.go at master · gotk3/gotk3 · GitHub
ここら辺を見ると、自前で gtk.Window を作れそうだったので、それをベースにコードを書いてみた。
それが以下のコード
コード
package main
import (
"github.com/webview/webview"
"github.com/gotk3/gotk3/gtk"
"github.com/gotk3/gotk3/glib"
"unsafe"
)
func fullScreen(handle unsafe.Pointer) {
obj := glib.Take(handle)
w := >k.Window {
gtk.Bin {
gtk.Container {
gtk.Widget {
glib.InitiallyUnowned { obj },
},
},
},
}
w.Fullscreen()
}
func main() {
w := webview.New(false)
defer w.Destroy()
fullScreen(w.Window())
w.SetHtml("Thanks for using webview!")
w.Run()
}
weston を使った フルスクリーンのデモ
weston.ini の [autolaunch] の path に ビルドしたバイナリのフルパスを指定して weston を起動すると以下のように表示されるはず。

まとめ
webview/webview を使って Linux上でフルスクリーンで表示してみました。
ここでも webview の Fullscreen 表示の議論がなされているけど、まだ Open ステータスなので、今のところは 自前で Fullscreen する方法でやっていくしかなさそう。