mirror of
				https://github.com/raysan5/raylib.git
				synced 2025-10-26 12:27:01 +00:00 
			
		
		
		
	[examples] Added shapes_lines_drawing (#5283)
				
					
				
			* Added shapes_lines_drawing Example * store result of clamp * conventions * fixed more brackets * buffer comments
This commit is contained in:
		
							
								
								
									
										146
									
								
								examples/shapes/shapes_lines_drawing.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										146
									
								
								examples/shapes/shapes_lines_drawing.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,146 @@ | |||||||
|  | /******************************************************************************************* | ||||||
|  | * | ||||||
|  | *   raylib [shapes] example - lines drawing | ||||||
|  | * | ||||||
|  | *   Example complexity rating: [★☆☆☆] 1/4 | ||||||
|  | * | ||||||
|  | *   Example originally created with raylib 5.6-dev, last time updated with raylib 5.6 | ||||||
|  | * | ||||||
|  | *   Example contributed by Robin (@RobinsAviary) 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-2025 Robin (@RobinsAviary) | ||||||
|  | * | ||||||
|  | ********************************************************************************************/ | ||||||
|  |  | ||||||
|  | #include "raylib.h" | ||||||
|  | #include "raymath.h" | ||||||
|  |  | ||||||
|  | //------------------------------------------------------------------------------------ | ||||||
|  | // Program main entry point | ||||||
|  | //------------------------------------------------------------------------------------ | ||||||
|  | int main(void) | ||||||
|  | { | ||||||
|  | 	// Initialization | ||||||
|  | 	//-------------------------------------------------------------------------------------- | ||||||
|  | 	const int screenWidth = 800; | ||||||
|  | 	const int screenHeight = 450; | ||||||
|  |  | ||||||
|  | 	InitWindow(screenWidth, screenHeight, "raylib [shapes] example - lines drawing"); | ||||||
|  |  | ||||||
|  | 	// Hint text that shows before you click the screen | ||||||
|  | 	bool startText = true; | ||||||
|  |  | ||||||
|  | 	// The mouse's position on the previous frame | ||||||
|  | 	Vector2 mousePositionPrevious = GetMousePosition(); | ||||||
|  |  | ||||||
|  | 	// The canvas to draw lines on | ||||||
|  | 	RenderTexture canvas = LoadRenderTexture(screenWidth, screenHeight); | ||||||
|  |  | ||||||
|  | 	// The background color of the canvas | ||||||
|  | 	const Color backgroundColor = RAYWHITE; | ||||||
|  |  | ||||||
|  | 	// The line's thickness | ||||||
|  | 	float lineThickness = 8.0f; | ||||||
|  | 	// The lines hue (in HSV, from 0-360) | ||||||
|  | 	float lineHue = 0.0f; | ||||||
|  |  | ||||||
|  | 	// Clear the canvas to the background color | ||||||
|  | 	BeginTextureMode(canvas); | ||||||
|  | 		ClearBackground(backgroundColor); | ||||||
|  | 	EndTextureMode(); | ||||||
|  | 	//-------------------------------------------------------------------------------------- | ||||||
|  |  | ||||||
|  | 	// Main game loop | ||||||
|  | 	while (!WindowShouldClose())    // Detect window close button or ESC key | ||||||
|  | 	{ | ||||||
|  | 		// Update | ||||||
|  | 		//---------------------------------------------------------------------------------- | ||||||
|  | 		// Disable the hint text once the user clicks | ||||||
|  | 		if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT) && startText) | ||||||
|  | 		{ | ||||||
|  | 			startText = false; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		// Clear the canvas when the user middle-clicks | ||||||
|  | 		if (IsMouseButtonPressed(MOUSE_BUTTON_MIDDLE)) | ||||||
|  | 		{ | ||||||
|  | 			BeginTextureMode(canvas); | ||||||
|  | 				ClearBackground(backgroundColor); | ||||||
|  | 			EndTextureMode(); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		// Store whether the left and right buttons are down | ||||||
|  | 		bool leftButtonDown = IsMouseButtonDown(MOUSE_BUTTON_LEFT); | ||||||
|  | 		bool rightButtonDown = IsMouseButtonDown(MOUSE_BUTTON_RIGHT); | ||||||
|  |  | ||||||
|  | 		if (leftButtonDown || rightButtonDown) | ||||||
|  | 		{ | ||||||
|  | 			// The color for the line | ||||||
|  | 			Color drawColor; | ||||||
|  |  | ||||||
|  | 			if (leftButtonDown) | ||||||
|  | 			{ | ||||||
|  | 				// Increase the hue value by the distance our cursor has moved since the last frame (divided by 3) | ||||||
|  | 				lineHue += Vector2Distance(mousePositionPrevious, GetMousePosition())/3.0f; | ||||||
|  |  | ||||||
|  | 				// While the hue is >=360, subtract it to bring it down into the range 0-360 | ||||||
|  | 				// This is more visually accurate than resetting to zero | ||||||
|  | 				while (lineHue >= 360.0f) | ||||||
|  | 				{ | ||||||
|  | 					lineHue -= 360.0f; | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				// Create the final color | ||||||
|  | 				drawColor = ColorFromHSV(lineHue, 1.0f, 1.0f); | ||||||
|  | 			} | ||||||
|  | 			else if (rightButtonDown)  | ||||||
|  | 			{ | ||||||
|  | 				// Use the background color as an "eraser" | ||||||
|  | 				drawColor = backgroundColor; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			// Draw the line onto the canvas | ||||||
|  | 			BeginTextureMode(canvas); | ||||||
|  | 				// Circles act as "caps", smoothing corners | ||||||
|  | 				DrawCircleV(mousePositionPrevious, lineThickness/2.0f, drawColor); | ||||||
|  | 				DrawCircleV(GetMousePosition(), lineThickness/2.0f, drawColor); | ||||||
|  | 				DrawLineEx(mousePositionPrevious, GetMousePosition(), lineThickness, drawColor); | ||||||
|  | 			EndTextureMode(); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		// Update line thickness based on mousewheel | ||||||
|  | 		lineThickness += GetMouseWheelMove(); | ||||||
|  | 		lineThickness = Clamp(lineThickness, 1.0, 500.0f); | ||||||
|  |  | ||||||
|  | 		// Update mouse's previous position | ||||||
|  | 		mousePositionPrevious = GetMousePosition(); | ||||||
|  | 		//---------------------------------------------------------------------------------- | ||||||
|  |  | ||||||
|  | 		// Draw | ||||||
|  | 		//---------------------------------------------------------------------------------- | ||||||
|  | 		BeginDrawing(); | ||||||
|  | 			// Draw the render texture to the screen, flipped vertically to make it appear top-side up | ||||||
|  | 			DrawTextureRec(canvas.texture, (Rectangle){ 0.0f, 0.0f, (float)canvas.texture.width,(float)-canvas.texture.height }, Vector2Zero(), WHITE); | ||||||
|  |  | ||||||
|  | 			// Draw the preview circle | ||||||
|  | 			if (!leftButtonDown) DrawCircleLinesV(GetMousePosition(), lineThickness/2.0f, (Color){ 127, 127, 127, 127 }); | ||||||
|  |  | ||||||
|  | 			// Draw the hint text | ||||||
|  | 			if (startText) DrawText("try clicking and dragging!", 275, 215, 20, LIGHTGRAY); | ||||||
|  | 		EndDrawing(); | ||||||
|  | 		//---------------------------------------------------------------------------------- | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	// De-Initialization | ||||||
|  | 	//-------------------------------------------------------------------------------------- | ||||||
|  | 	// Unload the canvas render texture | ||||||
|  | 	UnloadRenderTexture(canvas); | ||||||
|  |  | ||||||
|  | 	CloseWindow();        // Close window and OpenGL context | ||||||
|  | 	//-------------------------------------------------------------------------------------- | ||||||
|  |  | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
							
								
								
									
										
											BIN
										
									
								
								examples/shapes/shapes_lines_drawing.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								examples/shapes/shapes_lines_drawing.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 34 KiB | 
		Reference in New Issue
	
	Block a user
	 Robin ❤️
					Robin ❤️