diff --git a/examples/Makefile b/examples/Makefile index 7c943c121..89f0ea8b6 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -518,7 +518,7 @@ CORE = \ core/core_high_dpi \ core/core_input_gamepad \ core/core_input_gestures \ - core/core_input_gestures_web \ + core/core_input_gestures_testbed \ core/core_input_keys \ core/core_input_mouse \ core/core_input_mouse_wheel \ diff --git a/examples/Makefile.Web b/examples/Makefile.Web index d5601b86c..20a67b7ca 100644 --- a/examples/Makefile.Web +++ b/examples/Makefile.Web @@ -518,7 +518,7 @@ CORE = \ core/core_high_dpi \ core/core_input_gamepad \ core/core_input_gestures \ - core/core_input_gestures_web \ + core/core_input_gestures_testbed \ core/core_input_keys \ core/core_input_mouse \ core/core_input_mouse_wheel \ @@ -737,7 +737,7 @@ core/core_input_gamepad: core/core_input_gamepad.c core/core_input_gestures: core/core_input_gestures.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) -core/core_input_gestures_web: core/core_input_gestures_web.c +core/core_input_gestures_testbed: core/core_input_gestures_testbed.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) core/core_input_keys: core/core_input_keys.c diff --git a/examples/README.md b/examples/README.md index b406ad2d7..3be3479a5 100644 --- a/examples/README.md +++ b/examples/README.md @@ -56,7 +56,7 @@ Examples using raylib[core](../src/rcore.c) platform functionality like window c | [core_custom_frame_control](core/core_custom_frame_control.c) | core_custom_frame_control | ⭐⭐⭐⭐️ | 4.0 | 4.0 | [Ramon Santamaria](https://github.com/raysan5) | | [core_smooth_pixelperfect](core/core_smooth_pixelperfect.c) | core_smooth_pixelperfect | ⭐⭐⭐☆ | 3.7 | 4.0 | [Giancamillo Alessandroni](https://github.com/NotManyIdeasDev) | | [core_random_sequence](core/core_random_sequence.c) | core_random_sequence | ⭐☆☆☆ | 5.0 | 5.0 | [Dalton Overmyer](https://github.com/REDl3east) | -| [core_input_gestures_web](core/core_input_gestures_web.c) | core_input_gestures_web | ⭐⭐☆☆ | 4.6 | 4.6 | [ubkp](https://github.com/ubkp) | +| [core_input_gestures_testbed](core/core_input_gestures_testbed.c) | core_input_gestures_testbed | ⭐⭐☆☆ | 4.6 | 4.6 | [ubkp](https://github.com/ubkp) | | [core_automation_events](core/core_automation_events.c) | core_automation_events | ⭐⭐⭐☆ | 5.0 | 5.0 | [Ramon Santamaria](https://github.com/raysan5) | | [core_high_dpi](core/core_high_dpi.c) | core_high_dpi | ⭐☆☆☆ | 5.0 | 5.0 | [Jonathan Marler](https://github.com/marler8997) | diff --git a/examples/core/core_input_gestures_web.c b/examples/core/core_input_gestures_testbed.c similarity index 76% rename from examples/core/core_input_gestures_web.c rename to examples/core/core_input_gestures_testbed.c index 743639ea0..b0ec53b7f 100644 --- a/examples/core/core_input_gestures_web.c +++ b/examples/core/core_input_gestures_testbed.c @@ -17,91 +17,97 @@ #include "raylib.h" -#include "math.h" // Required for the protractor angle graphic drawing +#include // Required for the protractor angle graphic drawing #if defined(PLATFORM_WEB) #include // Required for the Web/HTML5 #endif -//-------------------------------------------------------------------------------------- -// Global definitions and declarations -//-------------------------------------------------------------------------------------- +#define GESTURE_LOG_SIZE 20 +#define MAX_TOUCH_COUNT 32 -// Common variables definitions //-------------------------------------------------------------------------------------- -int screenWidth = 800; // Update depending on web canvas -const int screenHeight = 450; -Vector2 messagePosition = { 160, 7 }; +// Global Variables Definition +//-------------------------------------------------------------------------------------- +static int screenWidth = 800; // Update depending on web canvas +static const int screenHeight = 450; +static Vector2 messagePosition = { 160, 7 }; // Last gesture variables definitions -//-------------------------------------------------------------------------------------- -int lastGesture = 0; -Vector2 lastGesturePosition = { 165, 130 }; +static int lastGesture = 0; +static Vector2 lastGesturePosition = { 165, 130 }; -// Gesture log variables definitions and functions declarations -//-------------------------------------------------------------------------------------- -#define GESTURE_LOG_SIZE 20 -char gestureLog[GESTURE_LOG_SIZE][12] = { "" }; // The gesture log uses an array (as an inverted circular queue) to store the performed gestures -int gestureLogIndex = GESTURE_LOG_SIZE; // The index for the inverted circular queue (moving from last to first direction, then looping around) -int previousGesture = 0; +// Gesture log variables definitions +// NOTE: The gesture log uses an array (as an inverted circular queue) to store the performed gestures +static char gestureLog[GESTURE_LOG_SIZE][12] = { "" }; +// NOTE: The index for the inverted circular queue (moving from last to first direction, then looping around) +static int gestureLogIndex = GESTURE_LOG_SIZE; +static int previousGesture = 0; -char const *GetGestureName(int i) -{ - switch (i) { - case 0: return "None"; break; - case 1: return "Tap"; break; - case 2: return "Double Tap"; break; - case 4: return "Hold"; break; - case 8: return "Drag"; break; - case 16: return "Swipe Right"; break; - case 32: return "Swipe Left"; break; - case 64: return "Swipe Up"; break; - case 128: return "Swipe Down"; break; - case 256: return "Pinch In"; break; - case 512: return "Pinch Out"; break; - default: return "Unknown"; break; - } -} +// Log mode values: +// - 0 shows repeated events +// - 1 hides repeated events +// - 2 shows repeated events but hide hold events +// - 3 hides repeated events and hide hold events +static int logMode = 1; -Color GetGestureColor(int i) -{ - switch (i) { - case 0: return BLACK; break; - case 1: return BLUE; break; - case 2: return SKYBLUE; break; - case 4: return BLACK; break; - case 8: return LIME; break; - case 16: return RED; break; - case 32: return RED; break; - case 64: return RED; break; - case 128: return RED; break; - case 256: return VIOLET; break; - case 512: return ORANGE; break; - default: return BLACK; break; - } -} - -int logMode = 1; // Log mode values: 0 shows repeated events; 1 hides repeated events; 2 shows repeated events but hide hold events; 3 hides repeated events and hide hold events - -Color gestureColor = { 0, 0, 0, 255 }; -Rectangle logButton1 = { 53, 7, 48, 26 }; -Rectangle logButton2 = { 108, 7, 36, 26 }; -Vector2 gestureLogPosition = { 10, 10 }; +static Color gestureColor = { 0, 0, 0, 255 }; +static Rectangle logButton1 = { 53, 7, 48, 26 }; +static Rectangle logButton2 = { 108, 7, 36, 26 }; +static Vector2 gestureLogPosition = { 10, 10 }; // Protractor variables definitions -//-------------------------------------------------------------------------------------- -float angleLength = 90.0f; -float currentAngleDegrees = 0.0f; -Vector2 finalVector = { 0.0f, 0.0f }; -char currentAngleStr[7] = ""; -Vector2 protractorPosition = { 266.0f, 315.0f }; +static float angleLength = 90.0f; +static float currentAngleDegrees = 0.0f; +static Vector2 finalVector = { 0.0f, 0.0f }; +static char currentAngleStr[7] = ""; +static Vector2 protractorPosition = { 266.0f, 315.0f }; -// Update -//-------------------------------------------------------------------------------------- -void Update(void) +//---------------------------------------------------------------------------------- +// Module Functions Declaration +//---------------------------------------------------------------------------------- +static void UpdateDrawFrame(void); // Update and Draw one frame +static char const *GetGestureName(int i); +static Color GetGestureColor(int i); + +//------------------------------------------------------------------------------------ +// Program main entry point +//------------------------------------------------------------------------------------ +int main(void) { - // Handle common + // Initialization //-------------------------------------------------------------------------------------- + InitWindow(screenWidth, screenHeight, "raylib [core] example - input gestures testbed"); + +#if defined(PLATFORM_WEB) + emscripten_set_main_loop(UpdateDrawFrame, 0, 1); +#else + SetTargetFPS(60); // Set our game to run at 60 frames-per-second + //-------------------------------------------------------------------------------------- + + // Main game loop + while (!WindowShouldClose()) // Detect window close button or ESC key + { + UpdateDrawFrame(); + } +#endif + + // De-Initialization + //-------------------------------------------------------------------------------------- + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +} + +//---------------------------------------------------------------------------------- +// Module Functions Definition +//---------------------------------------------------------------------------------- +static void UpdateDrawFrame(void) +{ + // Update + //-------------------------------------------------------------------------------------- + // Handle common gestures data int i, ii; // Iterators that will be reused by all for loops const int currentGesture = GetGestureDetected(); const float currentDragDegrees = GetGestureDragAngle(); @@ -109,11 +115,10 @@ void Update(void) const int touchCount = GetTouchPointCount(); // Handle last gesture - //-------------------------------------------------------------------------------------- - if ((currentGesture != 0) && (currentGesture != 4) && (currentGesture != previousGesture)) lastGesture = currentGesture; // Filter the meaningful gestures (1, 2, 8 to 512) for the display + if ((currentGesture != 0) && (currentGesture != 4) && (currentGesture != previousGesture)) + lastGesture = currentGesture; // Filter the meaningful gestures (1, 2, 8 to 512) for the display // Handle gesture log - //-------------------------------------------------------------------------------------- if (IsMouseButtonReleased(MOUSE_BUTTON_LEFT)) { if (CheckCollisionPointRec(GetMousePosition(), logButton1)) @@ -171,7 +176,6 @@ void Update(void) } // Handle protractor - //-------------------------------------------------------------------------------------- if (currentGesture > 255) // aka Pinch In and Pinch Out { currentAngleDegrees = currentPitchDegrees; @@ -189,9 +193,6 @@ void Update(void) finalVector = (Vector2){ (angleLength*sinf(currentAngleRadians)) + protractorPosition.x, (angleLength*cosf(currentAngleRadians)) + protractorPosition.y }; // Calculate the final vector for display // Handle touch and mouse pointer points - //-------------------------------------------------------------------------------------- - #define MAX_TOUCH_COUNT 32 - Vector2 touchPosition[MAX_TOUCH_COUNT] = { 0 }; Vector2 mousePosition = {0, 0}; if (currentGesture != GESTURE_NONE) @@ -202,22 +203,20 @@ void Update(void) } else mousePosition = GetMousePosition(); } + //-------------------------------------------------------------------------------------- // Draw //-------------------------------------------------------------------------------------- BeginDrawing(); - ClearBackground(RAYWHITE); - // Draw common - //-------------------------------------------------------------------------------------- + // Draw common elements DrawText("*", messagePosition.x + 5, messagePosition.y + 5, 10, BLACK); DrawText("Example optimized for Web/HTML5\non Smartphones with Touch Screen.", messagePosition.x + 15, messagePosition.y + 5, 10, BLACK); DrawText("*", messagePosition.x + 5, messagePosition.y + 35, 10, BLACK); DrawText("While running on Desktop Web Browsers,\ninspect and turn on Touch Emulation.", messagePosition.x + 15, messagePosition.y + 35, 10, BLACK); // Draw last gesture - //-------------------------------------------------------------------------------------- DrawText("Last gesture", lastGesturePosition.x + 33, lastGesturePosition.y - 47, 20, BLACK); DrawText("Swipe Tap Pinch Touch", lastGesturePosition.x + 17, lastGesturePosition.y - 18, 10, BLACK); DrawRectangle(lastGesturePosition.x + 20, lastGesturePosition.y, 20, 20, lastGesture == GESTURE_SWIPE_UP ? RED : LIGHTGRAY); @@ -235,7 +234,6 @@ void Update(void) for (i = 0; i < 4; i++) DrawCircle(lastGesturePosition.x + 180, lastGesturePosition.y + 7 + i*15, 5, touchCount <= i? LIGHTGRAY : gestureColor); // Draw gesture log - //-------------------------------------------------------------------------------------- DrawText("Log", gestureLogPosition.x, gestureLogPosition.y, 20, BLACK); // Loop in both directions to print the gesture log array in the inverted order (and looping around if the index started somewhere in the middle) @@ -256,7 +254,6 @@ void Update(void) DrawText("Hold", logButton1.x + 62, logButton1.y + 13, 10, WHITE); // Draw protractor - //-------------------------------------------------------------------------------------- DrawText("Angle", protractorPosition.x + 55, protractorPosition.y + 76, 10, BLACK); const char *angleString = TextFormat("%f", currentAngleDegrees); const int angleStringDot = TextFindIndex(angleString, "."); @@ -278,7 +275,6 @@ void Update(void) if (currentAngleDegrees != 0.0f) DrawLineEx(protractorPosition, finalVector, 3.0f, gestureColor); // Draw touch and mouse pointer points - //-------------------------------------------------------------------------------------- if (currentGesture != GESTURE_NONE) { if ( touchCount != 0 ) @@ -300,33 +296,42 @@ void Update(void) EndDrawing(); //-------------------------------------------------------------------------------------- - } -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) +static char const *GetGestureName(int i) { - // Initialization - //-------------------------------------------------------------------------------------- - InitWindow(screenWidth, screenHeight, "raylib [core] example - input gestures web"); - //-------------------------------------------------------------------------------------- - - // Main game loop - //-------------------------------------------------------------------------------------- - #if defined(PLATFORM_WEB) - emscripten_set_main_loop(Update, 0, 1); - #else - SetTargetFPS(60); - while (!WindowShouldClose()) Update(); // Detect window close button or ESC key - #endif - //-------------------------------------------------------------------------------------- - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; + switch (i) + { + case 0: return "None"; break; + case 1: return "Tap"; break; + case 2: return "Double Tap"; break; + case 4: return "Hold"; break; + case 8: return "Drag"; break; + case 16: return "Swipe Right"; break; + case 32: return "Swipe Left"; break; + case 64: return "Swipe Up"; break; + case 128: return "Swipe Down"; break; + case 256: return "Pinch In"; break; + case 512: return "Pinch Out"; break; + default: return "Unknown"; break; + } +} + +static Color GetGestureColor(int i) +{ + switch (i) + { + case 0: return BLACK; break; + case 1: return BLUE; break; + case 2: return SKYBLUE; break; + case 4: return BLACK; break; + case 8: return LIME; break; + case 16: return RED; break; + case 32: return RED; break; + case 64: return RED; break; + case 128: return RED; break; + case 256: return VIOLET; break; + case 512: return ORANGE; break; + default: return BLACK; break; + } } diff --git a/examples/core/core_input_gestures_web.png b/examples/core/core_input_gestures_testbed.png similarity index 100% rename from examples/core/core_input_gestures_web.png rename to examples/core/core_input_gestures_testbed.png diff --git a/examples/examples_list.txt b/examples/examples_list.txt index a909ba9ee..6c3ada66f 100644 --- a/examples/examples_list.txt +++ b/examples/examples_list.txt @@ -39,7 +39,7 @@ core;core_basic_screen_manager;⭐️☆☆☆;4.0;4.0;"Ramon Santamaria";@raysa core;core_custom_frame_control;⭐️⭐️⭐️⭐️;4.0;4.0;"Ramon Santamaria";@raysan5 core;core_smooth_pixelperfect;⭐️⭐️⭐️☆;3.7;4.0;"Giancamillo Alessandroni";@NotManyIdeasDev core;core_random_sequence;⭐️☆☆☆;5.0;5.0;"Dalton Overmyer";@REDl3east -core;core_input_gestures_web;⭐️⭐️☆☆;4.6-dev;4.6-dev;"ubkp";@ubkp +core;core_input_gestures_testbed;⭐️⭐️☆☆;4.6-dev;4.6-dev;"ubkp";@ubkp core;core_automation_events;⭐️⭐️⭐️☆;5.0;5.0;"Ramon Santamaria";@raysan5 core;core_high_dpi;⭐️☆☆☆;5.0;5.0;"Jonathan Marler";@marler8997 shapes;shapes_basic_shapes;⭐️☆☆☆;1.0;4.2;"Ramon Santamaria";@raysan5 diff --git a/projects/VS2022/examples/core_input_gestures_web.vcxproj b/projects/VS2022/examples/core_input_gestures_testbed.vcxproj similarity index 99% rename from projects/VS2022/examples/core_input_gestures_web.vcxproj rename to projects/VS2022/examples/core_input_gestures_testbed.vcxproj index bcccc57d0..8eb3a5e99 100644 --- a/projects/VS2022/examples/core_input_gestures_web.vcxproj +++ b/projects/VS2022/examples/core_input_gestures_testbed.vcxproj @@ -53,9 +53,9 @@ {0981CA98-E4A5-4DF1-987F-A41D09131EFC} Win32Proj - core_input_gestures_web + core_input_gestures_testbed 10.0 - core_input_gestures_web + core_input_gestures_testbed @@ -553,7 +553,7 @@ - +