IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

SDL_ttf & longueur de chaine


Sujet :

SDL

  1. #1
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut SDL_ttf & longueur de chaine
    Bonjour !


    Pour un petit programme, je doit afficher du texte, jusque là tout est bon.

    Le vrai problème viens du fait que le texte peut avoir une longueur variable donc je voulais savoir s'il est possible par une astuce de connaître la taille en pixels de la chaine avant son rendu sur la surface et ainsi de permettre un rendu multilignes ?

    Le programme est pour un petit challenge donc je suis limité au C standard et SDL et là encore au niveau SDL je suis plus ou moins limité à SDL, SDL_image, SDL_ttf, le reste j'en suis moins sûr


    Merci pour tout
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Il y a cette fonction qui donne la taille que la surface aurait...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int TTF_SizeText(TTF_Font *font, const char *text, int *w, int *h)
     
    font
        The loaded font to use to calculate the size of the string with. 
    text
        The LATIN1 null terminated string to size up. 
    w
        pointer to int in which to fill the text width, or NULL for no 
    desired return value. 
     
    h
        pointer to int in which to fill the text height, or NULL for no 
    desired return value.
    Ce que je faisais c'est je regardais la taille de chaque mot avant de couper en segment pour aller à la ligne... J'avais aussi une solution pour faire du texte justifié mais faudrait que je cherche...

    Jc

  3. #3
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Ok merci ... je commence déjà à imaginer la suite pour trouver où couper .. encore merci
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  4. #4
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Je viens de retomber sur le code... C'était en fait un traitement de texte en X entièrement fait à la main... (Juste pour l'info, je n'en suis pas l'auteur c'est ma femme mais je ne pense pas qu'elle m'en voudra d'en parler )

    Elle avait mis en place des structures de données pour gérer le texte (texte, paragraphe et mot). Les mots étaient des listes chaînées et chaque mot avait sa position pour le rendu...

    Donc on initialise tous les mots de la phrase comme ayant la position (0,0)... Et on parcourt les mots en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Pour chaque mot 
     
    Mettre la position du mot à (Position du mot précédent + Taille du mot précédent)
     
    Si cette position + taille du mot dépasse la largeur de l'écran alors
       Ligne de ce mot = Ligne du mot précédent + 1
       Position sur la ligne = 0 (pour mettre à gauche)
    Fin Si
     
    Afficher le mot
    Fin Pour
    Je pense que t'arriveras à remplir les trous
    Jc

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Je pensais à quelque chose dans cet esprit mais j'ai pas testé:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    fontcion split_text (ch:chaine)
       debut
          Pour i de 0 à longueur (chaine) faire
             si chaine [i] est égal à un espace
                mark <- i
             fsi
     
             size <- size + taille (chaine [i])
     
             si size est supérieur à la longueur de l'ecran
                /* Ici on coupe la chaine à partir du dernier emplacement
                    d'un espace entre deux mots.
                */
             fsi
          fpour
       fin
     
     
    Légenre:
    --------
    chaine = chaine à rendre à l'écran
    i      = variable d'incrémentation
    mark   = emplacement du dernier espace blanc trouvé pour la coupure
    size   = taille de la chaine avec les lettres déjà parcourues
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] Expression régulière et longueur de chaine
    Par cbroissa dans le forum Langage
    Réponses: 30
    Dernier message: 23/05/2006, 19h33
  2. [Debutant] Longueur de chaine
    Par georgeabitbol dans le forum Oracle
    Réponses: 2
    Dernier message: 20/03/2006, 16h42
  3. Liste modifiable : longueur de chaine.
    Par pifou02 dans le forum Access
    Réponses: 8
    Dernier message: 09/01/2006, 15h47
  4. [MySQL] controle numérique de longueur de chaine en php
    Par melli dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 07/12/2005, 11h24
  5. BDE, la longueur de chaine ne peut dépasser 256 BYTES
    Par valoji dans le forum Bases de données
    Réponses: 1
    Dernier message: 17/10/2005, 08h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo