1
Window / Maximize window: order of events
« on: March 31, 2016, 12:58:02 am »
In the context of a SFML window not covering all the screen, when I maximize it, the mouse pointer typically enters the now maximized window. I get two events reflecting this: sf::Event::Resized and sf::Event::MouseEntered, in this order. In some cases, the order is reversed and I get sf::Event::MouseEntered before sf::Event::Resized. I have not been able to find out why, but moving the window beforehand can apparently change the result; somehow having the window positioned to the left of around 40 pixels (even left of 0) triggers the incorrect order.
My understanding is that sf::Event::Resized should always be fired before sf::Event::MouseEntered.
This has been tested with SFML 2.3.2, and I have not found any commit, issue or PR posterior to that version mentioning this issue on GitHub.
Minimal example:
My understanding is that sf::Event::Resized should always be fired before sf::Event::MouseEntered.
This has been tested with SFML 2.3.2, and I have not found any commit, issue or PR posterior to that version mentioning this issue on GitHub.
Minimal example:
#include <iostream>
#include <SFML/Graphics.hpp>
int main()
{
sf::RenderWindow renderWindow(sf::VideoMode(800, 700), "Test event Resized");
renderWindow.setFramerateLimit(60);
std::cout << "[init] renderWindow.getPosition(): " << renderWindow.getPosition().x << ", " << renderWindow.getPosition().y << std::endl;
while (renderWindow.isOpen())
{
sf::Event event;
while (renderWindow.pollEvent(event))
{
std::cout << "event.type = " << event.type << std::endl;
switch (event.type)
{
case sf::Event::Closed :
{
renderWindow.close();
}
break;
case sf::Event::Resized :
{
std::cout << "[sf::Event::Resized] renderWindow.getPosition() = " << renderWindow.getPosition().x << ", " << renderWindow.getPosition().y << std::endl;
}
break;
case sf::Event::GainedFocus :
{
std::cout << "[sf::Event::GainedFocus] renderWindow.getPosition() = " << renderWindow.getPosition().x << ", " << renderWindow.getPosition().y << std::endl;
}
break;
case sf::Event::MouseEntered :
{
std::cout << "[sf::Event::MouseEntered] renderWindow.getPosition() = " << renderWindow.getPosition().x << ", " << renderWindow.getPosition().y << std::endl;
}
break;
default :
break;
}
}
renderWindow.clear();
renderWindow.display();
}
return 0;
}
#include <SFML/Graphics.hpp>
int main()
{
sf::RenderWindow renderWindow(sf::VideoMode(800, 700), "Test event Resized");
renderWindow.setFramerateLimit(60);
std::cout << "[init] renderWindow.getPosition(): " << renderWindow.getPosition().x << ", " << renderWindow.getPosition().y << std::endl;
while (renderWindow.isOpen())
{
sf::Event event;
while (renderWindow.pollEvent(event))
{
std::cout << "event.type = " << event.type << std::endl;
switch (event.type)
{
case sf::Event::Closed :
{
renderWindow.close();
}
break;
case sf::Event::Resized :
{
std::cout << "[sf::Event::Resized] renderWindow.getPosition() = " << renderWindow.getPosition().x << ", " << renderWindow.getPosition().y << std::endl;
}
break;
case sf::Event::GainedFocus :
{
std::cout << "[sf::Event::GainedFocus] renderWindow.getPosition() = " << renderWindow.getPosition().x << ", " << renderWindow.getPosition().y << std::endl;
}
break;
case sf::Event::MouseEntered :
{
std::cout << "[sf::Event::MouseEntered] renderWindow.getPosition() = " << renderWindow.getPosition().x << ", " << renderWindow.getPosition().y << std::endl;
}
break;
default :
break;
}
}
renderWindow.clear();
renderWindow.display();
}
return 0;
}