Преглед на файлове

Attempt to fix mouse coordinates on hidpi systems

Pavel преди 7 години
родител
ревизия
38efa25ad2
променени са 1 файла, в които са добавени 13 реда и са изтрити 0 реда
  1. 13 0
      window/glfw.go

+ 13 - 0
window/glfw.go

@@ -155,12 +155,19 @@ func (m *glfwManager) CreateWindow(width, height int, title string, fullscreen b
 	win.SetMouseButtonCallback(func(x *glfw.Window, button glfw.MouseButton, action glfw.Action, mods glfw.ModifierKey) {
 
 		xpos, ypos := x.GetCursorPos()
+		fbw, fbh := x.GetFramebufferSize()
+		ww, wh := x.GetSize()
+
+		xpos *= float64(fbw) / float64(ww)
+		ypos *= float64(fbh) / float64(wh)
+
 		w.mouseEv.W = w
 		w.mouseEv.Button = MouseButton(button)
 		w.mouseEv.Action = Action(action)
 		w.mouseEv.Mods = ModifierKey(mods)
 		w.mouseEv.Xpos = float32(xpos)
 		w.mouseEv.Ypos = float32(ypos)
+
 		if action == glfw.Press {
 			w.Dispatch(OnMouseDown, &w.mouseEv)
 			return
@@ -192,6 +199,12 @@ func (m *glfwManager) CreateWindow(width, height int, title string, fullscreen b
 	// Set window cursor position event callback to dispatch event
 	win.SetCursorPosCallback(func(x *glfw.Window, xpos float64, ypos float64) {
 
+		fbw, fbh := x.GetFramebufferSize()
+		ww, wh := x.GetSize()
+
+		xpos *= float64(fbw) / float64(ww)
+		ypos *= float64(fbh) / float64(wh)
+
 		w.cursorEv.W = w
 		w.cursorEv.Xpos = float32(xpos)
 		w.cursorEv.Ypos = float32(ypos)