Fullscreen that can be restored using the mouse?

Jimmy

Active Member
Tutorial Author
Joined
Jan 2, 2020
If you make fullscreen using your mouse, the hidden popup titlebar is preserved and it is all and well.
But when you give a fullscreen command the resize flag gets ignored so there's no way to go back (except a programmatical one).
Is there a way to give a fullscreen command and avoid that the titlebar avoids forever?

From the GLWF documentation :
"GLFW_RESIZABLE specifies whether the windowed mode window will be resizable by the user. The window will still be resizable using the glfwSetWindowSize function. Possible values are GLFW_TRUE and GLFW_FALSE. This hint is ignored for full screen and undecorated windows."

An example to demonstrated the behaviour (tested on macOS only so far but it should be consistent over all desktop platforms i believe)
Cerberus X:
#GLFW_WINDOW_WIDTH = 128
#GLFW_WINDOW_HEIGHT = 128
#GLFW_WINDOW_RENDER_WHILE_RESIZING = True ' AVOID ugly window resize animaTION IN MACOS when YOU DO RESIZE USING THE MOUSE
#GLFW_WINDOW_RESIZABLE = True

Strict
Import mojo2

Function Main:Int()
    New myApp()
    Return 0
End

Class myApp Extends App

    Field myCanvas:Canvas
    Field fullscreen:Bool = True
    
    Method OnCreate:Int()
        myCanvas = New Canvas()           
        SetSwapInterval 1
        SetUpdateRate  0
        Return 0
    End
    
    Method OnUpdate:Int()
        If KeyHit(KEY_ESCAPE) Then OnClose() ' esc is Panic exit
     If KeyHit( KEY_A )  Then fullscreen = False ; ToggleFullscreen ' A for programmatic fullscreen (try resize using the mouse first)
        Return 0
   End
    
    Method OnRender:Int()
        myCanvas.Clear 0,1,0
        myCanvas.Flush
        Return 0
    End

    Method ToggleFullscreen:Void()
        Local desktop:DisplayMode = DesktopMode()
        Local awidth : Int = desktop.Width
        Local aheight : Int = desktop.Height
        fullscreen = Not fullscreen
        If Not fullscreen
            SetDeviceWindow 800,600, 4+2
            myCanvas.SetViewport 0,0,800,600
            myCanvas.SetScissor 0,0,800,600
            myCanvas.Clear 0,1,0           
        Else   
            SetDeviceWindow awidth,aheight, 1    + 2 + 4
            myCanvas.SetViewport 0,0,awidth,aheight
             myCanvas.SetScissor 0,0,awidth,aheight   
              myCanvas.Clear 0,1,0
        Endif
    End
    
End
 

Jimmy

Active Member
Tutorial Author
Joined
Jan 2, 2020
Not solved, but the problem is understood now.

MacOS introduced a native fullscreen mode in later versions and GLFW3 does not handle it as e.g. SDL2 do.
 
Top Bottom