mirror of
				https://github.com/raysan5/raylib.git
				synced 2025-11-04 09:44:20 +00:00 
			
		
		
		
	Add SetWindowMaxSize for desktop and web (#3309)
* Add SetWindowMaxSize for desktop and web * Remove SizeInt and respective adjustments
This commit is contained in:
		@@ -961,6 +961,7 @@ RLAPI void SetWindowTitle(const char *title);                     // Set title f
 | 
			
		||||
RLAPI void SetWindowPosition(int x, int y);                       // Set window position on screen (only PLATFORM_DESKTOP)
 | 
			
		||||
RLAPI void SetWindowMonitor(int monitor);                         // Set monitor for the current window
 | 
			
		||||
RLAPI void SetWindowMinSize(int width, int height);               // Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE)
 | 
			
		||||
RLAPI void SetWindowMaxSize(int width, int height);               // Set window maximum dimensions (for FLAG_WINDOW_RESIZABLE)
 | 
			
		||||
RLAPI void SetWindowSize(int width, int height);                  // Set window dimensions
 | 
			
		||||
RLAPI void SetWindowOpacity(float opacity);                       // Set window opacity [0.0f..1.0f] (only PLATFORM_DESKTOP)
 | 
			
		||||
RLAPI void SetWindowFocused(void);                                // Set window focused (only PLATFORM_DESKTOP)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										46
									
								
								src/rcore.c
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								src/rcore.c
									
									
									
									
									
								
							@@ -395,6 +395,8 @@ typedef struct CoreData {
 | 
			
		||||
        Size currentFbo;                    // Current render width and height (depends on active fbo)
 | 
			
		||||
        Size render;                        // Framebuffer width and height (render area, including black bars if required)
 | 
			
		||||
        Point renderOffset;                 // Offset from render area (must be divided by 2)
 | 
			
		||||
        Size windowMin;                     // Window minimum width and height (for resizable window)
 | 
			
		||||
        Size windowMax;                     // Window maximum width and height (for resizable window)
 | 
			
		||||
        Matrix screenScale;                 // Matrix to scale screen (framebuffer rendering)
 | 
			
		||||
 | 
			
		||||
        char **dropFilepaths;               // Store dropped files paths pointers (provided by GLFW)
 | 
			
		||||
@@ -1787,9 +1789,36 @@ void SetWindowMonitor(int monitor)
 | 
			
		||||
// Set window minimum dimensions (FLAG_WINDOW_RESIZABLE)
 | 
			
		||||
void SetWindowMinSize(int width, int height)
 | 
			
		||||
{
 | 
			
		||||
    CORE.Window.windowMin.width = width;
 | 
			
		||||
    CORE.Window.windowMin.height = height;
 | 
			
		||||
#if defined(PLATFORM_DESKTOP)
 | 
			
		||||
    const GLFWvidmode *mode = glfwGetVideoMode(glfwGetPrimaryMonitor());
 | 
			
		||||
    glfwSetWindowSizeLimits(CORE.Window.handle, width, height, mode->width, mode->height);
 | 
			
		||||
    int minWidth  = (CORE.Window.windowMin.width  == 0) ? GLFW_DONT_CARE : CORE.Window.windowMin.width;
 | 
			
		||||
    int minHeight = (CORE.Window.windowMin.height == 0) ? GLFW_DONT_CARE : CORE.Window.windowMin.height;
 | 
			
		||||
    int maxWidth  = (CORE.Window.windowMax.width  == 0) ? GLFW_DONT_CARE : CORE.Window.windowMax.width;
 | 
			
		||||
    int maxHeight = (CORE.Window.windowMax.height == 0) ? GLFW_DONT_CARE : CORE.Window.windowMax.height;
 | 
			
		||||
    glfwSetWindowSizeLimits(CORE.Window.handle, minWidth, minHeight, maxWidth, maxHeight);
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(PLATFORM_WEB)
 | 
			
		||||
    // Trigger the resize event once to update the window minimum width and height
 | 
			
		||||
    if ((CORE.Window.flags & FLAG_WINDOW_RESIZABLE) != 0) EmscriptenResizeCallback(EMSCRIPTEN_EVENT_RESIZE, NULL, NULL);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Set window maximum dimensions (FLAG_WINDOW_RESIZABLE)
 | 
			
		||||
void SetWindowMaxSize(int width, int height)
 | 
			
		||||
{
 | 
			
		||||
    CORE.Window.windowMax.width = width;
 | 
			
		||||
    CORE.Window.windowMax.height = height;
 | 
			
		||||
#if defined(PLATFORM_DESKTOP)
 | 
			
		||||
    int minWidth  = (CORE.Window.windowMin.width  == 0) ? GLFW_DONT_CARE : CORE.Window.windowMin.width;
 | 
			
		||||
    int minHeight = (CORE.Window.windowMin.height == 0) ? GLFW_DONT_CARE : CORE.Window.windowMin.height;
 | 
			
		||||
    int maxWidth  = (CORE.Window.windowMax.width  == 0) ? GLFW_DONT_CARE : CORE.Window.windowMax.width;
 | 
			
		||||
    int maxHeight = (CORE.Window.windowMax.height == 0) ? GLFW_DONT_CARE : CORE.Window.windowMax.height;
 | 
			
		||||
    glfwSetWindowSizeLimits(CORE.Window.handle, minWidth, minHeight, maxWidth, maxHeight);
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(PLATFORM_WEB)
 | 
			
		||||
    // Trigger the resize event once to update the window maximum width and height
 | 
			
		||||
    if ((CORE.Window.flags & FLAG_WINDOW_RESIZABLE) != 0) EmscriptenResizeCallback(EMSCRIPTEN_EVENT_RESIZE, NULL, NULL);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -4220,6 +4249,12 @@ static bool InitGraphicsDevice(int width, int height)
 | 
			
		||||
    CORE.Window.screen.height = height;          // User desired height
 | 
			
		||||
    CORE.Window.screenScale = MatrixIdentity();  // No draw scaling required by default
 | 
			
		||||
 | 
			
		||||
    // Set the window minimum and maximum default values to 0
 | 
			
		||||
    CORE.Window.windowMin.width  = 0;
 | 
			
		||||
    CORE.Window.windowMin.height = 0;
 | 
			
		||||
    CORE.Window.windowMax.width  = 0;
 | 
			
		||||
    CORE.Window.windowMax.height = 0;
 | 
			
		||||
 | 
			
		||||
    // NOTE: Framebuffer (render area - CORE.Window.render.width, CORE.Window.render.height) could include black bars...
 | 
			
		||||
    // ...in top-down or left-right to match display aspect ratio (no weird scaling)
 | 
			
		||||
 | 
			
		||||
@@ -6178,6 +6213,13 @@ static EM_BOOL EmscriptenResizeCallback(int eventType, const EmscriptenUiEvent *
 | 
			
		||||
    // so the size of the canvas object is explicitly retrieved below
 | 
			
		||||
    int width = GetWindowInnerWidth();
 | 
			
		||||
    int height = GetWindowInnerHeight();
 | 
			
		||||
 | 
			
		||||
    if (width < CORE.Window.windowMin.width) width = CORE.Window.windowMin.width;
 | 
			
		||||
    else if (width > CORE.Window.windowMax.width && CORE.Window.windowMax.width > 0) width = CORE.Window.windowMax.width;
 | 
			
		||||
 | 
			
		||||
    if (height < CORE.Window.windowMin.height) height = CORE.Window.windowMin.height;
 | 
			
		||||
    else if (height > CORE.Window.windowMax.height && CORE.Window.windowMax.height > 0) height = CORE.Window.windowMax.height;
 | 
			
		||||
 | 
			
		||||
    emscripten_set_canvas_element_size("#canvas",width,height);
 | 
			
		||||
 | 
			
		||||
    SetupViewport(width, height);    // Reset viewport and projection matrix for new size
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user