Fix incorrect resize before game is started.

Review Request #130167 - Created June 27, 2017 and updated

Julian Helfferich

This commit fixes bug 380464.

When the game window is resized before a game is started, the game scene is not correctly rescaled. When starting the game it might be too small (it seems never to be too large).

This commit fixes the bug by triggering a fitInView() call of the gameView. The same function is triggered by a resize event.

Started the program -> Resized the window (enlarged vertically) -> started a game -> resized the window.

Before: Bug confirmed.
After: Bug fixed.

Albert Astals Cid

This seems like a workaround for a bug somewhere else? I mean if we're already calling it in resizeEvent calling it here again seems a bit redundant, no? Have you checked if maybe the mpGameScene->sceneRect() value in resizeEvent is bad or something?

  1. Now I have found the underlying cause and I think my fix is perfectly good:
    There are two possible values for sceneRect: [360, 360] for single game and [720, 360] for Human vs AI. The default value is [720, 360]. Thus, the scene is scaled such that this sceneRect fits into the view. However, when you start a single game, the sceneRect is set to [360, 360]. It does not fit correctly, but is only rescaled when you resize the window. Thus, the correct thing to do is to call fitIntoView() after a game has started and KBlocks knows which sceneRect values to use.

    Knowing this, I have found an even worse variant of the bug:
    1) Start the game
    2) Start a single game
    3) Shrink the KBlocks window horizontally
    4) Start a Human vs. AI game
    The scene again doesn't fit the view, but this time the play area of the AI is outside the view and thus invisible.

Albert Astals Cid
Ship It!