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

Auteur Sujet: [résolu] Comment centrer une lettre sur des coordonnées ?  (Lu 3646 fois)

0 Membres et 1 Invité sur ce sujet

virelio

  • Newbie
  • *
  • Messages: 42
    • Voir le profil
[résolu] Comment centrer une lettre sur des coordonnées ?
« le: Avril 09, 2012, 02:47:04 pm »
J'utilise le code ci-dessous pour centrer une lettre sur la position demiL, demiH.
Le centrage horizontal est correct mais le centrage vertical est mauvais et différent selon que la lettre est ronde (O, Q C) ou non.

    sf::Glyph glyph = myFont.getGlyph( (sf::Uint32)myString[0], myText.getCharacterSize(), false);
    sf::IntRect r = glyph.bounds;
    myText.setPosition(demiL - (r.width - r.left)/2 - r.left, demiH + (r.top - r.height)/2 );

Quelle est la bonne méthode et à quoi correspond, du point de vue position r.top et r.left (r = glyph.bounds)

Assouan:
Citer
Pourquoi ne pas simplement faire :

myText.setPosition(demiL - (myText.setGlobalBounds().width / 2), demiH - (myText.getGlobalBounds().height / 2));

Ceci ne centre pas les lettres car le point d'origine de chaque lettre lui est propre afin d'assurer leur alignement horizontal sur "la ligne de base".
« Modifié: Avril 09, 2012, 10:36:35 pm par virelio »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Comment centrer une lettre sur des coordonnées ?
« Réponse #1 le: Avril 09, 2012, 04:32:57 pm »
r.top représente le haut du glyphe, mais est relatif à la ligne de base. Donc elle sera négative. Dans ton cas, puisque tu ignores la ligne de base, il vaut mieux que tu utilises uniquement r.height, et que tu considères r.top à 0.
Laurent Gomila - SFML developer

virelio

  • Newbie
  • *
  • Messages: 42
    • Voir le profil
Re : Comment centrer une lettre sur des coordonnées ?
« Réponse #2 le: Avril 09, 2012, 10:19:25 pm »
Et bien non Laurent... voilà ce qu'il faut faire :

sf::Glyph glyph = myFont.getGlyph( (sf::Uint32)myString[0], myText.getCharacterSize(), false);
sf::IntRect rg = glyph.bounds;
sf::FloatRect rt = myText.getGlobalBounds();
myText.setPosition(demiL - rg.width/2 - rg.left, demiH - rt.top + rg.top/2);

Autant le centrage droit-gauche est basique autant celui haut-bas est quand-même bizarre. J'ai testé avec différentes polices et différentes tailles : mes lettres restent parfaitement centrées.
J'aimerais maintenant les faire tourner autour de leur centre ces foutus lettres... 
Je vais donc m'attaquer à règler setOrigin()...

virelio

  • Newbie
  • *
  • Messages: 42
    • Voir le profil
Re : Comment centrer une lettre sur des coordonnées ?
« Réponse #3 le: Avril 09, 2012, 10:24:23 pm »
myText.setOrigin(rg.width/2 + rg.left, rt.top - rg.top/2);
c'était simple  ;)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : [résolu] Comment centrer une lettre sur des coordonnées ?
« Réponse #4 le: Avril 09, 2012, 10:45:39 pm »
Je suis pas sûr que ce soit la solution la plus logique, mais en tout cas bravo pour l'avoir trouvée ;D

Il faudrait que je fasse quelques tests pour t'en dire plus mais malheureusement je n'ai pas trop le temps en ce moment.
Laurent Gomila - SFML developer