mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-11-10 04:57:26 +01:00
ui: Bug fix: The window was not shown on the secondary monitor on launching
This change changes the behavior of WindowPosition / SetWindowPosition. The window position is now a relative position and the origin position is the left-upper of the current monitor. Fixes #1115
This commit is contained in:
parent
eb5f5485b3
commit
7b5fb0a0d0
@ -87,7 +87,6 @@ func (m *mascot) update(screen *ebiten.Image) error {
|
|||||||
m.count++
|
m.count++
|
||||||
|
|
||||||
sw, sh := ebiten.ScreenSizeInFullscreen()
|
sw, sh := ebiten.ScreenSizeInFullscreen()
|
||||||
// TODO: Consider multiple monitors. This requires new APIs (#1114).
|
|
||||||
ebiten.SetWindowPosition(m.x16/16, m.y16/16+sh-height)
|
ebiten.SetWindowPosition(m.x16/16, m.y16/16+sh-height)
|
||||||
|
|
||||||
if m.vx16 == 0 {
|
if m.vx16 == 0 {
|
||||||
|
@ -42,7 +42,6 @@ type UI interface {
|
|||||||
IsVsyncEnabled() bool
|
IsVsyncEnabled() bool
|
||||||
ScreenSizeInFullscreen() (int, int)
|
ScreenSizeInFullscreen() (int, int)
|
||||||
IsScreenTransparent() bool
|
IsScreenTransparent() bool
|
||||||
MonitorPosition() (int, int)
|
|
||||||
|
|
||||||
SetCursorMode(mode CursorMode)
|
SetCursorMode(mode CursorMode)
|
||||||
SetFullscreen(fullscreen bool)
|
SetFullscreen(fullscreen bool)
|
||||||
|
@ -1043,23 +1043,6 @@ func (u *UserInterface) IsScreenTransparent() bool {
|
|||||||
return val
|
return val
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *UserInterface) MonitorPosition() (int, int) {
|
|
||||||
if !u.isRunning() {
|
|
||||||
return u.monitorPosition()
|
|
||||||
}
|
|
||||||
var mx, my int
|
|
||||||
_ = u.t.Call(func() error {
|
|
||||||
mx, my = u.monitorPosition()
|
|
||||||
return nil
|
|
||||||
})
|
|
||||||
return mx, my
|
|
||||||
}
|
|
||||||
|
|
||||||
func (u *UserInterface) monitorPosition() (int, int) {
|
|
||||||
// TODO: toDeviceIndependentPixel might be required.
|
|
||||||
return u.currentMonitor().GetPos()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (u *UserInterface) Input() driver.Input {
|
func (u *UserInterface) Input() driver.Input {
|
||||||
return &u.input
|
return &u.input
|
||||||
}
|
}
|
||||||
|
@ -185,6 +185,9 @@ func (w *window) Position() (int, int) {
|
|||||||
} else {
|
} else {
|
||||||
wx, wy = w.ui.window.GetPos()
|
wx, wy = w.ui.window.GetPos()
|
||||||
}
|
}
|
||||||
|
mx, my := w.ui.currentMonitor().GetPos()
|
||||||
|
wx -= mx
|
||||||
|
wy -= my
|
||||||
xf := w.ui.toDeviceIndependentPixel(float64(wx))
|
xf := w.ui.toDeviceIndependentPixel(float64(wx))
|
||||||
yf := w.ui.toDeviceIndependentPixel(float64(wy))
|
yf := w.ui.toDeviceIndependentPixel(float64(wy))
|
||||||
x, y = int(xf), int(yf)
|
x, y = int(xf), int(yf)
|
||||||
@ -199,9 +202,10 @@ func (w *window) SetPosition(x, y int) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
_ = w.ui.t.Call(func() error {
|
_ = w.ui.t.Call(func() error {
|
||||||
|
mx, my := w.ui.currentMonitor().GetPos()
|
||||||
xf := w.ui.toDeviceDependentPixel(float64(x))
|
xf := w.ui.toDeviceDependentPixel(float64(x))
|
||||||
yf := w.ui.toDeviceDependentPixel(float64(y))
|
yf := w.ui.toDeviceDependentPixel(float64(y))
|
||||||
x, y := adjustWindowPosition(int(xf), int(yf))
|
x, y := adjustWindowPosition(mx+int(xf), my+int(yf))
|
||||||
if w.ui.isFullscreen() {
|
if w.ui.isFullscreen() {
|
||||||
w.ui.origPosX, w.ui.origPosY = x, y
|
w.ui.origPosX, w.ui.origPosY = x, y
|
||||||
} else {
|
} else {
|
||||||
|
@ -456,10 +456,6 @@ func (u *UserInterface) IsScreenTransparent() bool {
|
|||||||
return bodyStyle.Get("backgroundColor").String() == "transparent"
|
return bodyStyle.Get("backgroundColor").String() == "transparent"
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *UserInterface) MonitorPosition() (int, int) {
|
|
||||||
return 0, 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (u *UserInterface) Input() driver.Input {
|
func (u *UserInterface) Input() driver.Input {
|
||||||
return &u.input
|
return &u.input
|
||||||
}
|
}
|
||||||
|
@ -433,10 +433,6 @@ func (u *UserInterface) IsScreenTransparent() bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *UserInterface) MonitorPosition() (int, int) {
|
|
||||||
return 0, 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (u *UserInterface) Input() driver.Input {
|
func (u *UserInterface) Input() driver.Input {
|
||||||
return &u.input
|
return &u.input
|
||||||
}
|
}
|
||||||
|
@ -112,6 +112,8 @@ func SetWindowIcon(iconImages []image.Image) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// WindowPosition returns the window position.
|
// WindowPosition returns the window position.
|
||||||
|
// The origin position is the left-upper corner of the current monitor.
|
||||||
|
// The unit is device-independent pixels.
|
||||||
//
|
//
|
||||||
// WindowPosition panics if the main loop does not start yet.
|
// WindowPosition panics if the main loop does not start yet.
|
||||||
//
|
//
|
||||||
@ -131,6 +133,8 @@ func WindowPosition() (x, y int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SetWindowPosition sets the window position.
|
// SetWindowPosition sets the window position.
|
||||||
|
// The origin position is the left-upper corner of the current monitor.
|
||||||
|
// The unit is device-independent pixels.
|
||||||
//
|
//
|
||||||
// SetWindowPosition does nothing on fullscreen mode.
|
// SetWindowPosition does nothing on fullscreen mode.
|
||||||
//
|
//
|
||||||
@ -194,10 +198,9 @@ func fixWindowPosition(width, height int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if initWindowPosition.x == invalidPos || initWindowPosition.y == invalidPos {
|
if initWindowPosition.x == invalidPos || initWindowPosition.y == invalidPos {
|
||||||
mx, my := uiDriver().MonitorPosition()
|
|
||||||
sw, sh := uiDriver().ScreenSizeInFullscreen()
|
sw, sh := uiDriver().ScreenSizeInFullscreen()
|
||||||
x := mx + (sw-width)/2
|
x := (sw - width) / 2
|
||||||
y := my + (sh-height)/3
|
y := (sh - height) / 3
|
||||||
w.SetPosition(x, y)
|
w.SetPosition(x, y)
|
||||||
} else {
|
} else {
|
||||||
w.SetPosition(initWindowPosition.x, initWindowPosition.y)
|
w.SetPosition(initWindowPosition.x, initWindowPosition.y)
|
||||||
|
Loading…
Reference in New Issue
Block a user