diff options
| author | ChrisDill <[email protected]> | 2019-07-28 10:12:13 +0100 |
|---|---|---|
| committer | Ray <[email protected]> | 2019-07-28 11:12:13 +0200 |
| commit | 879c874330e2946ca0dcce74a5dfbe852b4d1f4a (patch) | |
| tree | e2745d0c01ef19f825b9f5ecde352f8682fd7cb8 /examples/textures | |
| parent | 153f078bd135af4d947feaa35367c21f5ecdd854 (diff) | |
| download | raylib-879c874330e2946ca0dcce74a5dfbe852b4d1f4a.tar.gz raylib-879c874330e2946ca0dcce74a5dfbe852b4d1f4a.zip | |
Added scissor test and mouse painting examples proposed in #890 (#919)
- Updated Makefile with new examples
Diffstat (limited to 'examples/textures')
| -rw-r--r-- | examples/textures/textures_mouse_painting.c | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/examples/textures/textures_mouse_painting.c b/examples/textures/textures_mouse_painting.c new file mode 100644 index 00000000..401f102d --- /dev/null +++ b/examples/textures/textures_mouse_painting.c @@ -0,0 +1,136 @@ +/******************************************************************************************* +* +* raylib [textures] example - Mouse painting +* +* This example has been created using raylib 2.5 (www.raylib.com) +* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) +* +* Copyright (c) 2019 Chris Dill (@MysteriousSpace) +* +********************************************************************************************/ + +#include "raylib.h" + +#define MAX_COLORS_COUNT 21 // Number of colors available + +int main(void) +{ + // Initialization + //-------------------------------------------------------------------------------------- + const int screenWidth = 800; + const int screenHeight = 450; + + InitWindow(screenWidth, screenHeight, + "raylib [textures] example - texture painting"); + + // Different colours to choose from + Color colors[MAX_COLORS_COUNT] = { + DARKGRAY, MAROON, ORANGE, DARKGREEN, DARKBLUE, DARKPURPLE, DARKBROWN, + GRAY, RED, GOLD, LIME, BLUE, VIOLET, BROWN, + LIGHTGRAY, PINK, YELLOW, GREEN, SKYBLUE, PURPLE, BEIGE}; + + const char *colorNames[MAX_COLORS_COUNT] = { + "DARKGRAY", "MAROON", "ORANGE", "DARKGREEN", "DARKBLUE", "DARKPURPLE", + "DARKBROWN", "GRAY", "RED", "GOLD", "LIME", "BLUE", + "VIOLET", "BROWN", "LIGHTGRAY", "PINK", "YELLOW", "GREEN", + "SKYBLUE", "PURPLE", "BEIGE"}; + + int colorState = 0; + int brushSize = 20; + + // Create a RenderTexture2D to use as a canvas + RenderTexture2D target = LoadRenderTexture(screenWidth, screenHeight); + Color clearColor = RAYWHITE; + + BeginTextureMode(target); + ClearBackground(clearColor); + EndTextureMode(); + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second + //-------------------------------------------------------------------------------------- + + // Main game loop + while (!WindowShouldClose()) // Detect window close button or ESC key + { + // Update + //---------------------------------------------------------------------------------- + // Switch between colors + if (IsKeyPressed(KEY_RIGHT)) + colorState++; + else if (IsKeyPressed(KEY_LEFT)) + colorState--; + + if (colorState >= MAX_COLORS_COUNT) + colorState = 0; + else if (colorState < 0) + colorState = MAX_COLORS_COUNT - 1; + + brushSize += GetMouseWheelMove() * 5; + if (brushSize < 0) + brushSize = 0; + if (brushSize > 50) + brushSize = 50; + + Vector2 position = GetMousePosition(); + + if (IsKeyPressed(KEY_C)) { + BeginTextureMode(target); + ClearBackground(RAYWHITE); + EndTextureMode(); + } + + if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) { + TraceLog(LOG_INFO, "Painting x: %f y: %f", position.x, position.y); + BeginTextureMode(target); + DrawCircle(position.x, position.y, brushSize, colors[colorState]); + EndTextureMode(); + } + + if (IsMouseButtonDown(MOUSE_RIGHT_BUTTON)) { + TraceLog(LOG_INFO, "Erasing x: %f y: %f", position.x, position.y); + BeginTextureMode(target); + DrawCircle(position.x, position.y, brushSize, clearColor); + EndTextureMode(); + } + + if (IsKeyPressed(KEY_S)) { + TakeScreenshot("textures_mouse_painting.png"); + } + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + + ClearBackground(RAYWHITE); + + // NOTE: Render texture must be y-flipped due to default OpenGL coordinates + // (left-bottom) + DrawTextureRec(target.texture, (Rectangle){0, 0, target.texture.width, -target.texture.height}, (Vector2){0, 0}, WHITE); + + // Draw 2d shapes and text over drawn texture + DrawRectangle(0, 9, 380, 60, Fade(LIGHTGRAY, 0.7f)); + + DrawText("COLOR:", 10, 15, 20, BLACK); + DrawText(colorNames[colorState], 130, 15, 20, RED); + DrawText("< >", 340, 10, 30, DARKBLUE); + + DrawText("Size:", 10, 40, 20, BLACK); + DrawText(FormatText("%i", brushSize), 130, 40, 20, RED); + + DrawCircle(GetMouseX(), GetMouseY(), brushSize, colors[colorState]); + + DrawFPS(700, 15); + + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + UnloadRenderTexture(target); + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +} |
