diff --git a/examples/shapes/rectangle_scaling.zig b/examples/shapes/rectangle_scaling.zig new file mode 100644 index 0000000..e67c51f --- /dev/null +++ b/examples/shapes/rectangle_scaling.zig @@ -0,0 +1,83 @@ +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); + } + //---------------------------------------------------------------------------------- + } +}