yess gurl

This commit is contained in:
Vicente Ferrari Smith 2026-01-21 19:07:13 +01:00
parent f484350d39
commit 04837e4d53

View File

@ -368,6 +368,105 @@
// const c = @cImport({
// @cInclude("raylib.h");
// });
// //------------------------------------------------------------------------------------
// // Program main entry point
// //------------------------------------------------------------------------------------
// pub fn main() !void {
// // Initialization
// //--------------------------------------------------------------------------------------
// const screenWidth = 800;
// const screenHeight = 450;
// c.SetConfigFlags(c.FLAG_WINDOW_RESIZABLE | c.FLAG_WINDOW_HIGHDPI);
// c.InitWindow(screenWidth, screenHeight, "raylib [core] example - highdpi testbed");
// var scaleDpi = c.GetWindowScaleDPI();
// var mousePos = c.GetMousePosition();
// var currentMonitor = c.GetCurrentMonitor();
// var windowPos = c.GetWindowPosition();
// const gridSpacing = 40; // Grid spacing in pixels
// c.SetTargetFPS(60);
// //--------------------------------------------------------------------------------------
// // Main game loop
// while (!c.WindowShouldClose()) // Detect window close button or ESC key
// {
// // Update
// //----------------------------------------------------------------------------------
// mousePos = c.GetMousePosition();
// currentMonitor = c.GetCurrentMonitor();
// scaleDpi = c.GetWindowScaleDPI();
// windowPos = c.GetWindowPosition();
// if (c.IsKeyPressed(c.KEY_SPACE)) c.ToggleBorderlessWindowed();
// if (c.IsKeyPressed(c.KEY_F)) c.ToggleFullscreen();
// //----------------------------------------------------------------------------------
// // Draw
// //----------------------------------------------------------------------------------
// c.BeginDrawing();
// c.ClearBackground(c.RAYWHITE);
// // Draw grid
// const screen_h : usize = @intCast(c.GetScreenHeight());
// const spacing : usize = @intCast(gridSpacing);
// var limit = screen_h / spacing + 1;
// for (0..limit) |h| {
// const y : i32 = @intCast(h * gridSpacing);
// c.DrawText(c.TextFormat("%02i", y), 4, y - 4, 10, c.GRAY);
// c.DrawLine(24, y, c.GetScreenWidth(), y, c.LIGHTGRAY);
// }
// const screen_v : usize = @intCast(c.GetScreenWidth());
// limit = screen_v / spacing + 1;
// for (0..limit) |v| {
// const x : i32 = @intCast(v * gridSpacing);
// c.DrawText(c.TextFormat("%02i", x), x - 10, 4, 10, c.GRAY);
// c.DrawLine(x, 20, x, c.GetScreenHeight(), c.LIGHTGRAY);
// }
// // Draw UI info
// c.DrawText(c.TextFormat("CURRENT MONITOR: %i/%i (%ix%i)", currentMonitor + 1, c.GetMonitorCount(),
// c.GetMonitorWidth(currentMonitor), c.GetMonitorHeight(currentMonitor)), 50, 50, 20, c.DARKGRAY);
// c.DrawText(c.TextFormat("WINDOW POSITION: %ix%i", windowPos.x, windowPos.y), 50, 90, 20, c.DARKGRAY);
// c.DrawText(c.TextFormat("SCREEN SIZE: %ix%i", c.GetScreenWidth(), c.GetScreenHeight()), 50, 130, 20, c.DARKGRAY);
// c.DrawText(c.TextFormat("RENDER SIZE: %ix%i", c.GetRenderWidth(), c.GetRenderHeight()), 50, 170, 20, c.DARKGRAY);
// c.DrawText(c.TextFormat("SCALE FACTOR: %.1fx%.1f", scaleDpi.x, scaleDpi.y), 50, 210, 20, c.GRAY);
// // Draw reference rectangles, top-left and bottom-right corners
// c.DrawRectangle(0, 0, 30, 60, c.RED);
// c.DrawRectangle(c.GetScreenWidth() - 30, c.GetScreenHeight() - 60, 30, 60, c.BLUE);
// // Draw mouse position
// c.DrawCircleV(c.GetMousePosition(), 20, c.MAROON);
// c.DrawRectangle(@intFromFloat(mousePos.x - 25), @intFromFloat(mousePos.y), 50, 2, c.BLACK);
// c.DrawRectangle(@intFromFloat(mousePos.x), @intFromFloat(mousePos.y - 25), 2, 50, c.BLACK);
// c.DrawText(c.TextFormat("[%i,%i]", c.GetMouseX(), c.GetMouseY()), @intFromFloat(mousePos.x - 44),
// if (mousePos.y > @as(f32, @floatFromInt(c.GetScreenHeight())) - 60) @intFromFloat(mousePos.y - 46) else @intFromFloat(mousePos.y + 30), 20, c.BLACK);
// c.EndDrawing();
// //----------------------------------------------------------------------------------
// }
// // De-Initialization
// //--------------------------------------------------------------------------------------
// // TODO: Unload all loaded resources at this point
// c.CloseWindow(); // Close window and OpenGL context
// //--------------------------------------------------------------------------------------
// return;
// }
const c = @cImport({ const c = @cImport({
@cInclude("raylib.h"); @cInclude("raylib.h");
}); });
@ -375,23 +474,28 @@ const c = @cImport({
//------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------
// Program main entry point // Program main entry point
//------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------
pub fn main() !void { pub fn main() void {
// Initialization // Initialization
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------
const screenWidth = 800; const screenWidth = 800;
const screenHeight = 450; const screenHeight = 450;
c.SetConfigFlags(c.FLAG_WINDOW_RESIZABLE | c.FLAG_WINDOW_HIGHDPI); c.SetConfigFlags(c.FLAG_WINDOW_HIGHDPI | c.FLAG_WINDOW_RESIZABLE);
c.InitWindow(screenWidth, screenHeight, "raylib [core] example - highdpi testbed"); c.InitWindow(screenWidth, screenHeight, "raylib [core] example - highdpi demo");
c.SetWindowMinSize(450, 450);
var scaleDpi = c.GetWindowScaleDPI(); const logicalGridDescY = 120;
var mousePos = c.GetMousePosition(); const logicalGridLabelY = logicalGridDescY + 30;
var currentMonitor = c.GetCurrentMonitor(); const logicalGridTop = logicalGridLabelY + 30;
var windowPos = c.GetWindowPosition(); const logicalGridBottom = logicalGridTop + 80;
const pixelGridTop = logicalGridBottom - 20;
const pixelGridBottom = pixelGridTop + 80;
const pixelGridLabelY = pixelGridBottom + 30;
const pixelGridDescY = pixelGridLabelY + 30;
const cellSize = 50;
var cellSizePx : f32 = @floatFromInt(cellSize);
const gridSpacing = 40; // Grid spacing in pixels c.SetTargetFPS(60); // Set our game to run at 60 frames-per-second
c.SetTargetFPS(60);
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------
// Main game loop // Main game loop
@ -399,13 +503,15 @@ pub fn main() !void {
{ {
// Update // Update
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
mousePos = c.GetMousePosition(); const monitorCount = c.GetMonitorCount();
currentMonitor = c.GetCurrentMonitor();
scaleDpi = c.GetWindowScaleDPI();
windowPos = c.GetWindowPosition();
if (c.IsKeyPressed(c.KEY_SPACE)) c.ToggleBorderlessWindowed(); if ((monitorCount > 1) and c.IsKeyPressed(c.KEY_N)) {
if (c.IsKeyPressed(c.KEY_F)) c.ToggleFullscreen(); c.SetWindowMonitor(@mod((c.GetCurrentMonitor() + 1), monitorCount));
}
const currentMonitor = c.GetCurrentMonitor();
const dpiScale = c.GetWindowScaleDPI();
cellSizePx = (@as(f32, @floatFromInt(cellSize)))/dpiScale.x;
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
// Draw // Draw
@ -414,43 +520,50 @@ pub fn main() !void {
c.ClearBackground(c.RAYWHITE); c.ClearBackground(c.RAYWHITE);
// Draw grid const windowCenter = @divFloor(c.GetScreenWidth(), 2);
const screen_h : usize = @intCast(c.GetScreenHeight()); DrawTextCenter(c.TextFormat("Dpi Scale: %f", dpiScale.x), windowCenter, 30, 40, c.DARKGRAY);
const spacing : usize = @intCast(gridSpacing); DrawTextCenter(c.TextFormat("Monitor: %d/%d ([N] next monitor)", currentMonitor+1, monitorCount), windowCenter, 70, 20, c.LIGHTGRAY);
DrawTextCenter(c.TextFormat("Window is %d \"logical points\" wide", c.GetScreenWidth()), windowCenter, logicalGridDescY, 20, c.ORANGE);
var limit = screen_h / spacing + 1; var odd = true;
for (0..limit) |h| { var i : i32 = cellSize;
const y : i32 = @intCast(h * gridSpacing); while (i < c.GetScreenWidth()) {
c.DrawText(c.TextFormat("%02i", y), 4, y - 4, 10, c.GRAY); // for (int i = cellSize; i < GetScreenWidth(); i += cellSize, odd = !odd) {
c.DrawLine(24, y, c.GetScreenWidth(), y, c.LIGHTGRAY); if (odd) c.DrawRectangle(i, logicalGridTop, cellSize, logicalGridBottom-logicalGridTop, c.ORANGE);
}
const screen_v : usize = @intCast(c.GetScreenWidth());
limit = screen_v / spacing + 1; DrawTextCenter(c.TextFormat("%d", i), i, logicalGridLabelY, 10, c.LIGHTGRAY);
for (0..limit) |v| { c.DrawLine(i, logicalGridLabelY + 10, i, logicalGridBottom, c.GRAY);
const x : i32 = @intCast(v * gridSpacing);
c.DrawText(c.TextFormat("%02i", x), x - 10, 4, 10, c.GRAY); i += cellSize;
c.DrawLine(x, 20, x, c.GetScreenHeight(), c.LIGHTGRAY); odd = !odd;
} }
// Draw UI info odd = true;
c.DrawText(c.TextFormat("CURRENT MONITOR: %i/%i (%ix%i)", currentMonitor + 1, c.GetMonitorCount(), const minTextSpace = 30;
c.GetMonitorWidth(currentMonitor), c.GetMonitorHeight(currentMonitor)), 50, 50, 20, c.DARKGRAY); var lastTextX : i32 = -minTextSpace;
c.DrawText(c.TextFormat("WINDOW POSITION: %ix%i", windowPos.x, windowPos.y), 50, 90, 20, c.DARKGRAY); i = cellSize;
c.DrawText(c.TextFormat("SCREEN SIZE: %ix%i", c.GetScreenWidth(), c.GetScreenHeight()), 50, 130, 20, c.DARKGRAY); while (i < c.GetRenderWidth()) {
c.DrawText(c.TextFormat("RENDER SIZE: %ix%i", c.GetRenderWidth(), c.GetRenderHeight()), 50, 170, 20, c.DARKGRAY); // for (int i = cellSize; i < GetRenderWidth(); i += cellSize, odd = !odd) {
c.DrawText(c.TextFormat("SCALE FACTOR: %.1fx%.1f", scaleDpi.x, scaleDpi.y), 50, 210, 20, c.GRAY); const x : i32 = @intFromFloat(@as(f32, @floatFromInt(i)) / dpiScale.x);
if (odd) c.DrawRectangle(x, pixelGridTop, @intFromFloat(cellSizePx), pixelGridBottom - pixelGridTop, c.Color{ .r = 0, .g = 121, .b = 241, .a = 100 });
// Draw reference rectangles, top-left and bottom-right corners c.DrawLine(x, pixelGridTop, @intFromFloat(@as(f32, @floatFromInt(i)) / dpiScale.x), pixelGridLabelY - 10, c.GRAY);
c.DrawRectangle(0, 0, 30, 60, c.RED);
c.DrawRectangle(c.GetScreenWidth() - 30, c.GetScreenHeight() - 60, 30, 60, c.BLUE);
// Draw mouse position if ((x - lastTextX) >= minTextSpace)
c.DrawCircleV(c.GetMousePosition(), 20, c.MAROON); {
c.DrawRectangle(@intFromFloat(mousePos.x - 25), @intFromFloat(mousePos.y), 50, 2, c.BLACK); DrawTextCenter(c.TextFormat("%d", i), x, pixelGridLabelY, 10, c.LIGHTGRAY);
c.DrawRectangle(@intFromFloat(mousePos.x), @intFromFloat(mousePos.y - 25), 2, 50, c.BLACK); lastTextX = x;
c.DrawText(c.TextFormat("[%i,%i]", c.GetMouseX(), c.GetMouseY()), @intFromFloat(mousePos.x - 44), }
if (mousePos.y > @as(f32, @floatFromInt(c.GetScreenHeight())) - 60) @intFromFloat(mousePos.y - 46) else @intFromFloat(mousePos.y + 30), 20, c.BLACK); i += cellSize;
odd = !odd;
}
DrawTextCenter(c.TextFormat("Window is %d \"physical pixels\" wide", c.GetRenderWidth()), windowCenter, pixelGridDescY, 20, c.BLUE);
const text = "Can you see this?";
const size = c.MeasureTextEx(c.GetFontDefault(), text, 20, 3);
const pos = c.Vector2{ .x = @as(f32, @floatFromInt(c.GetScreenWidth())) - size.x - 5, .y = @as(f32, @floatFromInt(c.GetScreenHeight())) - size.y - 5 };
c.DrawTextEx(c.GetFontDefault(), text, pos, 20, 3, c.LIGHTGRAY);
c.EndDrawing(); c.EndDrawing();
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
@ -458,11 +571,16 @@ pub fn main() !void {
// De-Initialization // De-Initialization
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------
// TODO: Unload all loaded resources at this point
c.CloseWindow(); // Close window and OpenGL context c.CloseWindow(); // Close window and OpenGL context
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------
}
return;
//------------------------------------------------------------------------------------
// Module Functions Definition
//------------------------------------------------------------------------------------
fn DrawTextCenter(text : [*:0]const u8, x : i32, y: i32, fontSize : i32, color: c.Color) void {
// fn DrawTextCenter(const char *text, int x, int y, int fontSize, Color color) void {
const size = c.MeasureTextEx(c.GetFontDefault(), text, @floatFromInt(fontSize), 3);
const pos = c.Vector2{ .x = @as(f32, @floatFromInt(x)) - size.x/2, .y = @as(f32, @floatFromInt(y)) - size.y/2 };
c.DrawTextEx(c.GetFontDefault(), text, pos, @as(f32, @floatFromInt(fontSize)), 3, color);
} }