Resize game screen on-the-fly to cover whole browser window

Share your advanced knowledge/code with the community.
User avatar
Danilo
Posts: 51
Joined: Wed Feb 26, 2014 7:11 am

Resize game screen on-the-fly to cover whole browser window

Post by Danilo »

Code: Select all

;
; ResizeScreen.sb
;
; by Danilo
;
; http://forums.spiderbasic.com/viewtopic.php?f=9&t=47
;
; SpiderBasic 1.00 Alpha 4
;
Procedure BrowserSizeChanged()
    Static initialized = #False
    Static browserWidth, browserHeight
    Protected currentWidth, currentHeight
    If initialized = #False
        ExamineDesktops()
        browserWidth  = DesktopWidth(1)
        browserHeight = DesktopHeight(1)
        initialized   = #True
        ProcedureReturn #True
    Else
        currentWidth  = DesktopWidth(1)
        currentHeight = DesktopHeight(1)
        If currentWidth <> browserWidth Or currentHeight <> browserHeight
            browserWidth  = currentWidth
            browserHeight = currentHeight
            ProcedureReturn #True
        EndIf
    EndIf
    ProcedureReturn #False
EndProcedure

Procedure ResizeScreen(_width_,_height_)
    !if (spider.screen.renderer != null) {
    !    spider.screen.renderer.resize(v__width_,v__height_);
    !    spider.screen.width  = v__width_;
    !    spider.screen.height = v__height_;
    !};
EndProcedure

Macro ResizeScreen_Macro(_width_,_height_)
    !if (spider.screen.renderer != null) {
    !    spider.screen.renderer.resize(_width_,_height_);
    !    spider.screen.width  = _width_;
    !    spider.screen.height = _height_;
    !};
EndMacro


Procedure RenderFrame()
    ClearScreen(RGB(255,255,0))
    
    If BrowserSizeChanged()
        ;ResizeScreen(DesktopWidth(1),DesktopHeight(1))
        
        ; workaround for bug: http://forums.spiderbasic.com/viewtopic.php?f=11&t=38
        ResizeScreen_Macro(spider_DesktopWidth(1),spider_DesktopHeight(1));
    EndIf
    
    DisplaySprite(1,0,0)
    DisplaySprite(1,0,ScreenHeight()-SpriteHeight(1))
    DisplaySprite(1,ScreenWidth()-SpriteWidth(1),0)
    DisplaySprite(1,ScreenWidth()-SpriteWidth(1),ScreenHeight()-SpriteHeight(1))
    DisplaySprite(1,ScreenWidth()*0.5-SpriteWidth(1)*0.5,ScreenHeight()*0.5-SpriteHeight(1)*0.5)
    FlipBuffers()
EndProcedure

OpenScreen(800, 600, 32, "Test")

BindEvent(#PB_Event_RenderFrame, @RenderFrame())

CreateSprite(1, 20, 20)

FlipBuffers()
Works also when going fullscreen (F11 in most browsers).
cya,
...Danilo