1
Graphique / Re: sf::Text Local Bounds innatendues
« le: Juin 21, 2018, 10:32:15 pm »
Bonjour,
J'ai aussi un problème avec getLocalBounds (voir l'image en pièce jointe)
Ici je donne un titre à mon bouton et pour tester ses dimensions(due à un problème pour centrer le texte par rapport au bouton) j'ai décider d'afficher un RectangleShape.
Sa hauteur a l'air bonne, mais sa largeur dépasse largement la largeur réelle du texte. D'ailleurs, plus la chaîne est longue, plus l'écart est important.
Edit: J'ai réussi à résoudre à peut près le problème:
Ici, j'ai assigné ma chaîne après avoir donné les infos comme la police d'écriture et sa taille alors qu'avait j'avais appelé setText avant. Je ne pensais pas que l'ordre avait une importance ici, donc bien faire attention à ça.
Ensuite, j'avais toujours un décalage, sauf que cette fois-ci, la boite était plus petite que le texte, j'ai essayé d'ajouter left et top et ça a fonctionné.
Edit2: En fait, l'idéal est carrément d'ajouter left et top à la position du shape et non pas l'ajouter à sa taille:
(voir la seconde image jointe dans le message)
Ici, on vois que le shape prend la bonne taille par rapport au texte et se positionne très bien.
J'ai aussi un problème avec getLocalBounds (voir l'image en pièce jointe)
m_title.setString(sf::String(text));
m_shape.setSize(sf::Vector2f(m_title.getLocalBounds().width,m_title.getLocalBounds().height));
m_shape.setSize(sf::Vector2f(m_title.getLocalBounds().width,m_title.getLocalBounds().height));
Ici je donne un titre à mon bouton et pour tester ses dimensions(due à un problème pour centrer le texte par rapport au bouton) j'ai décider d'afficher un RectangleShape.
Sa hauteur a l'air bonne, mais sa largeur dépasse largement la largeur réelle du texte. D'ailleurs, plus la chaîne est longue, plus l'écart est important.
Edit: J'ai réussi à résoudre à peut près le problème:
m_title.setFont(m_font);
m_title.setFillColor(sf::Color::White);
m_title.setCharacterSize(20);
m_title.setString(sf::String("Mon Bouton"));
m_shape.setSize(sf::Vector2f(m_title.getLocalBounds().width+m_title.getLocalBounds().left,m_title.getLocalBounds().height+m_title.getLocalBounds().top));
m_title.setFillColor(sf::Color::White);
m_title.setCharacterSize(20);
m_title.setString(sf::String("Mon Bouton"));
m_shape.setSize(sf::Vector2f(m_title.getLocalBounds().width+m_title.getLocalBounds().left,m_title.getLocalBounds().height+m_title.getLocalBounds().top));
Ici, j'ai assigné ma chaîne après avoir donné les infos comme la police d'écriture et sa taille alors qu'avait j'avais appelé setText avant. Je ne pensais pas que l'ordre avait une importance ici, donc bien faire attention à ça.
Ensuite, j'avais toujours un décalage, sauf que cette fois-ci, la boite était plus petite que le texte, j'ai essayé d'ajouter left et top et ça a fonctionné.
Edit2: En fait, l'idéal est carrément d'ajouter left et top à la position du shape et non pas l'ajouter à sa taille:
m_shape.setPosition(sf::Vector2f(static_cast<float>(position.x)+m_title.getLocalBounds().left,static_cast<float>(position.y)+m_title.getLocalBounds().top));
m_shape.setSize(sf::Vector2f(m_title.getLocalBounds().width+m_title.getLocalBounds().left,m_title.getLocalBounds().height));
m_shape.setSize(sf::Vector2f(m_title.getLocalBounds().width+m_title.getLocalBounds().left,m_title.getLocalBounds().height));
(voir la seconde image jointe dans le message)
Ici, on vois que le shape prend la bonne taille par rapport au texte et se positionne très bien.