Bonjour,
J'essaye d'afficher des "touches" de clavier comportant un rectangle (dessin de la touche) et un sf::Text (valeur de la touche).
Je voulais donc positionner le contenu en fonction de la taille de la lettre.
J'ai donc écrit :
Dessin du rectangle :
sf::VertexArray rectangle(sf::Quads, 4);
rectangle[0].position = sf::Vector2f(x, y);
rectangle[1].position = sf::Vector2f(x+width, y);
rectangle[2].position = sf::Vector2f(x+width, y+height);
rectangle[3].position = sf::Vector2f(x, y+height);
sf::Color sfBackgroundColor(backgroundColor['r'], backgroundColor['g'], backgroundColor['b']);
rectangle[0].color = sfBackgroundColor;
rectangle[1].color = sfBackgroundColor;
rectangle[2].color = sfBackgroundColor;
rectangle[3].color = sfBackgroundColor;
keyboard->getWindow()->draw(rectangle);
Ecriture de la lettre :
sf::Color sfFontColor(fontColor['r'], fontColor['g'], fontColor['b']);
text->setString(value);
text->setColor(sfFontColor);
sf::FloatRect bounds = text->getGlobalBounds();
int xBounds = (width - bounds.width) /2;
int yBounds = (height - bounds.height) /2;
text->setPosition(x+xBounds ,y+yBounds);
keyboard->getWindow()->draw(*text);
Le sf::Text est initialisé dans le constructeur de ma classe :
this->text = new sf::Text();
this->font = new sf::Font();
font->loadFromFile("font/arial.TTF");
text->setFont(*font);
text->setCharacterSize(fontSize);
text->setPosition(x, y);
text->move(15, 5);
Quand je lance ça, j'ai un décalage en y entre la position prévue de la lettre (x+xBounds, y+yBounds) et l'affichage effectif :
(J'ai dessiné en rouge le rectangle représentant la position attendue de la lettre :
sf::VertexArray rectText(sf::Quads, 4);
rectText[0].position = sf::Vector2f(x+xBounds, y+yBounds);
rectText[1].position = sf::Vector2f(x+xBounds+bounds.width, y+yBounds);
rectText[2].position = sf::Vector2f(x+xBounds+bounds.width, y+yBounds+bounds.height);
rectText[3].position = sf::Vector2f(x+xBounds, y+yBounds+bounds.height);
rectText[0].color = sf::Color::Red;
rectText[1].color = sf::Color::Red;
rectText[2].color = sf::Color::Red;
rectText[3].color = sf::Color::Red;
keyboard->getWindow()->draw(rectText);
)
D'où peut venir se décalage ? Comment puis-je régler ça ?
Merci d'avance