From 2e97364e219e7d169397f1d889fe65789344017c Mon Sep 17 00:00:00 2001 From: Andy Williams Date: Tue, 30 Jun 2020 12:08:01 +0100 Subject: [PATCH] Fix flicker, tear and other artefacts on resize This does add a little lag, especially on complex screens, but that is the tradeoff. Resizing GL canvases is slow so unfortunately. Fixes #1114, #1122, #1140 --- internal/driver/glfw/window.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/internal/driver/glfw/window.go b/internal/driver/glfw/window.go index 0c683ed0be..92fb59da57 100644 --- a/internal/driver/glfw/window.go +++ b/internal/driver/glfw/window.go @@ -501,7 +501,17 @@ func (w *window) resized(_ *glfw.Window, width, height int) { w.width = internal.ScaleInt(w.canvas, canvasSize.Width) w.height = internal.ScaleInt(w.canvas, canvasSize.Height) } - w.canvas.Resize(canvasSize) + + d, ok := fyne.CurrentApp().Driver().(*gLDriver) + if !ok { // don't wait to redraw in this way if we are running on test + w.canvas.Resize(canvasSize) + return + } + + runOnDraw(w, func() { + w.canvas.Resize(canvasSize) + d.repaintWindow(w) + }) } func (w *window) frameSized(viewport *glfw.Window, width, height int) {