New example : Window flags
This commit is contained in:
parent
1ff1eefdf1
commit
d7bd66f339
1 changed files with 260 additions and 0 deletions
260
examples/core/window_flags/main.go
Normal file
260
examples/core/window_flags/main.go
Normal file
|
@ -0,0 +1,260 @@
|
||||||
|
/*******************************************************************************************
|
||||||
|
*
|
||||||
|
* raylib [core] example - window flags
|
||||||
|
*
|
||||||
|
* Example originally created with raylib 3.5, last time updated with raylib 3.5
|
||||||
|
*
|
||||||
|
* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified,
|
||||||
|
* BSD-like license that allows static linking with closed source software
|
||||||
|
*
|
||||||
|
* Copyright (c) 2020-2024 Ramon Santamaria (@raysan5)
|
||||||
|
*
|
||||||
|
********************************************************************************************/
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
rl "github.com/gen2brain/raylib-go/raylib"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
screenWidth = 800
|
||||||
|
screenHeight = 450
|
||||||
|
)
|
||||||
|
|
||||||
|
// Possible window flags
|
||||||
|
/*
|
||||||
|
FLAG_VSYNC_HINT
|
||||||
|
FLAG_FULLSCREEN_MODE -> not working properly -> wrong scaling!
|
||||||
|
FLAG_WINDOW_RESIZABLE
|
||||||
|
FLAG_WINDOW_UNDECORATED
|
||||||
|
FLAG_WINDOW_TRANSPARENT
|
||||||
|
FLAG_WINDOW_HIDDEN
|
||||||
|
FLAG_WINDOW_MINIMIZED -> Not supported on window creation
|
||||||
|
FLAG_WINDOW_MAXIMIZED -> Not supported on window creation
|
||||||
|
FLAG_WINDOW_UNFOCUSED
|
||||||
|
FLAG_WINDOW_TOPMOST
|
||||||
|
FLAG_WINDOW_HIGHDPI -> errors after minimize-resize, fb size is recalculated
|
||||||
|
FLAG_WINDOW_ALWAYS_RUN
|
||||||
|
FLAG_MSAA_4X_HINT
|
||||||
|
*/
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
// Set configuration flags for window creation
|
||||||
|
//SetConfigFlags(FLAG_VSYNC_HINT | FLAG_MSAA_4X_HINT | FLAG_WINDOW_HIGHDPI);
|
||||||
|
rl.InitWindow(screenWidth, screenHeight, "raylib [core] example - Window Flags")
|
||||||
|
|
||||||
|
ballPosition := rl.Vector2{X: float32(rl.GetScreenWidth()) / 2.0, Y: float32(rl.GetScreenHeight()) / 2.0}
|
||||||
|
ballSpeed := rl.Vector2{X: 5.0, Y: 4.0}
|
||||||
|
ballRadius := float32(20.0)
|
||||||
|
framesCounter := 0
|
||||||
|
|
||||||
|
rl.SetTargetFPS(60) // Set our game to run at 60 frames-per-second
|
||||||
|
|
||||||
|
for !rl.WindowShouldClose() { // Detect window close button or ESC key
|
||||||
|
if rl.IsKeyPressed(rl.KeyF) {
|
||||||
|
rl.ToggleFullscreen() // modifies window size when scaling!
|
||||||
|
}
|
||||||
|
|
||||||
|
if rl.IsKeyPressed(rl.KeyR) {
|
||||||
|
if rl.IsWindowState(rl.FlagWindowResizable) {
|
||||||
|
rl.ClearWindowState(rl.FlagWindowResizable)
|
||||||
|
} else {
|
||||||
|
rl.SetWindowState(rl.FlagWindowResizable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if rl.IsKeyPressed(rl.KeyD) {
|
||||||
|
if rl.IsWindowState(rl.FlagWindowUndecorated) {
|
||||||
|
rl.ClearWindowState(rl.FlagWindowUndecorated)
|
||||||
|
} else {
|
||||||
|
rl.SetWindowState(rl.FlagWindowUndecorated)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if rl.IsKeyPressed(rl.KeyH) {
|
||||||
|
if !rl.IsWindowState(rl.FlagWindowHidden) {
|
||||||
|
rl.SetWindowState(rl.FlagWindowHidden)
|
||||||
|
}
|
||||||
|
|
||||||
|
framesCounter = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
if rl.IsWindowState(rl.FlagWindowHidden) {
|
||||||
|
framesCounter++
|
||||||
|
if framesCounter >= 240 {
|
||||||
|
rl.ClearWindowState(rl.FlagWindowHidden) // Show window after 3 seconds
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if rl.IsKeyPressed(rl.KeyN) {
|
||||||
|
if !rl.IsWindowState(rl.FlagWindowMinimized) {
|
||||||
|
rl.MinimizeWindow()
|
||||||
|
}
|
||||||
|
|
||||||
|
framesCounter = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
if rl.IsWindowState(rl.FlagWindowMinimized) {
|
||||||
|
framesCounter++
|
||||||
|
if framesCounter >= 240 {
|
||||||
|
rl.RestoreWindow() // Restore window after 3 seconds
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if rl.IsKeyPressed(rl.KeyM) {
|
||||||
|
// NOTE: Requires FLAG_WINDOW_RESIZABLE enabled!
|
||||||
|
if rl.IsWindowState(rl.FlagWindowMaximized) {
|
||||||
|
rl.RestoreWindow()
|
||||||
|
} else {
|
||||||
|
rl.MaximizeWindow()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if rl.IsKeyPressed(rl.KeyU) {
|
||||||
|
if rl.IsWindowState(rl.FlagWindowUnfocused) {
|
||||||
|
rl.ClearWindowState(rl.FlagWindowUnfocused)
|
||||||
|
} else {
|
||||||
|
rl.SetWindowState(rl.FlagWindowUnfocused)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if rl.IsKeyPressed(rl.KeyT) {
|
||||||
|
if rl.IsWindowState(rl.FlagWindowTopmost) {
|
||||||
|
rl.ClearWindowState(rl.FlagWindowTopmost)
|
||||||
|
} else {
|
||||||
|
rl.SetWindowState(rl.FlagWindowTopmost)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if rl.IsKeyPressed(rl.KeyA) {
|
||||||
|
if rl.IsWindowState(rl.FlagWindowAlwaysRun) {
|
||||||
|
rl.ClearWindowState(rl.FlagWindowAlwaysRun)
|
||||||
|
} else {
|
||||||
|
rl.SetWindowState(rl.FlagWindowAlwaysRun)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if rl.IsKeyPressed(rl.KeyV) {
|
||||||
|
if rl.IsWindowState(rl.FlagVsyncHint) {
|
||||||
|
rl.ClearWindowState(rl.FlagVsyncHint)
|
||||||
|
} else {
|
||||||
|
rl.SetWindowState(rl.FlagVsyncHint)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bouncing ball logic
|
||||||
|
ballPosition.X += ballSpeed.X
|
||||||
|
ballPosition.Y += ballSpeed.Y
|
||||||
|
if (ballPosition.X >= (float32(rl.GetScreenWidth()) - ballRadius)) || (ballPosition.X <= ballRadius) {
|
||||||
|
ballSpeed.X *= -1.0
|
||||||
|
}
|
||||||
|
if (ballPosition.Y >= (float32(rl.GetScreenHeight()) - ballRadius)) || (ballPosition.Y <= ballRadius) {
|
||||||
|
ballSpeed.Y *= -1.0
|
||||||
|
}
|
||||||
|
|
||||||
|
rl.BeginDrawing()
|
||||||
|
if rl.IsWindowState(rl.FlagWindowTransparent) {
|
||||||
|
rl.ClearBackground(rl.Blank)
|
||||||
|
} else {
|
||||||
|
rl.ClearBackground(rl.White)
|
||||||
|
}
|
||||||
|
|
||||||
|
rl.DrawCircleV(ballPosition, ballRadius, rl.Maroon)
|
||||||
|
rl.DrawRectangleLinesEx(
|
||||||
|
rl.Rectangle{
|
||||||
|
Width: float32(rl.GetScreenWidth()),
|
||||||
|
Height: float32(rl.GetScreenHeight()),
|
||||||
|
},
|
||||||
|
4, rl.White,
|
||||||
|
)
|
||||||
|
|
||||||
|
rl.DrawCircleV(rl.GetMousePosition(), 10, rl.DarkBlue)
|
||||||
|
|
||||||
|
rl.DrawFPS(10, 10)
|
||||||
|
|
||||||
|
rl.DrawText(
|
||||||
|
fmt.Sprintf("Screen Size: [%d, %d]", rl.GetScreenWidth(), rl.GetScreenHeight()),
|
||||||
|
10,
|
||||||
|
40,
|
||||||
|
10,
|
||||||
|
rl.Green,
|
||||||
|
)
|
||||||
|
|
||||||
|
// Draw window state info
|
||||||
|
rl.DrawText("Following flags can be set after window creation:", 10, 60, 10, rl.Gray)
|
||||||
|
if rl.IsWindowState(rl.FlagFullscreenMode) {
|
||||||
|
rl.DrawText("[F] FLAG_FULLSCREEN_MODE: on", 10, 80, 10, rl.Lime)
|
||||||
|
} else {
|
||||||
|
rl.DrawText("[F] FLAG_FULLSCREEN_MODE: off", 10, 80, 10, rl.Maroon)
|
||||||
|
}
|
||||||
|
if rl.IsWindowState(rl.FlagWindowResizable) {
|
||||||
|
rl.DrawText("[R] FLAG_WINDOW_RESIZABLE: on", 10, 100, 10, rl.Lime)
|
||||||
|
} else {
|
||||||
|
rl.DrawText("[R] FLAG_WINDOW_RESIZABLE: off", 10, 100, 10, rl.Maroon)
|
||||||
|
}
|
||||||
|
if rl.IsWindowState(rl.FlagWindowUndecorated) {
|
||||||
|
rl.DrawText("[D] FLAG_WINDOW_UNDECORATED: on", 10, 120, 10, rl.Lime)
|
||||||
|
} else {
|
||||||
|
rl.DrawText("[D] FLAG_WINDOW_UNDECORATED: off", 10, 120, 10, rl.Maroon)
|
||||||
|
}
|
||||||
|
if rl.IsWindowState(rl.FlagWindowHidden) {
|
||||||
|
rl.DrawText("[H] FLAG_WINDOW_HIDDEN: on", 10, 140, 10, rl.Lime)
|
||||||
|
} else {
|
||||||
|
rl.DrawText("[H] FLAG_WINDOW_HIDDEN: off", 10, 140, 10, rl.Maroon)
|
||||||
|
}
|
||||||
|
if rl.IsWindowState(rl.FlagWindowMinimized) {
|
||||||
|
rl.DrawText("[N] FLAG_WINDOW_MINIMIZED: on", 10, 160, 10, rl.Lime)
|
||||||
|
} else {
|
||||||
|
rl.DrawText("[N] FLAG_WINDOW_MINIMIZED: off", 10, 160, 10, rl.Maroon)
|
||||||
|
}
|
||||||
|
if rl.IsWindowState(rl.FlagWindowMaximized) {
|
||||||
|
rl.DrawText("[M] FLAG_WINDOW_MAXIMIZED: on", 10, 180, 10, rl.Lime)
|
||||||
|
} else {
|
||||||
|
rl.DrawText("[M] FLAG_WINDOW_MAXIMIZED: off", 10, 180, 10, rl.Maroon)
|
||||||
|
}
|
||||||
|
if rl.IsWindowState(rl.FlagWindowUnfocused) {
|
||||||
|
rl.DrawText("[G] FLAG_WINDOW_UNFOCUSED: on", 10, 200, 10, rl.Lime)
|
||||||
|
} else {
|
||||||
|
rl.DrawText("[U] FLAG_WINDOW_UNFOCUSED: off", 10, 200, 10, rl.Maroon)
|
||||||
|
}
|
||||||
|
if rl.IsWindowState(rl.FlagWindowTopmost) {
|
||||||
|
rl.DrawText("[T] FLAG_WINDOW_TOPMOST: on", 10, 220, 10, rl.Lime)
|
||||||
|
} else {
|
||||||
|
rl.DrawText("[T] FLAG_WINDOW_TOPMOST: off", 10, 220, 10, rl.Maroon)
|
||||||
|
}
|
||||||
|
if rl.IsWindowState(rl.FlagWindowAlwaysRun) {
|
||||||
|
rl.DrawText("[A] FLAG_WINDOW_ALWAYS_RUN: on", 10, 240, 10, rl.Lime)
|
||||||
|
} else {
|
||||||
|
rl.DrawText("[A] FLAG_WINDOW_ALWAYS_RUN: off", 10, 240, 10, rl.Maroon)
|
||||||
|
}
|
||||||
|
if rl.IsWindowState(rl.FlagVsyncHint) {
|
||||||
|
rl.DrawText("[V] FLAG_VSYNC_HINT: on", 10, 260, 10,
|
||||||
|
rl.Lime)
|
||||||
|
} else {
|
||||||
|
rl.DrawText("[V] FLAG_VSYNC_HINT: off", 10, 260, 10, rl.Maroon)
|
||||||
|
}
|
||||||
|
|
||||||
|
rl.DrawText("Following flags can only be set before window creation:", 10, 300, 10, rl.Gray)
|
||||||
|
if rl.IsWindowState(rl.FlagWindowHighdpi) {
|
||||||
|
rl.DrawText("FLAG_WINDOW_HIGHDPI: on", 10, 320, 10, rl.Lime)
|
||||||
|
} else {
|
||||||
|
rl.DrawText("FLAG_WINDOW_HIGHDPI: off", 10, 320, 10, rl.Maroon)
|
||||||
|
}
|
||||||
|
if rl.IsWindowState(rl.FlagWindowTransparent) {
|
||||||
|
rl.DrawText("FLAG_WINDOW_TRANSPARENT: on", 10, 340, 10, rl.Lime)
|
||||||
|
} else {
|
||||||
|
rl.DrawText("FLAG_WINDOW_TRANSPARENT: off", 10, 340, 10, rl.Maroon)
|
||||||
|
}
|
||||||
|
if rl.IsWindowState(rl.FlagMsaa4xHint) {
|
||||||
|
rl.DrawText("FLAG_MSAA_4X_HINT: on", 10, 360, 10, rl.Lime)
|
||||||
|
} else {
|
||||||
|
rl.DrawText("FLAG_MSAA_4X_HINT: off", 10, 360, 10, rl.Maroon)
|
||||||
|
}
|
||||||
|
|
||||||
|
rl.EndDrawing()
|
||||||
|
}
|
||||||
|
rl.CloseWindow()
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue