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 :

Peut-on souligner une seule lettre avec TTF_STYLE_UNDERLINE ou autre ?


Sujet :

SDL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 49
    Points : 26
    Points
    26
    Par défaut Peut-on souligner une seule lettre avec TTF_STYLE_UNDERLINE ou autre ?
    Bonsoir,
    Je cherche à écrire du texte dans une fenêtre SDL avec TTF_RenderText_Blended afin de créer des boutons pour mon jeu (bouton: nouveau, annuler, aide, ...).
    Pour cela, je n'ai aucun problème, la gestion des clics fonctionne bien.
    Or, maintenant, je souhaite pouvoir activer les boutons avec des raccourcis clavier et je souhaite pour cela indiquer les touches sur lesquelles appuyer en soulignant la lettre en question.
    Par exemple, appuyer sur "a" pour "annuler" et appuyer sur "i" pour "aide".
    Je souhaite donc écrire le mot "Annuler " avec juste la lettre "A" souligné. Comment faire?
    Pour l'instant je colle deux textes : un texte "Annuler" écrit normalement puis un texte "A" souligné, superposé sur texte "Annuler". Idem pour le "i" de "Aide"
    Je trouve cela lourd, d'autant plus que je n'ai pas que 2 boutons et que dans certains cas, certains boutons devront être écrits sans lettres soulignées. De plus, il faut essayer plusieurs abscisse pour superposer correctement la lettre soulignée.

    L'indication TTF_STYLE_UNDERLINE permet-elle vraiment que d'écrire le texte entièrement souligné, ou peut-elle écrire une partie de mot?

    Je voulais savoir s'il n'y avait pas une solution plus efficace d'écrire ma fonction EcrireBouton(SDL_Surface *ecran, TTF_Font *police, char *mot, int positionY).

    idee 1 : écrire du texte dont la n iene lettre est soulignée, avec EcrireBouton(SDL_Surface *ecran, TTF_Font *police, char *mot, int numeroLettreSoulignee, int positionY).

    idee 2 : couper le texte en 3 mots , avec une fonction du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    EcrireBouton(SDL_Surface *ecran, TTF_Font *police, char *mot, int numeroLettreSoulignee, int positionY)
    {for i=0->numeroLettreSoulignee-1  texteDebut|i]=mot[i]
    texteSouligne=mot[numeroLettreSoulignee]
    for i=numeroLettreSoulignee+1->fin  texteFin|i]=mot[i]
    }
    idee 3 : autre solution à laquelle je n'ai pas encore pensé?

    Je remercie ceux qui voudront bien m'aider et me conseiller.
    Ludo

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>//pour les nombres aleatoires
    #include <SDL/SDL.h>// pour utiliser la sdl
    #include <SDL/SDL_image.h>// pour coller autre que des bmp
    #include <SDL/SDL_ttf.h>
     
    #define EcranLarg 800
    #define EcranHaut 600
     
    #define coulBlanc 255, 255, 255
    #define coulRouge 255, 0, 0
    #define coulVert 0, 255, 0
    #define coulBleu 0, 0, 255
    #define coulMarron 187, 122, 87
     
    #define couleurTexteVert (SDL_Color){0,255,0,0}
    #define couleurTexteNoir (SDL_Color){0,0,0,0}
     
    void initSDL(SDL_Surface **ecran)
    {
        SDL_Init(SDL_INIT_VIDEO)!=0) ...
        TTF_Init()...
    }
     
    void EcrireBouton(SDL_Surface *ecran, TTF_Font *police, char *mot, int positionY)
    {
        SDL_Surface *texte=TTF_RenderText_Blended(police, mot, couleurTexteVert);
        SDL_Rect positionTexte= {(150-texte->w)/2, positionY+(50-texte->h)/2, 0, 0};//centrage du mot dans la zone de bouton
     
        TTF_Font *policeSouligne=TTF_OpenFont("times.ttf", 30);
        TTF_SetFontStyle(policeSouligne, TTF_STYLE_UNDERLINE);
     
        SDL_Surface *texteSouligneAnnuler=TTF_RenderText_Blended(policeSouligne, "A", couleurTexteVert);
        SDL_Surface *texteSouligneAide=TTF_RenderText_Blended(policeSouligne, "i", couleurTexteVert);
        SDL_Rect positionTexteSouligne= positionTexte;//centrage du mot dans la zone de bouton
     
        SDL_BlitSurface(texte, NULL, ecran, &positionTexte);//collage
     
        if(strcmp(mot,"Annuler")==0)
        {
            positionTexteSouligne.x=positionTexte.x;
            SDL_BlitSurface(texteSouligneAnnuler, NULL, ecran, &positionTexteSouligne);//collage}
        }
        if(strcmp(mot,"Aide")==0)
        {
            positionTexteSouligne.x=positionTexte.x+21;
            SDL_BlitSurface(texteSouligneAide, NULL, ecran, &positionTexteSouligne);
        }
     
        SDL_Flip(ecran);
     
        SDL_FreeSurface(texteSouligneAnnuler);
        SDL_FreeSurface(texteSouligneAide);
        SDL_FreeSurface(texte);//Liberation du texte écrit
    }
     
    int main(int argc, char **argv)
    {
        SDL_Surface *ecran=NULL;
        TTF_Font *police = NULL;//police d'ecriture
     
        initSDL(&ecran);
        police = TTF_OpenFont("times.ttf", 30);//chargement de la police d'ecriture et de la taille
     
        EcrireBouton(ecran, police, "Annuler",100);
        EcrireBouton(ecran, police, "Aide",250);
     
        SDL_Delay(3000);
     
        TTF_CloseFont(police); // Fermeture de la police, doit être fermée avant TTF_Quit()
        TTF_Quit();
        SDL_Quit();
     
        return EXIT_SUCCESS;//on quitte le jeu avec succes
    }

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Salut,

    non.
    SDL_TTF rend du texte avec une police et une couleur. Il ne fait aucun formattage.
    Si tu veux formatter du texte, il faut personnaliser ton rendu en gérant le formattage - type bbcode ou html.
    Le plus simple est de rendre caractère par caractère dans la surface finale. Mais cette opération est relativement lente et ne devrait pas être faîte à chaque frame.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 49
    Points : 26
    Points
    26
    Par défaut
    Merci d'avoir pris le temps de répondre.
    Je suis déçu que l'on puisse pas faire quelque chose de simple pour souligner juste un caractère dans une liste.
    Bonne soirée.
    Ludo

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

Discussions similaires

  1. [2.x] Peut-on avoir deux formulaires dans une seule page avec Symfony ?
    Par Gaylord.P dans le forum Symfony
    Réponses: 4
    Dernier message: 11/02/2016, 13h45
  2. [MySQL] Remplir plusieurs lignes d'une seule table avec le même formulaire
    Par zehni dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 07/09/2006, 12h12
  3. [SharpDevelop] Peut-on vendre une application developpée avec cet EDI ?
    Par doudoustephane dans le forum Sharpdevelop
    Réponses: 2
    Dernier message: 05/07/2006, 00h14
  4. string , obtenir qu'une seul lettre
    Par elekis dans le forum C++
    Réponses: 12
    Dernier message: 15/05/2006, 10h20
  5. Plusieures infos sur une seule ligne avec ou sans tableau
    Par Him dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 17/03/2006, 14h16

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