| 
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -95,6 +95,11 @@ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    #define DEFAULT_GAMEPAD_DEV     "/dev/input/js0" | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(PLATFORM_WEB) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    #include <emscripten/emscripten.h> | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    #include <emscripten/html5.h> | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//---------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Defines and Macros | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//---------------------------------------------------------------------------------- | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -158,6 +163,10 @@ static int renderOffsetY = 0;               // Offset Y from render area (must b | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static bool fullscreen = false;             // Fullscreen mode (useful only for PLATFORM_DESKTOP) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static Matrix downscaleView;                // Matrix to downscale view (in case screen size bigger than display size) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(PLATFORM_ANDROID) || defined(PLATFORM_WEB) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static Vector2 touchPosition;               // Touch position on screen | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI) || defined(PLATFORM_WEB) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static const char *windowTitle;             // Window text title... | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -247,6 +256,10 @@ static void TakeScreenshot(void); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static void AndroidCommandCallback(struct android_app *app, int32_t cmd);                  // Process Android activity lifecycle commands | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(PLATFORM_WEB) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static EM_BOOL EmscriptenFullscreenChangeCallback(int eventType, const EmscriptenFullscreenChangeEvent *e, void *userData); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//---------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Module Functions Definition - Window and OpenGL Context Functions | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//---------------------------------------------------------------------------------- | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -279,6 +292,12 @@ void InitWindow(int width, int height, const char *title) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    InitGamepad();      // Gamepad init | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(PLATFORM_WEB) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    InitGesturesSystem(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    emscripten_set_fullscreenchange_callback(0, 0, 1, EmscriptenFullscreenChangeCallback); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    mousePosition.x = screenWidth/2; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    mousePosition.y = screenHeight/2; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -335,6 +354,8 @@ void InitWindow(int width, int height, struct android_app *state) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //InitGesturesSystem(app);   // NOTE: Must be called by user | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    InitAssetManager(app->activity->assetManager); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    InitGesturesSystem(app); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    TraceLog(INFO, "Android app initialized successfully"); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -499,7 +520,7 @@ void EndDrawing(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    SwapBuffers();                  // Copy back buffer to front buffer | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    PollInputEvents();              // Poll user events | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    currentTime = GetTime(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    drawTime = currentTime - previousTime; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    previousTime = currentTime; | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -814,7 +835,7 @@ Vector2 GetMousePosition(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void SetMousePosition(Vector2 position) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    mousePosition = position; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(PLATFORM_DESKTOP) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // NOTE: emscripten not implemented | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glfwSetCursorPos(window, position.x, position.y); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -969,6 +990,41 @@ bool IsGamepadButtonUp(int gamepad, int button) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(PLATFORM_ANDROID) || defined(PLATFORM_WEB) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Returns touch position X | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			int GetTouchX(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return (int)touchPosition.x; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Returns touch position Y | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			int GetTouchY(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return (int)touchPosition.y; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Returns touch position XY | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// TODO: touch position should be scaled depending on display size and render size | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			Vector2 GetTouchPosition(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Vector2 position = touchPosition; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if ((screenWidth > displayWidth) || (screenHeight > displayHeight)) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // TODO: Seems to work ok but... review! | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        position.x = position.x*((float)screenWidth/(float)(displayWidth - renderOffsetX)) - renderOffsetX/2; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        position.y = position.y*((float)screenHeight/(float)(displayHeight - renderOffsetY)) - renderOffsetY/2; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        position.x = position.x*((float)renderWidth/(float)displayWidth) - renderOffsetX/2; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        position.y = position.y*((float)renderHeight/(float)displayHeight) - renderOffsetY/2; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return position; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//---------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Module specific Functions Definition | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//---------------------------------------------------------------------------------- | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -1547,6 +1603,13 @@ static bool GetMouseButtonStatus(int button) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Poll (store) all input events | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static void PollInputEvents(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(PLATFORM_ANDROID) || defined(PLATFORM_WEB) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Touch events reading (requires gestures module) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    touchPosition = GetRawTouchPosition(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    UpdateGestures(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Mouse input polling | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    double mouseX; | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -1940,6 +2003,31 @@ static void SetupFramebufferSize(int displayWidth, int displayHeight) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(PLATFORM_WEB) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static EM_BOOL EmscriptenFullscreenChangeCallback(int eventType, const EmscriptenFullscreenChangeEvent *e, void *userData) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //isFullscreen: int e->isFullscreen  | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //fullscreenEnabled: int e->fullscreenEnabled  | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //fs element nodeName: (char *) e->nodeName | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //fs element id: (char *) e->id | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //Current element size: (int) e->elementWidth, (int) e->elementHeight | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //Screen size:(int) e->screenWidth, (int) e->screenHeight | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (e->isFullscreen) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        TraceLog(INFO, "Canvas scaled to fullscreen. ElementSize: (%ix%i), ScreenSize(%ix%i)", e->elementWidth, e->elementHeight, e->screenWidth, e->screenHeight); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        TraceLog(INFO, "Canvas scaled to windowed. ElementSize: (%ix%i), ScreenSize(%ix%i)", e->elementWidth, e->elementHeight, e->screenWidth, e->screenHeight); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // TODO: Depending on scaling factor (screen vs element), calculate factor to scale mouse/touch input | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return 0; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Plays raylib logo appearing animation | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static void LogoAnimation(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
				
				 | 
			
			 | 
			
			
 |