Changing WindowProperties at run-time?

wp = WindowProperties()
wp.setFixedSize(False)
base.win.requestProperties(wp)

I can’t seem to change the resizability property of the window during run-time. Is this normal, or a bug? Where is this documented? Are there any work arounds?

That’s a limitation in the oeperating system. You need to set this before a window is opened, or open a new window.

Opening a new window seems fine, so long as it isn’t done too often. Thanks.

On a related note… Is it possible to lock the window’s (not the view) aspect ratio in Panda while allowing the user to resize?

Or should I just stick with the obvious alternative and correct the aspect ratio by resizing one of the window’s dimensions when a resize event fires?

This is not handled automatically in Panda. It might be possible to implement it as you describe.

David

i did that once, this may help you:

from direct.showbase.DirectObject import DirectObject
from pandac.PandaModules import  *

def setResolution( resolution ):
    wp = WindowProperties()
    # set resolution
    wp.setSize(resolution[0], resolution[1])
    # set fullscreen
    base.win.requestProperties(wp)

class windowHandlerClass( DirectObject ):
  def __init__( self ):
    
    self.active = True
    
    DirectObject.__init__( self )
    self.aspectRatio = [16., 9.]
    base.win.setClearColorActive( True )
    base.win.setClearColor(VBase4(1, 1, 1, 1))
    self.cameras = [base.cam, base.cam2d, base.cam2dp]
    
    if self.active:
      self.accept( 'window-event', self.onResize)
  
  def onResize( self, window=None ):
    print "onResize"
    if window is None:
      window = base.win
    
    wp = window.getProperties()
    winx = float(wp.getXSize())
    winy = float(wp.getYSize())
    
    drx = winy/float(self.aspectRatio[1])*float(self.aspectRatio[0])/winx
    dry = winx/float(self.aspectRatio[0])*float(self.aspectRatio[1])/winy
    
    dx = (1.-drx) / 2
    dy = (1.-dry) / 2.
    dim = dx , (1.-dx), dy, (1.-dy)
    
    reqx = round(winx*drx)
    reqy = round(winy*dry)
    
    reqx = winx
    reqy = round( winx/float(self.aspectRatio[0])*float(self.aspectRatio[1]) )
    if winx != reqx or winy != reqy:
      print winx, winy, reqx, reqy, reqx/float(reqy)
      setResolution( [reqx, reqy] )


if __name__ == '__main__':
  from direct.directbase import DirectStart
  windowHandler = windowHandlerClass()
  run()

I actually got it done this morning and forgot to post here, but I appreciate the help anyway.