diff --git a/glfwcanvas/glfwcanvas.go b/glfwcanvas/glfwcanvas.go index e69bd86..ae11d25 100644 --- a/glfwcanvas/glfwcanvas.go +++ b/glfwcanvas/glfwcanvas.go @@ -33,6 +33,8 @@ type Window struct { KeyUp func(scancode int, rn rune, name string) KeyChar func(rn rune) SizeChange func(w, h int) + scalex float64 + scaley float64 } // CreateWindow creates a window using SDL and initializes the OpenGL context @@ -77,11 +79,11 @@ func CreateWindow(w, h int, title string) (*Window, *canvas.Canvas, error) { wnd := &Window{ Window: window, canvas: cv, + scalex: float64(fbw) / float64(w), + scaley: float64(fbh) / float64(h), } var mx, my int - sx := float64(fbw) / float64(w) - sy := float64(fbh) / float64(h) window.SetMouseButtonCallback(func(w *glfw.Window, button glfw.MouseButton, action glfw.Action, mod glfw.ModifierKey) { if action == glfw.Press && wnd.MouseDown != nil { @@ -91,7 +93,7 @@ func CreateWindow(w, h int, title string) (*Window, *canvas.Canvas, error) { } }) window.SetCursorPosCallback(func(w *glfw.Window, xpos, ypos float64) { - mx, my = int(math.Round(xpos*sx)), int(math.Round(ypos*sy)) + mx, my = int(math.Round(xpos*wnd.scalex)), int(math.Round(ypos*wnd.scaley)) if wnd.MouseMove != nil { wnd.MouseMove(mx, my) } @@ -115,8 +117,8 @@ func CreateWindow(w, h int, title string) (*Window, *canvas.Canvas, error) { }) window.SetSizeCallback(func(w *glfw.Window, width, height int) { fbw, fbh := window.GetFramebufferSize() - sx = float64(fbw) / float64(width) - sy = float64(fbh) / float64(height) + wnd.scalex = float64(fbw) / float64(width) + wnd.scaley = float64(fbh) / float64(height) if wnd.SizeChange != nil { wnd.SizeChange(width, height) } else { @@ -166,7 +168,14 @@ func (wnd *Window) FinishFrame() { func (wnd *Window) MainLoop(run func()) { for !wnd.close { wnd.StartFrame() + if wnd.scalex != 1 || wnd.scaley != 1 { + wnd.canvas.Save() + wnd.canvas.Scale(wnd.scalex, wnd.scaley) + } run() + if wnd.scalex != 1 || wnd.scaley != 1 { + wnd.canvas.Restore() + } wnd.FinishFrame() } } diff --git a/glfwcanvas/keynames.go b/glfwcanvas/keynames.go index d42b063..fcc0670 100644 --- a/glfwcanvas/keynames.go +++ b/glfwcanvas/keynames.go @@ -1,6 +1,6 @@ package glfwcanvas -import "github.com/go-gl/glfw/v3.2/glfw" +import "github.com/go-gl/glfw/v3.3/glfw" var keyNameMap [347]string var keyRuneMap [347]rune diff --git a/go.mod b/go.mod index bfa6927..a76687f 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,6 @@ module github.com/tfriedel6/canvas require ( github.com/go-gl/gl v0.0.0-20181026044259-55b76b7df9d2 - github.com/go-gl/glfw v0.0.0-20181014061658-691ee1b84c51 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72 github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 github.com/veandco/go-sdl2 v0.4.0 diff --git a/go.sum b/go.sum index eec14a1..56182c1 100644 --- a/go.sum +++ b/go.sum @@ -1,13 +1,9 @@ github.com/go-gl/gl v0.0.0-20181026044259-55b76b7df9d2 h1:78Hza2KHn2PX1jdydQnffaU2A/xM0g3Nx1xmMdep9Gk= github.com/go-gl/gl v0.0.0-20181026044259-55b76b7df9d2/go.mod h1:482civXOzJJCPzJ4ZOX/pwvXBWSnzD4OKMdH4ClKGbk= -github.com/go-gl/glfw v0.0.0-20181014061658-691ee1b84c51 h1:elGSwayRx7uAsfA5PnVKeTHh+AVsUTmas0CkHOw/DSk= -github.com/go-gl/glfw v0.0.0-20181014061658-691ee1b84c51/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72 h1:b+9H1GAsx5RsjvDFLoS5zkNBzIQMuVKUYQDmxU3N5XE= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/veandco/go-sdl2 v0.3.3 h1:4/TirgB2MQ7oww3pM3Yfgf1YbChMlAQAmiCPe5koK0I= -github.com/veandco/go-sdl2 v0.3.3/go.mod h1:FB+kTpX9YTE+urhYiClnRzpOXbiWgaU3+5F2AB78DPg= github.com/veandco/go-sdl2 v0.4.0 h1:l9q6K+Dvpd/VlZdw2ufApKnWhAQqx9UL8Zrvbjtm3Lw= github.com/veandco/go-sdl2 v0.4.0/go.mod h1:FB+kTpX9YTE+urhYiClnRzpOXbiWgaU3+5F2AB78DPg= golang.org/x/exp v0.0.0-20181106170214-d68db9428509 h1:k21GX33vzpH/syMF7TgrLxe8ILtvwbyuHtEO3ebR82E= diff --git a/sdlcanvas/sdlcanvas.go b/sdlcanvas/sdlcanvas.go index 581d944..4ceabe7 100644 --- a/sdlcanvas/sdlcanvas.go +++ b/sdlcanvas/sdlcanvas.go @@ -267,7 +267,14 @@ func (wnd *Window) MainLoop(run func()) { } } + if wnd.scalex != 1 || wnd.scaley != 1 { + wnd.canvas.Save() + wnd.canvas.Scale(wnd.scalex, wnd.scaley) + } run() + if wnd.scalex != 1 || wnd.scaley != 1 { + wnd.canvas.Restore() + } wnd.FinishFrame() }