145 lines
5.4 KiB
C#
145 lines
5.4 KiB
C#
/*******************************************************************************************
|
|
*
|
|
* raylib [core] example - highdpi testbed
|
|
*
|
|
* Example complexity rating: [★☆☆☆] 1/4
|
|
*
|
|
* Example originally created with raylib 6.0, last time updated with raylib 6.0
|
|
*
|
|
* Example contributed by Ramon Santamaria (@raysan5) and reviewed by Ramon Santamaria (@raysan5)
|
|
*
|
|
* 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) 2025 Ramon Santamaria (@raysan5)
|
|
*
|
|
********************************************************************************************/
|
|
|
|
using System;
|
|
using System.Numerics;
|
|
using static Raylib_cs.Raylib;
|
|
|
|
namespace Examples.Core;
|
|
|
|
[ExcludeFromBrowser("fullscreen/borderless/monitor APIs are meaningless on the fixed wasm canvas")]
|
|
public partial class HighDpiTestbed : IExample
|
|
{
|
|
private const int screenWidth = 800;
|
|
private const int screenHeight = 450;
|
|
|
|
public string Name => "Core / High DPI Testbed";
|
|
|
|
public string Title => "raylib [core] example - highdpi testbed";
|
|
|
|
public ConfigFlags ConfigFlags => ConfigFlags.ResizableWindow | ConfigFlags.HighDpiWindow;
|
|
|
|
private Vector2 scaleDpi;
|
|
private Vector2 mousePos;
|
|
private int currentMonitor;
|
|
private Vector2 windowPos;
|
|
|
|
private int gridSpacing; // Grid spacing in pixels
|
|
|
|
public void Init()
|
|
{
|
|
scaleDpi = GetWindowScaleDPI();
|
|
mousePos = GetMousePosition();
|
|
currentMonitor = GetCurrentMonitor();
|
|
windowPos = GetWindowPosition();
|
|
|
|
gridSpacing = 40;
|
|
}
|
|
|
|
public void Update()
|
|
{
|
|
// Update
|
|
//----------------------------------------------------------------------------------
|
|
mousePos = GetMousePosition();
|
|
currentMonitor = GetCurrentMonitor();
|
|
scaleDpi = GetWindowScaleDPI();
|
|
windowPos = GetWindowPosition();
|
|
|
|
if (IsKeyPressed(KeyboardKey.Space))
|
|
{
|
|
ToggleBorderlessWindowed();
|
|
}
|
|
if (IsKeyPressed(KeyboardKey.F))
|
|
{
|
|
ToggleFullscreen();
|
|
}
|
|
//----------------------------------------------------------------------------------
|
|
|
|
// Draw
|
|
//----------------------------------------------------------------------------------
|
|
BeginDrawing();
|
|
|
|
ClearBackground(Color.RayWhite);
|
|
|
|
// Draw grid
|
|
for (int h = 0; h < GetScreenHeight() / gridSpacing + 1; h++)
|
|
{
|
|
DrawText($"{h * gridSpacing:D2}", 4, h * gridSpacing - 4, 10, Color.Gray);
|
|
DrawLine(24, h * gridSpacing, GetScreenWidth(), h * gridSpacing, Color.LightGray);
|
|
}
|
|
for (int v = 0; v < GetScreenWidth() / gridSpacing + 1; v++)
|
|
{
|
|
DrawText($"{v * gridSpacing:D2}", v * gridSpacing - 10, 4, 10, Color.Gray);
|
|
DrawLine(v * gridSpacing, 20, v * gridSpacing, GetScreenHeight(), Color.LightGray);
|
|
}
|
|
|
|
// Draw UI info
|
|
DrawText($"CURRENT MONITOR: {currentMonitor + 1}/{GetMonitorCount()} ({GetMonitorWidth(currentMonitor)}x{GetMonitorHeight(currentMonitor)})", 50, 50, 20, Color.DarkGray);
|
|
DrawText($"WINDOW POSITION: {(int)windowPos.X}x{(int)windowPos.Y}", 50, 90, 20, Color.DarkGray);
|
|
DrawText($"SCREEN SIZE: {GetScreenWidth()}x{GetScreenHeight()}", 50, 130, 20, Color.DarkGray);
|
|
DrawText($"RENDER SIZE: {GetRenderWidth()}x{GetRenderHeight()}", 50, 170, 20, Color.DarkGray);
|
|
DrawText($"SCALE FACTOR: {scaleDpi.X:F2}x{scaleDpi.Y:F2}", 50, 210, 20, Color.Gray);
|
|
|
|
// Draw reference rectangles, top-left and bottom-right corners
|
|
DrawRectangle(0, 0, 30, 60, Color.Red);
|
|
DrawRectangle(GetScreenWidth() - 30, GetScreenHeight() - 60, 30, 60, Color.Blue);
|
|
|
|
// Draw mouse position
|
|
DrawCircleV(GetMousePosition(), 20, Color.Maroon);
|
|
DrawRectangleRec(new Rectangle(mousePos.X - 25, mousePos.Y, 50, 2), Color.Black);
|
|
DrawRectangleRec(new Rectangle(mousePos.X, mousePos.Y - 25, 2, 50), Color.Black);
|
|
DrawText($"[{GetMouseX()},{GetMouseY()}]", (int)mousePos.X - 44,
|
|
(mousePos.Y > GetScreenHeight() - 60) ? (int)mousePos.Y - 46 : (int)mousePos.Y + 30, 20, Color.Black);
|
|
|
|
EndDrawing();
|
|
//----------------------------------------------------------------------------------
|
|
}
|
|
|
|
public void Unload()
|
|
{
|
|
// TODO: Unload all loaded resources at this point
|
|
}
|
|
|
|
public static int Main()
|
|
{
|
|
// Initialization
|
|
//--------------------------------------------------------------------------------------
|
|
SetConfigFlags(ConfigFlags.ResizableWindow | ConfigFlags.HighDpiWindow);
|
|
InitWindow(screenWidth, screenHeight, "raylib [core] example - highdpi testbed");
|
|
|
|
SetTargetFPS(60);
|
|
//--------------------------------------------------------------------------------------
|
|
|
|
var game = new HighDpiTestbed();
|
|
game.Init();
|
|
|
|
// Main game loop
|
|
while (!WindowShouldClose()) // Detect window close button or ESC key
|
|
{
|
|
game.Update();
|
|
}
|
|
|
|
game.Unload();
|
|
|
|
// De-Initialization
|
|
//--------------------------------------------------------------------------------------
|
|
CloseWindow(); // Close window and OpenGL context
|
|
//--------------------------------------------------------------------------------------
|
|
|
|
return 0;
|
|
}
|
|
}
|