Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Problème de set de position sur la fenêtre  (Lu 2593 fois)

0 Membres et 1 Invité sur ce sujet

HunterX

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
Problème de set de position sur la fenêtre
« le: Septembre 17, 2013, 11:33:21 am »
Bonjour,

J'utilise la SFML en C++ dans le cadre d'un projet.

J'ai un problème, quand je set la position de la fenêtre puis get celle-ci, les valeurs du Vector2i ne sont pas les mêmes :
Voici ce que j'effectue :

_window est de type sf::RenderWindow *
_windowPos est de type sf::Vector2i

    _window = new sf::RenderWindow(sf::VideoMode(1280, 720), "Void Clash Launcher", sf::Style::None);
  if (_window == NULL)
    throw std::runtime_error("Unable to instantiate sf::RenderWindow");
  _windowPos.x = _videoMode->width / 2 - 1280 / 2;
  _windowPos.y = _videoMode->height / 2 - 720 / 2;
  std::cout << "Set pos : " << _windowPos.x << "; " << _windowPos.y << std::endl;
  _window->setPosition(_windowPos);

  std::cout << "Window pos : " << _window->getPosition().x << "; " << _window->getPosition().y << std::endl;


La sortie standart:
Set pos : 320; 180
Window pos : 640; 360

Simple est la question : Pourquoi après avoir set la position de la fenêtre son getter ne retourne pas la valeur correspondante ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème de set de position sur la fenêtre
« Réponse #1 le: Septembre 17, 2013, 02:03:27 pm »
Bizarre. Il y a un problème de ce genre sous Linux, mais c'est juste à cause des décorations de fenêtres et l'écart n'est pas aussi grand. Et surtout pas pile poil le double des coordonnées. C'est super louche, tu ne voudrais pas nous montrer un code complet minimal qui reproduit le problème ?

PS : un new qui échoue lève une exception std::bad_alloc, il ne renvoie pas NULL (pour avoir NULL il faut utiliser new(nothrow)).
Laurent Gomila - SFML developer

HunterX

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
Re : Problème de set de position sur la fenêtre
« Réponse #2 le: Septembre 17, 2013, 02:38:51 pm »
Je suis justement sous linux et utilise sf::Style::None avec ma fenetre.

Voici un code complet minimal comme demandé :
#include        <iostream>
#include        <stdexcept>
#include        <SFML/Window.hpp>
#include        <SFML/Graphics.hpp>

int             main(void)
{
  sf::VideoMode         *_videoMode;
  sf::RenderWindow      *_window;
  sf::Vector2i          _windowPos;

  _videoMode = new sf::VideoMode;
  *_videoMode = _videoMode->getDesktopMode();

  _window = new sf::RenderWindow(sf::VideoMode(1280, 720), "Void Clash Launcher", sf::Style::None);
  _windowPos.x = _videoMode->width / 2 - 1280 / 2;
  _windowPos.y = _videoMode->height / 2 - 720 / 2;
  _window->setPosition(_windowPos);

  std::cout << "Pos set : " << _windowPos.x << "; " << _windowPos.y << std::endl;
  std::cout << "Real pos : " << _window->getPosition().x << "; " << _window->getPosition().y << std::endl;

  _window->close();
}
 

Et alors la il y a plusieurs résultats possibles :
Pos set : 320; 180
Real pos : 640; 360
et
Pos set : 320; 180
Real pos : 0; 112

PS: Oui pour le new mauvais reflexe de C avec malloc, merci.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème de set de position sur la fenêtre
« Réponse #3 le: Septembre 17, 2013, 02:47:56 pm »
Utilise une taille de fenêtre fixe (genre 500x500). Là tu as d'une part des calculs superflus qui n'ajoutent rien au problème, et d'autre part un code qui dépend de la taille du bureau de celui qui lance le programme (donc chaque personne qui teste aura une exécution différente).
Laurent Gomila - SFML developer

HunterX

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
Re : Problème de set de position sur la fenêtre
« Réponse #4 le: Septembre 17, 2013, 05:55:07 pm »
Ma taille de fenêtre est fixe : 1280 x 720.

Le problème vient du faite que quand je set une variable à une valeur, le getter de cette variable ne me retourne pas ce que je viens de set. Si je set la position de window à [0;0] (donc non indépandament de la machine), j'ai le même problème.

La fenetre se met correctement a la position mais le getter ne retourne pas la bonne valeur
« Modifié: Septembre 17, 2013, 06:16:04 pm par HunterX »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème de set de position sur la fenêtre
« Réponse #5 le: Septembre 17, 2013, 06:17:46 pm »
Oui je voulais parler de la position, pas de la taille. Désolé.

Si tu places la fenêtre en (0, 0) getPosition() te renvoie quoi ? Tu as essayé d'attendre un peu (sf::sleep) avant de récupérer la position ?
Laurent Gomila - SFML developer

HunterX

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
Re : Problème de set de position sur la fenêtre
« Réponse #6 le: Septembre 17, 2013, 06:35:34 pm »
Avec un sf::sleep ça passe, je me doutais que c'était une histoire comme ça merci.

Sinon je voulais savoir mon but actuellement est de recoder le déplacement de la fenêtre car j'utilise une fenêtre sans style et donc sans bordure. Y'a t-il des choses prévues ou des exemples pour faire de genre de choses ?

Merci à vous.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème de set de position sur la fenêtre
« Réponse #7 le: Septembre 17, 2013, 08:47:54 pm »
Citer
Avec un sf::sleep ça passe, je me doutais que c'était une histoire comme ça merci.
Bizarre. Il y a pourtant un XFlush dans setPosition.

Citer
Sinon je voulais savoir mon but actuellement est de recoder le déplacement de la fenêtre car j'utilise une fenêtre sans style et donc sans bordure. Y'a t-il des choses prévues ou des exemples pour faire de genre de choses ?
Pas à ma connaissance.
Laurent Gomila - SFML developer

HunterX

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
Re : Problème de set de position sur la fenêtre
« Réponse #8 le: Septembre 18, 2013, 12:09:16 am »
C'est assez étrange en effet, de plus je get toujours le double de la valeur que j'ai set (après ce n'est pas un soucis j'ai juste à faire une division par 2 mais bon c'est du bricolage).

J'ai testé sous d'autres architectures linux de mes collègues même constatations.
Du coup les déplacements de la fenêtre avec le sf::sleep ce n'est pas terrible. Je vais essayer de trouver d'autres solutions.