Forum de la communauté SFML

Aide => Graphique => Discussion démarrée par: cChaD le Août 20, 2013, 01:31:03 pm

Titre: Zone de texte
Posté par: cChaD le Août 20, 2013, 01:31:03 pm
Bonjour,

je suis en train de réaliser un widget de type "zone de texte" avec les retours à la lignes.
Seulement, j'aimerais savoir si mon texte est plus petit que ma zone à l’écran, pour la première ligne c'est assez simple je récupère le Rect.right mais quand il y a plusieurs lignes, je ne sais pas comment récuperer la longueur du rect après le '\n'


Cordialement.
Titre: Re : Zone de texte
Posté par: Laurent le Août 20, 2013, 01:48:15 pm
Ta description est assez confuse. Tu veux calculer la taille de chaque ligne de texte, c'est ça ?
Titre: Re : Zone de texte
Posté par: cChaD le Août 20, 2013, 02:06:03 pm
Oui voilà.
Titre: Re : Zone de texte
Posté par: Laurent le Août 20, 2013, 02:19:23 pm
Il faut utiliser la fonction Text::getCharacterPos. La taille des lignes étant simplement la position des \n.
Titre: Re : Zone de texte
Posté par: cChaD le Août 20, 2013, 02:24:15 pm
Je sais récupérer le nombre de caractères mais moi ce que je veut c'est le rect.
Titre: Re : Zone de texte
Posté par: Laurent le Août 20, 2013, 02:29:08 pm
getCharacterPos renvoie la position en pixels, donc ça te donne bien la taille de tes lignes.

Est-ce que tu as au moins lu la documentation de cette fonction ?

Au fait, pourquoi as-tu besoin de calculer la taille de chaque ligne individuellement ?
Titre: Re : Zone de texte
Posté par: cChaD le Août 20, 2013, 02:49:18 pm
Pour vérifier si elle ne dépasse pas la zone.
Titre: Re : Zone de texte
Posté par: Laurent le Août 20, 2013, 03:04:25 pm
Et pourquoi ligne par ligne plutôt que globalement pour tout le texte ?
Titre: Re : Zone de texte
Posté par: cChaD le Août 20, 2013, 03:36:20 pm
C'est ce que j'avais essayé mais je ne rentrer jamais dans la condition pour les autres lignes, car le rect.right est toujours fixe :/

if(position.x + dimensions.width + padding.left + label->GetTextRect().right  <
   position.x + dimensions.width - padding.right)
{
     textEntered.insert(barPosition, EngineManager::GetInstance()->Event->GetTextEntered)
     barPosition++;
     ...
}
else
{
   textEntered.insert(barPosititon, '\n');
   barPosititon = 0;
   ...
}
 
Titre: Re : Zone de texte
Posté par: Laurent le Août 20, 2013, 03:44:35 pm
Je comprends vraiment rien.

Arrête deux secondes de parler des détails de ton code avec des références ultra vagues que toi seul sait remettre dans leur contexte, et prends le temps de bien nous expliquer ce que tu es en train de faire. Parce que là il n'y a que toi qui te comprend ; nous on débarque on ne sait rien de ton projet ;)

Bon... Tu veux découper ton texte (insérer des sauts de ligne) de manière à ce que rien ne dépasse de son cadre ? C'est ça ??
Titre: Re : Zone de texte
Posté par: cChaD le Août 20, 2013, 03:49:45 pm
Désole, oui c'est exactement ça.
Titre: Re : Zone de texte
Posté par: Laurent le Août 20, 2013, 04:08:31 pm
Citer
oui c'est exactement ça.
Alors pourquoi tu l'as pas dit comme ça tout de suite ? ??? On aurait gagné du temps.

Bref, l'algorithme serait un truc qui ressemble à ça :

for (int i = 0; i < string.size(); ++i)
{
    if (text.getCharacterPos(i).x > cadre.right)
    {
        string.insert(i, '\n');
        ++i;
    }
}

(n'essaye pas de le copier-coller, c'est juste pour donner l'idée générale)
Titre: Re : Zone de texte
Posté par: cChaD le Août 20, 2013, 04:22:59 pm
Super, merci ! ;)