From 4fe5acd71182421c94e3dbfda2a5ef2dcb83871c Mon Sep 17 00:00:00 2001 From: Hajime Hoshi Date: Sat, 28 Mar 2020 22:00:40 +0900 Subject: [PATCH] ui: Panic on MaximizeWindow when the window is not resizable On Windows, the window could be maximized even when the window was not resizable. This behavior is confusing. Forbid it so that the behavior will be clearer. --- examples/windowsize/main.go | 5 +++-- internal/uidriver/glfw/window.go | 3 +++ window.go | 5 ++++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/examples/windowsize/main.go b/examples/windowsize/main.go index 3af42228e..3a99d4787 100644 --- a/examples/windowsize/main.go +++ b/examples/windowsize/main.go @@ -251,7 +251,7 @@ func (g *game) Update(screen *ebiten.Image) error { ebiten.SetWindowDecorated(decorated) ebiten.SetWindowPosition(positionX, positionY) ebiten.SetWindowFloating(floating) - if maximize { + if maximize && ebiten.IsWindowResizable() { ebiten.MaximizeWindow() } if minimize { @@ -294,7 +294,7 @@ func (g *game) Draw(screen *ebiten.Image) { } var lines []string - if !ebiten.IsWindowMaximized() { + if !ebiten.IsWindowMaximized() && ebiten.IsWindowResizable() { lines = append(lines, "[M] Maximize the window") } if !ebiten.IsWindowMinimized() { @@ -403,6 +403,7 @@ func main() { ebiten.SetWindowFloating(true) } if *flagMaximize { + ebiten.SetWindowResizable(true) ebiten.MaximizeWindow() } if *flagAutoAdjusting { diff --git a/internal/uidriver/glfw/window.go b/internal/uidriver/glfw/window.go index 7c1541ec6..cad5df1af 100644 --- a/internal/uidriver/glfw/window.go +++ b/internal/uidriver/glfw/window.go @@ -129,6 +129,9 @@ func (w *window) IsMaximized() bool { } func (w *window) Maximize() { + if !w.IsResizable() { + panic("glfw: a window to maximize must be resizable") + } if !w.ui.isRunning() { w.ui.setInitWindowMaximized(true) return diff --git a/window.go b/window.go index 53ab1df33..e00c5cd60 100644 --- a/window.go +++ b/window.go @@ -262,12 +262,15 @@ func SetWindowFloating(float bool) { // MaximizeWindow maximizes the window. // -// On some environments like macOS, MaximizeWindow requres that the window is resizable. +// MaximizeWindow panics when the window is not resizable. // // MaximizeWindow does nothing on browsers or mobiles. // // MaximizeWindow is concurrent-safe. func MaximizeWindow() { + if !IsWindowResizable() { + panic("ebiten: a window to maximize must be resizable") + } if w := uiDriver().Window(); w != nil { w.Maximize() }