lordmauve / wasabi2d

Cutting-edge 2D game framework for Python
https://wasabi2d.readthedocs.io/
GNU Lesser General Public License v3.0
154 stars 24 forks source link

Crash with minimal window size #54

Open lordmauve opened 4 years ago

lordmauve commented 4 years ago

In some cases pygame.display.set_mode() will return a size different to the one requested for reasons other than scaling. This can cause a crash:

Traceback (most recent call last):
  File "pingplot.py", line 16, in <module>
    scene = w2d.Scene(150, 100, title="Ping plot")
  File "C:\WorkFolders\mauve\My Documents\dev\pingplot\venv\lib\site-packages\wasabi2d\scene.py", line 94, in __init__
    ctx = self.ctx = self._make_context(width, height)
  File "C:\WorkFolders\mauve\My Documents\dev\pingplot\venv\lib\site-packages\wasabi2d\scene.py", line 176, in _make_context
    self.drawer = self._make_scaler(ctx, (width, height))
  File "C:\WorkFolders\mauve\My Documents\dev\pingplot\venv\lib\site-packages\wasabi2d\scene.py", line 185, in _make_scaler
    }[self._scaler]
KeyError: False

(I added some debug output. It turns out that this is because Windows has a certain minimum window width in order to fit the title bar controls.)

Traceback (most recent call last):
  File "pingplot.py", line 16, in <module>
    scene = w2d.Scene(150, 100, title="Ping plot")
  File "C:\WorkFolders\mauve\My Documents\dev\pingplot\venv\lib\site-packages\wasabi2d\scene.py", line 94, in __init__
    ctx = self.ctx = self._make_context(width, height)
  File "C:\WorkFolders\mauve\My Documents\dev\pingplot\venv\lib\site-packages\wasabi2d\scene.py", line 176, in _make_context
    self.drawer = self._make_scaler(ctx, (width, height))
  File "C:\WorkFolders\mauve\My Documents\dev\pingplot\venv\lib\site-packages\wasabi2d\scene.py", line 183, in _make_scaler
    f"No scaler set but display size {self._real_size} != "
KeyError: 'No scaler set but display size (176, 100) != requested size (150, 100)'