mirror of
https://github.com/raylib-cs/raylib-cs
synced 2025-04-03 11:09:40 -04:00
277 lines
8.8 KiB
C#
277 lines
8.8 KiB
C#
/*******************************************************************************************
|
|
*
|
|
* raylib [core] example - window flags
|
|
*
|
|
* This example has been created using raylib 3.5 (www.raylib.com)
|
|
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
|
*
|
|
* Copyright (c) 2020 Ramon Santamaria (@raysan5)
|
|
*
|
|
********************************************************************************************/
|
|
|
|
using System.Numerics;
|
|
using static Raylib_cs.Raylib;
|
|
using static Raylib_cs.ConfigFlags;
|
|
|
|
namespace Examples.Core;
|
|
|
|
public class WindowFlags
|
|
{
|
|
public static int Main()
|
|
{
|
|
// Initialization
|
|
//---------------------------------------------------------
|
|
const int screenWidth = 800;
|
|
const int 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
|
|
*/
|
|
|
|
// Set configuration flags for window creation
|
|
SetConfigFlags(VSyncHint | Msaa4xHint);
|
|
InitWindow(screenWidth, screenHeight, "raylib [core] example - window flags");
|
|
|
|
Vector2 ballPosition = new(GetScreenWidth() / 2, GetScreenHeight() / 2);
|
|
Vector2 ballSpeed = new(5.0f, 4.0f);
|
|
int ballRadius = 20;
|
|
|
|
int framesCounter = 0;
|
|
//----------------------------------------------------------
|
|
|
|
// Main game loop
|
|
while (!WindowShouldClose())
|
|
{
|
|
// Update
|
|
//-----------------------------------------------------
|
|
if (IsKeyPressed(KeyboardKey.F))
|
|
{
|
|
// modifies window size when scaling!
|
|
ToggleFullscreen();
|
|
}
|
|
|
|
if (IsKeyPressed(KeyboardKey.R))
|
|
{
|
|
if (IsWindowState(ResizableWindow))
|
|
{
|
|
ClearWindowState(ResizableWindow);
|
|
}
|
|
else
|
|
{
|
|
SetWindowState(ResizableWindow);
|
|
}
|
|
}
|
|
|
|
if (IsKeyPressed(KeyboardKey.D))
|
|
{
|
|
if (IsWindowState(UndecoratedWindow))
|
|
{
|
|
ClearWindowState(UndecoratedWindow);
|
|
}
|
|
else
|
|
{
|
|
SetWindowState(UndecoratedWindow);
|
|
}
|
|
}
|
|
|
|
if (IsKeyPressed(KeyboardKey.H))
|
|
{
|
|
if (!IsWindowState(HiddenWindow))
|
|
{
|
|
SetWindowState(HiddenWindow);
|
|
}
|
|
|
|
framesCounter = 0;
|
|
}
|
|
|
|
if (IsWindowState(HiddenWindow))
|
|
{
|
|
framesCounter++;
|
|
if (framesCounter >= 240)
|
|
{
|
|
// Show window after 3 seconds
|
|
ClearWindowState(HiddenWindow);
|
|
}
|
|
}
|
|
|
|
if (IsKeyPressed(KeyboardKey.N))
|
|
{
|
|
if (!IsWindowState(MinimizedWindow))
|
|
{
|
|
MinimizeWindow();
|
|
}
|
|
|
|
framesCounter = 0;
|
|
}
|
|
|
|
if (IsWindowState(MinimizedWindow))
|
|
{
|
|
framesCounter++;
|
|
if (framesCounter >= 240)
|
|
{
|
|
// Restore window after 3 seconds
|
|
RestoreWindow();
|
|
}
|
|
}
|
|
|
|
if (IsKeyPressed(KeyboardKey.M))
|
|
{
|
|
// NOTE: Requires FLAG_WINDOW_RESIZABLE enabled!
|
|
if (IsWindowState(MaximizedWindow))
|
|
{
|
|
RestoreWindow();
|
|
}
|
|
else
|
|
{
|
|
MaximizeWindow();
|
|
}
|
|
}
|
|
|
|
if (IsKeyPressed(KeyboardKey.U))
|
|
{
|
|
if (IsWindowState(UnfocusedWindow))
|
|
{
|
|
ClearWindowState(UnfocusedWindow);
|
|
}
|
|
else
|
|
{
|
|
SetWindowState(UnfocusedWindow);
|
|
}
|
|
}
|
|
|
|
if (IsKeyPressed(KeyboardKey.T))
|
|
{
|
|
if (IsWindowState(TopmostWindow))
|
|
{
|
|
ClearWindowState(TopmostWindow);
|
|
}
|
|
else
|
|
{
|
|
SetWindowState(TopmostWindow);
|
|
}
|
|
}
|
|
|
|
if (IsKeyPressed(KeyboardKey.A))
|
|
{
|
|
if (IsWindowState(AlwaysRunWindow))
|
|
{
|
|
ClearWindowState(AlwaysRunWindow);
|
|
}
|
|
else
|
|
{
|
|
SetWindowState(AlwaysRunWindow);
|
|
}
|
|
}
|
|
|
|
if (IsKeyPressed(KeyboardKey.V))
|
|
{
|
|
if (IsWindowState(VSyncHint))
|
|
{
|
|
ClearWindowState(VSyncHint);
|
|
}
|
|
else
|
|
{
|
|
SetWindowState(VSyncHint);
|
|
}
|
|
}
|
|
|
|
// Bouncing ball logic
|
|
ballPosition.X += ballSpeed.X;
|
|
ballPosition.Y += ballSpeed.Y;
|
|
if ((ballPosition.X >= (GetScreenWidth() - ballRadius)) || (ballPosition.X <= ballRadius))
|
|
{
|
|
ballSpeed.X *= -1.0f;
|
|
}
|
|
if ((ballPosition.Y >= (GetScreenHeight() - ballRadius)) || (ballPosition.Y <= ballRadius))
|
|
{
|
|
ballSpeed.Y *= -1.0f;
|
|
}
|
|
//-----------------------------------------------------
|
|
|
|
// Draw
|
|
//-----------------------------------------------------
|
|
BeginDrawing();
|
|
|
|
if (IsWindowState(TransparentWindow))
|
|
{
|
|
ClearBackground(Color.Blank);
|
|
}
|
|
else
|
|
{
|
|
ClearBackground(Color.RayWhite);
|
|
}
|
|
|
|
DrawCircleV(ballPosition, ballRadius, Color.Maroon);
|
|
DrawRectangleLinesEx(new Rectangle(0, 0, GetScreenWidth(), GetScreenHeight()), 4, Color.RayWhite);
|
|
|
|
DrawCircleV(GetMousePosition(), 10, Color.DarkBlue);
|
|
|
|
DrawFPS(10, 10);
|
|
|
|
DrawText($"Screen Size: [{GetScreenWidth()}, {GetScreenHeight()}]", 10, 40, 10, Color.Green);
|
|
|
|
// Draw window state info
|
|
Color on = Color.Lime;
|
|
Color off = Color.Maroon;
|
|
|
|
DrawText("Following flags can be set after window creation:", 10, 60, 10, Color.Gray);
|
|
|
|
DrawWindowState(FullscreenMode, "[F] FLAG_FULLSCREEN_MODE: ", 10, 80, 10);
|
|
DrawWindowState(ResizableWindow, "[R] FLAG_WINDOW_RESIZABLE: ", 10, 100, 10);
|
|
DrawWindowState(UndecoratedWindow, "[D] FLAG_WINDOW_UNDECORATED: ", 10, 120, 10);
|
|
DrawWindowState(HiddenWindow, "[H] FLAG_WINDOW_HIDDEN: ", 10, 140, 10);
|
|
DrawWindowState(MinimizedWindow, "[N] FLAG_WINDOW_MINIMIZED: ", 10, 160, 10);
|
|
DrawWindowState(MaximizedWindow, "[M] FLAG_WINDOW_MAXIMIZED: ", 10, 180, 10);
|
|
DrawWindowState(UnfocusedWindow, "[G] FLAG_WINDOW_UNFOCUSED: ", 10, 200, 10);
|
|
DrawWindowState(TopmostWindow, "[T] FLAG_WINDOW_TOPMOST: ", 10, 220, 10);
|
|
DrawWindowState(AlwaysRunWindow, "[A] FLAG_WINDOW_ALWAYS_RUN: ", 10, 240, 10);
|
|
DrawWindowState(VSyncHint, "[V] FLAG_VSYNC_HINT: ", 10, 260, 10);
|
|
|
|
DrawText("Following flags can only be set before window creation:", 10, 300, 10, Color.Gray);
|
|
|
|
DrawWindowState(HighDpiWindow, "[F] FLAG_WINDOW_HIGHDPI: ", 10, 320, 10);
|
|
DrawWindowState(TransparentWindow, "[F] FLAG_WINDOW_TRANSPARENT: ", 10, 340, 10);
|
|
DrawWindowState(Msaa4xHint, "[F] FLAG_MSAA_4X_HINT: ", 10, 360, 10);
|
|
|
|
EndDrawing();
|
|
//-----------------------------------------------------
|
|
}
|
|
|
|
// De-Initialization
|
|
//---------------------------------------------------------
|
|
CloseWindow();
|
|
//----------------------------------------------------------
|
|
|
|
return 0;
|
|
}
|
|
|
|
static void DrawWindowState(ConfigFlags flag, string text, int posX, int posY, int fontSize)
|
|
{
|
|
Color onColor = Color.Lime;
|
|
Color offColor = Color.Maroon;
|
|
|
|
if (Raylib.IsWindowState(flag))
|
|
{
|
|
DrawText($"{text} on", posX, posY, fontSize, onColor);
|
|
}
|
|
else
|
|
{
|
|
DrawText($"{text} off", posX, posY, fontSize, offColor);
|
|
}
|
|
}
|
|
}
|
|
|