SFML community forums

Help => General => Topic started by: nelsk on July 19, 2015, 08:36:08 pm

Title: Resizing a RenderWindow embedded in wxWidgets app, best practices?
Post by: nelsk on July 19, 2015, 08:36:08 pm
Hi,

I'm working on integrating SFML 2.3.1 (release .so libs) into a wxWidgets 3.0 app, which I've successfully done. Now I'm trying to resize the RenderWindow-based wxControl on AppFrame resize events so that I can maintain a margin around my SFML canvas. I almost have it working, but I'm having some minor issues. I've boiled it down to a demo, here's the full source:

https://gist.github.com/eriknelson/e4ccf32534eb3d25a1ea

First, when the app first launches, it looks like the RenderWindow doesn't quite fill it's wxWindow, seen here:

http://i.imgur.com/ovCt6l4h.png

Secondly, sometimes when resizing the AppFrame, again, the RenderWindow appears not to fill the full window:

http://i.imgur.com/8qYvWLVh.png

Of particular interest is Canvas::onResize at line 87. I had originally tried simply setting the inherited RenderWindow size with
this->setSize(...)
, but that didn't work at all. Then I tried recreating the RenderWindow, which is where I'm at now. I'm almost positive what I'm doing is not advised since it's recreating the RenderWindow *on each resize event*. That seems terribly inefficient to me, and obviously does not perform well.

A couple specific questions:
- What is the right way to resize the RenderWindow on a wxWindow resize event? Should its size be changed, or does it, in fact, need to be recreated?
- If I'm on the right track, why the strange behavior seen in the screenshots?

I'm also open to any general critique of my code, I'd like to set a solid foundation and do this the right way.

Additional info:
OS: Arch Linux
Compiler: clang++ 3.6.2
Build tool: cmake 3.2.3
Title: Re: Resizing a RenderWindow embedded in wxWidgets app, best practices?
Post by: victorlevasseur on July 19, 2015, 09:25:36 pm
SFML 2.3 has problems with GTK+ (wxWidgets uses GTK+ under Linux). Especially when trying to resize the render window. See http://en.sfml-dev.org/forums/index.php?topic=18536.0
Title: Re: Resizing a RenderWindow embedded in wxWidgets app, best practices?
Post by: nelsk on July 19, 2015, 09:29:12 pm
Interesting, thanks for the tip. I'll downgrade to 2.2 and see if I get some different results.

EDIT: I downgraded to 2.2 and patched my original code with the following:

https://gist.github.com/eriknelson/e4ccf32534eb3d25a1ea#file-convert_to_2_2-patch

Looks like this works by resizing both the host wxWindow and the sf::RenderWindow as I originally tried, which must be a better approach than repeatedly recreating the RenderWindow. Is this known to the SFML devs and a confirmed 2.3 issue?