Image size bug?

IN the following code (running on an iPad1) the page1 image is only 500 pixels wide

function setup()

spriteMode(CORNER)

displayMode(FULLSCREEN)

page1 = image(WIDTH,HEIGHT)    

setContext(page1)  

spriteMode(CORNER)   

sprite("Documents:besht1",0,0)  

– besht1 is a 798x1024 image

end

function draw()

– using the page1 image shows the error

sprite(page1,0,0)

– loading the image directly as a sprite works

– sprite(“Documents:besht2”,0,0,WIDTH)

end

Any ideas why?

What is the error you are seeing? Only speculating, but are you ever setting the context back to to the screen before you attempt to draw page1?

The image displayed is full screen height, but only 500 pixels wide

EDIT: incidentally, it looks like others have had this problem before too, and there is a bug with setContext()/displayMode() in some cases:

http://twolivesleft.com/Codea/Talk/discussion/comment/11834#Comment_11834

A couple of workarounds: you either need to move your displayMode(FULLSCREEN) out of the setup() function and into the global scope, or you need to wait until draw() to render to an image using setContext().

workaround 1:


displayMode(FULLSCREEN)

function setup()
    spriteMode(CORNER)

    page1 = image(WIDTH,HEIGHT)
    setContext(page1)
    sprite("Documents:besht1")
    setContext()
end

function draw()
    sprite(page1,0,0)
end

and workaround 2:


function setup()
    spriteMode(CORNER)
    displayMode(FULLSCREEN)
end

doOnce = true

function draw()
    
    if doOnce then
        doOnce = false
        page1 = image(WIDTH,HEIGHT)
        setContext(page1)
        sprite("Documents:test3")        
        setContext()
    end
    
    sprite(page1,0,0)
end

I’m not sure why this is happening though. Maybe someone at TLL might have an explanation?

Thanks for the help – works great now.

.@toadkick this is due to the fact that calling displayMode() while in setup() will animate the sidebar out (this is intentional behaviour). The canvas is not resized until animation is complete.

Calling displayMode() while outside of setup() explicitly does not animate the display change (so users can launch in fullscreen without any artefacts at startup).

One way we might be able to resolve this is to block the thread until animation completes. Thanks for providing the workarounds.

Interesting. Does calling displayMode() during draw() cause the output window to animate as well?

.@toadkick it should, though I wouldn’t recommend calling it rapidly (i.e. it should be part of a conditional, or triggered by user interaction).