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

GTK+ avec C & C++ Discussion :

tags gtk text buffer


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 316
    Par défaut tags gtk text buffer
    Bonjour,

    Je cherches à changer la taille de la police de caractère d'une partie d'un gtk_text_buffer.

    A cette fin, j'ai crée une combobox me servant de menu de selection, je crée des valeurs dedans via une boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    	combobox=gtk_combo_box_new_text();
    	gtk_container_add(GTK_CONTAINER(barre_outil),GTK_WIDGET(combobox));
    	for (boucle=6;boucle<36;boucle=boucle+2)
    	{
    		sprintf(chaine,"%d",boucle);
    		printf("%s\n",chaine);
    		gtk_combo_box_append_text(GTK_COMBO_BOX(combobox),chaine);
    	}
     	gtk_combo_box_set_active(GTK_COMBO_BOX(combobox),1);
    	g_signal_connect(G_OBJECT(combobox),"changed",G_CALLBACK(routine_taille_carac),fenetre);
    voici ma fonction routine_taille_carac appelée par la combobox :

    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
     
    int routine_taille_carac()
    {
    int			taille;
    int			test_selection;
    GtkTextIter	start,end;
    //GtkTextTagTable tag_table;
    char		nom_tag_2[200];
     
    	printf("Routine taille carac selectionnée\n");
    	taille=gtk_combo_box_get_active(GTK_COMBO_BOX(combobox));
    	printf("Valeur var taille %d\n",taille);
    	taille=(taille*2)+6;
    	printf("Valeur selectionnée : %d\n",taille);
    	test_selection=gtk_text_buffer_get_selection_bounds(buffer,&start,&end);
    	if (test_selection==TRUE)
    	{
    		sprintf(chaine,"Arial,%d",taille);
    		printf("chaine tag : %s\n",chaine);
    		sprintf(nom_tag,"texte_agrandissement%d",taille);
    		for (boucle=6;boucle<36;boucle=boucle+2)
    		{
    //			sprintf(chaine,"%d",boucle);
    //			printf("%s\n",chaine);
    //			sprintf("",nom_tag2);
    			sprintf(nom_tag_2,"test_agrandissement%d",boucle);
    			printf("tag Ã* supprimer : %s\n",nom_tag_2);
    			gtk_text_buffer_remove_tag(buffer,GTK_TEXT_TAG(nom_tag_2),&start,&end);
    			printf("Suppression ok\n");
    		}	
    		printf("---\n");	
    		gtk_text_buffer_create_tag(buffer,nom_tag,"font",chaine,NULL);
    		gtk_text_buffer_remove_tag(buffer,nom_tag,&start,&end);
    		gtk_text_buffer_apply_tag_by_name(buffer,nom_tag,&start,&end);
    		gtk_text_buffer_set_modified(buffer,TRUE);
    Ce code fonctionne en enlevant la boucle for. La contrainte étant que si je passe le texte de la taille 8 à 10, cela fonctionne, de 10 à x aussi mais impossible de revenir sur une taille ayant déjà été utilisé. ( probablement à cause de la fonction create_tag sur un tag déjà existant )

    Pour m'en sortir, j'ai ajouté la boucle for servant à supprimer tous les tags de taille de police de la même façon utilisée pour la création de la combobox., Le tag qui'il me faut est crée ensuite.
    Cela déclenche une erreur de segmentation. Je suppose qu'elle est due à la tentative de destruction d'un tag inconnu.

    Je sais que ma méthode est merdique, mais j'ai pas réussi à mieux pour le moment.

    Merci pour vos lumières.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  2. #2
    Invité de passage
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 1
    Par défaut Lookup
    Je réponds tard!, à tout hasard (je viens de m'inscrire...)

    La solution est dans gtk_text_tag_table_lookup qui permet de récupérer un GtkTextTag déjà créé en cherchant son nom.

    A la création du buffer tu peux créer tous les tags avec une boucle (en leur donnant des noms différents, genre "font10", "font8", "font12") puis quand la taille est sélectionné aller chercher ce tag là.
    Ou bien créer le tag au moment où la police est choisie mais uniquement s'il n'existe pas encore.

    PS : sinon il aurait fallu garder quelque part une liste de Tags, ça marche aussi

Discussions similaires

  1. erreur au niveau du tag html:text
    Par ahmed_rabat dans le forum Struts 1
    Réponses: 8
    Dernier message: 29/07/2009, 07h49
  2. Probleme avec les tags et mon buffer =(
    Par SiOuZ dans le forum GTK+ avec C & C++
    Réponses: 7
    Dernier message: 12/01/2009, 10h05
  3. Réponses: 1
    Dernier message: 20/08/2008, 13h49
  4. [GTK+]Comment insérer du texte dans un gtk text ?
    Par jojo930 dans le forum GTK+ avec C & C++
    Réponses: 14
    Dernier message: 11/01/2008, 01h09
  5. Réponses: 8
    Dernier message: 24/09/2007, 15h39

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