diff --git a/application.go b/application.go index cf55e1d6..7e34cc92 100644 --- a/application.go +++ b/application.go @@ -64,10 +64,30 @@ func (a *Application) Run() error { } defer glfw.Terminate() - a.window, err = glfw.CreateWindow(a.config.windowInitialDimensions.x, a.config.windowInitialDimensions.y, "Loading..", nil, nil) + var monitor *glfw.Monitor + switch a.config.windowMode { + case WindowModeDefault: + // nothing + case WindowModeBorderless: + glfw.WindowHint(glfw.Decorated, glfw.False) + case WindowModeBorderlessFullscreen: + monitor = glfw.GetPrimaryMonitor() + mode := monitor.GetVideoMode() + a.config.windowInitialDimensions.x = mode.Width + a.config.windowInitialDimensions.y = mode.Height + glfw.WindowHint(glfw.RedBits, mode.RedBits) + glfw.WindowHint(glfw.GreenBits, mode.GreenBits) + glfw.WindowHint(glfw.BlueBits, mode.BlueBits) + glfw.WindowHint(glfw.RefreshRate, mode.RefreshRate) + default: + return errors.Errorf("invalid window mode %T", a.config.windowMode) + } + + a.window, err = glfw.CreateWindow(a.config.windowInitialDimensions.x, a.config.windowInitialDimensions.y, "Loading..", monitor, nil) if err != nil { return errors.Wrap(err, "creating glfw window") } + glfw.DefaultWindowHints() defer a.window.Destroy() if a.config.windowIconProvider != nil { diff --git a/option.go b/option.go index 0a92ab6d..4512878e 100644 --- a/option.go +++ b/option.go @@ -16,6 +16,7 @@ type config struct { windowInitializerDeprecated func(*glfw.Window) error windowIconProvider func() ([]image.Image, error) windowInitialDimensions windowDimensions + windowMode windowMode forcePixelRatio float64 keyboardLayout KeyboardShortcuts @@ -36,6 +37,7 @@ var defaultApplicationConfig = config{ y: 600, }, keyboardLayout: KeyboardQwertyLayout, + windowMode: WindowModeDefault, } // Option for Application diff --git a/window.go b/window.go new file mode 100644 index 00000000..75352cf3 --- /dev/null +++ b/window.go @@ -0,0 +1,27 @@ +package flutter + +// windowMode determines the kind of window mode to use for new windows. +type windowMode int + +const ( + // WindowModeDefault is the default window mode. Windows are created with + // borders and close/minimize buttons. + WindowModeDefault windowMode = iota + // WindowModeBorderless removes decorations such as borders and + // close/minimize buttons from the window. + WindowModeBorderless + // WindowModeBorderlessFullscreen starts the application in borderless + // fullscreen mode. Currently, only fullscreen on the primary monitor is + // supported. This option overrides WindowInitialDimensions. Note that on + // some systems a fullscreen window is very hard to close. Make sure your + // Flutter application has a close button and use PopBehaviorIconify to + // minimize or PopBehaviorClose to close the application. + WindowModeBorderlessFullscreen +) + +// WindowMode sets the window mode on the application. +func WindowMode(w windowMode) Option { + return func(c *config) { + c.windowMode = w + } +}