mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-11-10 04:57:26 +01:00
parent
995ba3afcf
commit
e0d780b029
@ -18,7 +18,6 @@ package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"flag"
|
||||
"fmt"
|
||||
"image"
|
||||
"image/color"
|
||||
@ -34,10 +33,6 @@ import (
|
||||
"github.com/hajimehoshi/ebiten/inpututil"
|
||||
)
|
||||
|
||||
var (
|
||||
windowDecorated = flag.Bool("windowdecorated", true, "whether the window is decorated")
|
||||
)
|
||||
|
||||
func init() {
|
||||
rand.Seed(time.Now().UnixNano())
|
||||
}
|
||||
@ -81,6 +76,7 @@ func update(screen *ebiten.Image) error {
|
||||
cursorVisible := ebiten.IsCursorVisible()
|
||||
vsyncEnabled := ebiten.IsVsyncEnabled()
|
||||
tps := ebiten.MaxTPS()
|
||||
decorated := ebiten.IsWindowDecorated()
|
||||
|
||||
if inpututil.IsKeyJustPressed(ebiten.KeyUp) {
|
||||
screenHeight += d
|
||||
@ -138,6 +134,9 @@ func update(screen *ebiten.Image) error {
|
||||
panic("not reached")
|
||||
}
|
||||
}
|
||||
if inpututil.IsKeyJustPressed(ebiten.KeyD) {
|
||||
decorated = !decorated
|
||||
}
|
||||
|
||||
ebiten.SetScreenSize(screenWidth, screenHeight)
|
||||
ebiten.SetScreenScale(screenScale)
|
||||
@ -146,6 +145,7 @@ func update(screen *ebiten.Image) error {
|
||||
ebiten.SetCursorVisible(cursorVisible)
|
||||
ebiten.SetVsyncEnabled(vsyncEnabled)
|
||||
ebiten.SetMaxTPS(tps)
|
||||
ebiten.SetWindowDecorated(decorated)
|
||||
|
||||
if inpututil.IsKeyJustPressed(ebiten.KeyI) {
|
||||
ebiten.SetWindowIcon([]image.Image{createRandomIconImage()})
|
||||
@ -180,6 +180,7 @@ Press C key to switch the cursor visibility
|
||||
Press I key to change the window icon (only for desktops)
|
||||
Press V key to switch vsync
|
||||
Press T key to switch TPS (ticks per second)
|
||||
Press D key to switch the window decoration
|
||||
Cursor: (%d, %d)
|
||||
TPS: Current: %0.2f / Max: %s
|
||||
FPS: %0.2f
|
||||
@ -189,8 +190,6 @@ Device Scale Factor: %0.2f`, x, y, ebiten.CurrentTPS(), tpsStr, ebiten.CurrentFP
|
||||
}
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
|
||||
fmt.Printf("Device scale factor: %0.2f\n", ebiten.DeviceScaleFactor())
|
||||
w, h := ebiten.ScreenSizeInFullscreen()
|
||||
fmt.Printf("Screen size in fullscreen: %d, %d\n", w, h)
|
||||
@ -212,8 +211,6 @@ func main() {
|
||||
|
||||
ebiten.SetWindowIcon([]image.Image{createRandomIconImage()})
|
||||
|
||||
ebiten.SetWindowDecorated(*windowDecorated)
|
||||
|
||||
if err := ebiten.Run(update, initScreenWidth, initScreenHeight, initScreenScale, "Window Size (Ebiten Demo)"); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
@ -94,6 +94,10 @@ func (w *Window) GetAttrib(attrib Hint) int {
|
||||
return w.w.GetAttrib(glfw.Hint(attrib))
|
||||
}
|
||||
|
||||
func (w *Window) SetAttrib(attrib Hint, value int) {
|
||||
w.w.SetAttrib(glfw.Hint(attrib), value)
|
||||
}
|
||||
|
||||
func (w *Window) GetCursorPos() (x, y float64) {
|
||||
return w.w.GetCursorPos()
|
||||
}
|
||||
|
@ -114,6 +114,11 @@ func (w *Window) GetAttrib(attrib Hint) int {
|
||||
return int(r)
|
||||
}
|
||||
|
||||
func (w *Window) SetAttrib(attrib Hint, value int) {
|
||||
glfwDLL.call("glfwSetWindowAttrib", w.w, uintptr(attrib), uintptr(value))
|
||||
panicError()
|
||||
}
|
||||
|
||||
func (w *Window) GetCursorPos() (x, y float64) {
|
||||
glfwDLL.call("glfwGetCursorPos", w.w, uintptr(unsafe.Pointer(&x)), uintptr(unsafe.Pointer(&y)))
|
||||
panicError()
|
||||
|
@ -386,6 +386,7 @@ func (u *UserInterface) SetWindowTitle(title string) {
|
||||
if !u.isRunning() {
|
||||
return
|
||||
}
|
||||
u.title = title
|
||||
_ = u.t.Call(func() error {
|
||||
u.window.SetTitle(title)
|
||||
return nil
|
||||
@ -503,19 +504,19 @@ func (u *UserInterface) SetWindowDecorated(decorated bool) {
|
||||
return
|
||||
}
|
||||
|
||||
panic("ui: SetWindowDecorated can't be called after Run so far.")
|
||||
_ = u.t.Call(func() error {
|
||||
v := glfw.False
|
||||
if decorated {
|
||||
v = glfw.True
|
||||
}
|
||||
u.window.SetAttrib(glfw.Decorated, v)
|
||||
|
||||
// TODO: Now SetAttrib doesn't exist on GLFW 3.2. Revisit later (#556).
|
||||
// If SetAttrib exists, the implementation would be:
|
||||
//
|
||||
// _ = u.t.Call(func() error {
|
||||
// v := glfw.False
|
||||
// if decorated {
|
||||
// v = glfw.True
|
||||
// }
|
||||
// })
|
||||
// u.window.SetAttrib(glfw.Decorated, v)
|
||||
// return nil
|
||||
// The title can be lost when the decoration is gone. Recover this.
|
||||
if v == glfw.True {
|
||||
u.window.SetTitle(u.title)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func (u *UserInterface) IsWindowResizable() bool {
|
||||
@ -649,7 +650,7 @@ func (u *UserInterface) run(width, height int, scale float64, title string, cont
|
||||
// currentMonitor returns the monitor for the active window when possible and then the monitor for
|
||||
// the foreground window as fallback. In the current situation, the current window is hidden and
|
||||
// there is not the active window but the foreground window. After showing the current window, the
|
||||
// current window will be the active window. Thus, currentMonitor retuls varies before and after
|
||||
// current window will be the active window. Thus, currentMonitor result varies before and after
|
||||
// showing the window.
|
||||
m := u.currentMonitor()
|
||||
mx, my := m.GetPos()
|
||||
|
2
run.go
2
run.go
@ -333,8 +333,6 @@ func IsRunnableInBackground() bool {
|
||||
// SetWindowDecorated works only on desktops.
|
||||
// SetWindowDecorated does nothing on other platforms.
|
||||
//
|
||||
// SetWindowDecorated panics if SetWindowDecorated is called after Run.
|
||||
//
|
||||
// SetWindowDecorated is concurrent-safe.
|
||||
func SetWindowDecorated(decorated bool) {
|
||||
uiDriver().SetWindowDecorated(decorated)
|
||||
|
Loading…
Reference in New Issue
Block a user