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 :

Modifier position texte pango gtk gdk


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 9
    Par défaut Modifier position texte pango gtk gdk
    Bonjour,

    J'aimerais pouvoir modifier la position de mon texte, qui s'ecrit obligatoirement en haut a gauche de ma fenetre.
    J'ai regarder la doc je n'arrive pas a trouver une fonction qui le fait sous pango.
    Voici mon code.

    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
    77
    78
    79
    80
    81
    82
    83
    #include <pango/pango.h>
    #include <gtk/gtk.h>
    #include <stdlib.h>
    #include <stdio.h>
     
    void cb_expose_event (GtkWidget *, gpointer);
     
    int main (int argc, char **argv)
    {
        GtkWidget *p_main_window = NULL;
        GtkWidget *p_drawing_area = NULL;
     
        gtk_init (&argc, &argv);
        p_main_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
        gtk_window_set_default_size(GTK_WINDOW(p_main_window), 640, 480);
     
        p_drawing_area = gtk_drawing_area_new ();
        g_signal_connect (G_OBJECT (p_drawing_area), "expose_event",G_CALLBACK (cb_expose_event), NULL);
        gtk_container_add (GTK_CONTAINER (p_main_window), p_drawing_area);
        gtk_widget_show_all (p_main_window);
        gtk_main ();
        return 0;
    }
     
    void cb_expose_event (GtkWidget *p_widget, gpointer user_data)
    {
        GdkGC *gc;
        int w;
        GdkPoint points[3];
        GdkPoint points2[3];
        char tab[]="Hello";
     
        GdkColor colors[2];
        GdkGC *color_gc = gdk_gc_new (p_widget->window);
     
        colors[0].red = 0;
        colors[0].green = 0;
        colors[0].blue = 0;
     
        colors[1].red = 5000;
        colors[1].green = 0;
        colors[1].blue = 65000;
        gdk_colormap_alloc_color (gdk_colormap_get_system(), &colors[0], FALSE, TRUE);
        gdk_colormap_alloc_color (gdk_colormap_get_system(), &colors[1], FALSE, TRUE);
     
        gdk_gc_set_foreground (color_gc, &colors[0]);
     
            points[0].x=0;
            points[0].y=0;
            points[1].x=0;
            points[1].y=200;
            points[2].x=200;
            points[2].y=300;
            points2[0].x=0;
            points2[0].y=0;
            points2[1].x=200;
            points2[1].y=300;
            points2[2].x=100;
            points2[2].y=300;
            gc=p_widget->style->fg_gc[GTK_WIDGET_STATE (p_widget)];
            //gdk_gc_set_rgb_bg_color(gc,&color);
            PangoContext *p_context = NULL;
            PangoLayout *p_layout = NULL;
            p_context = gtk_widget_get_pango_context (p_widget);
            p_layout = pango_layout_new (p_context);
            //pango_layout_set_indent(p_layout,-100);
            pango_layout_set_alignment(p_layout, PANGO_ALIGN_CENTER);
            pango_layout_set_text (p_layout, tab, -1);
            pango_layout_set_text (p_layout, "salut", 5);
            gdk_draw_layout (p_widget->window,p_widget->style->fg_gc[GTK_WIDGET_STATE (p_widget)],0,0,p_layout);
    //        gdk_draw_line(p_widget->window,gc,(points[0].x),(points[0].y),(points[1].x),(points[1].y));
            gdk_draw_lines(p_widget->window,color_gc,points,3);
            gdk_gc_set_foreground (color_gc, &colors[1]);
     
            gdk_draw_lines(p_widget->window,color_gc,points2,3);
            gdk_draw_arc(p_widget->window,color_gc,FALSE,200,200,10,150,0,360*64);
     
            gdk_colormap_free_colors (gdk_colormap_get_system(),colors,2);
            //gtk_widget_queue_draw( aire_de_dessin )
            g_object_unref (p_layout);
     
            (void)user_data;
        }
    Merci pour votre aide.

  2. #2
    Membre chevronné
    Inscrit en
    Janvier 2007
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 329
    Par défaut
    Salut, et bienvenue !

    Le "pango_layout_set_alignment(p_layout, PANGO_ALIGN_CENTER)", ça sert juste à mettre la justification à "centré" ; tu ne verra de différence que si le texte du Layout est multi-lignes.


    Pour centrer, il faut récupérer les dimensions de la zone de dessin (avec gtk_widget_get_allocation() ou gdk_drawable_get_size()), récupérer les dimensions du Layout (avec pango_layout_get_pixel_size()), faire un petit calcul pour que le centre du Layout corresponde au centre du dessin, puis appeler le gdk_draw_layout() avec les bonnes coordonnées.


    -

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 9
    Par défaut
    Merci pour cette réponse.

    Je suis passé entre temps sous cairo, qui est comment dire, bien plus simple
    Je testerai cette solution dès que je peux.

    Cordialement

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Hmm, si tu veux afficher du texte avec cairo, il est fortement recommandé d'utiliser pango pour cela, donc si la complexité venait de pango, tu ne vas pas pouvoir y échapper

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 9
    Par défaut
    La complexité viens surtout de fait que je capte un beignets des manuels des fonctions sous linux (pango par exemple).

    Ayant trouvé un tuto sous cairo, j'ai reussit a avancé

    J'ai presque reussit a faire tout ce que je voulais, placer le texte aux positions que je désire, tracer mes courbes..Me reste plus que quelques souci comme un fond blanc à ma draw area, arrivé à effacer cette draw area completement pour mettre de nouvelles courbes ...

    Si tu en a un sous pango je dit pas non

    Cordialement.

Discussions similaires

  1. Modifier position graphique d'une zone de texte et traitement des données
    Par Globolite dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/06/2014, 17h59
  2. [FLASH MX2004] Modifier du texte
    Par drizztoli dans le forum Flash
    Réponses: 3
    Dernier message: 28/05/2005, 10h03
  3. Réponses: 5
    Dernier message: 31/01/2005, 09h32
  4. modifier les texte dans un <span>
    Par Flobel dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 03/12/2004, 13h58

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