const rl = @import("raylib"); const mouseScaleMarkSize = 12; pub fn main() anyerror!void { // Initialization //-------------------------------------------------------------------------------------- const screenWidth = 800; const screenHeight = 450; rl.initWindow(screenWidth, screenHeight, "raylib-zig [shapes] example - rectangle scaling mouse"); defer rl.closeWindow(); // Close window and OpenGL context var rec: rl.Rectangle = rl.Rectangle{ .x = 100, .y = 100, .width = 200, .height = 80 }; var mousePosition: rl.Vector2 = rl.Vector2{ .x = 0, .y = 0 }; var mouseScaleReady: bool = false; var mouseScaleMode: bool = false; rl.setTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop while (!rl.windowShouldClose()) { // Detect window close button or ESC key // Update //---------------------------------------------------------------------------------- mousePosition = rl.getMousePosition(); if (rl.checkCollisionPointRec(mousePosition, rl.Rectangle{ .x = (rec.x + rec.width) - mouseScaleMarkSize, .y = (rec.y + rec.height) - mouseScaleMarkSize, .width = mouseScaleMarkSize, .height = mouseScaleMarkSize })) { mouseScaleReady = true; if (rl.isMouseButtonPressed(.left)) { mouseScaleMode = true; } } else { mouseScaleReady = false; } if (mouseScaleMode) { mouseScaleReady = true; rec.width = (mousePosition.x - rec.x); rec.height = (mousePosition.y - rec.y); // Check minimum rec size if (rec.width < mouseScaleMarkSize) { rec.width = mouseScaleMarkSize; } if (rec.height < mouseScaleMarkSize) { rec.height = mouseScaleMarkSize; } // Check maximum rec size if (rec.width > (@as(f32, @floatFromInt(rl.getScreenWidth())) - rec.x)) { rec.width = @as(f32, @floatFromInt(rl.getScreenWidth())) - rec.x; } if (rec.height > (@as(f32, @floatFromInt(rl.getScreenHeight())) - rec.y)) { rec.height = @as(f32, @floatFromInt(rl.getScreenHeight())) - rec.y; } if (rl.isMouseButtonReleased(.left)) { mouseScaleMode = false; } } //---------------------------------------------------------------------------------- // Draw //---------------------------------------------------------------------------------- rl.beginDrawing(); defer rl.endDrawing(); rl.clearBackground(rl.Color.ray_white); rl.drawText("Scale rectangle dragging from bottom-right corner!", 10, 10, 20, rl.Color.gray); rl.drawRectangleRec(rec, rl.fade(rl.Color.green, 0.5)); if (mouseScaleReady) { rl.drawRectangleLinesEx(rec, 1, rl.Color.red); rl.drawTriangle(rl.Vector2{ .x = rec.x + rec.width - mouseScaleMarkSize, .y = rec.y + rec.height }, rl.Vector2{ .x = rec.x + rec.width, .y = rec.y + rec.height }, rl.Vector2{ .x = rec.x + rec.width, .y = rec.y + rec.height - mouseScaleMarkSize }, rl.Color.red); } //---------------------------------------------------------------------------------- } }