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 :

[Gtk2.24] Hacking GtkNotebook


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Par défaut [Gtk2.24] Hacking GtkNotebook
    Bonjour, je voudrai ajouter un padding-top sur le notebook.

    Savez-vous comment je peux y parvenir ?

  2. #2
    Membre éclairé
    Profil pro
    Retraité
    Inscrit en
    Novembre 2009
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2009
    Messages : 331
    Par défaut
    Le plus simple me semble être d'inclure le notebook dans une GtkBox ce qui va permettre de maîtriser ce que l'on met autour.

  3. #3
    Membre chevronné Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Par défaut
    Merci pvincent de ton intervention,

    Tu as raison, c'est aussi une possibilité.
    Mais je voudrai pouvoir dessiner un "background" derrière mes tabs. Ce que j'ai fait depuis la fonction my_notebook_expose()

    Malheureusement, j'ai un bug a au première affichage. Le focus n'est pas dessiné entièrement, sûrement a cause de mes modifications que j'ai faite.
    Mais dès que je change la sélection, le focus se redessine bien.

    Nom : notebook.png
Affichages : 96
Taille : 13,9 Ko


    J'ai simplifier au maximum ma source. Mes modifications (qui entraîne le bug) son dans notebook.c et son toute en rapport avec la variable padding_top
    notebook.zip

    Je m'arrache les cheveux depuis hier, donc si quelqu'un avais la gentillesse d'apporter son expertise ça serrai formidable.

  4. #4
    Membre éclairé
    Profil pro
    Retraité
    Inscrit en
    Novembre 2009
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2009
    Messages : 331
    Par défaut
    J'ai essayé d'exécuter ton petit programme de test (sous Linux Mint17, GTK+2) et j'ai ce message:
    -:1: error: invalid string constant "notebook_bg", expected valid string constant
    Quand je supprime les lignes contenant notebook_bg, "notebook_bg" est remplacée par "notebook": c'est donc au niveau de cette première chaine que ça se passe.
    Le résultat sur l'écran semble aléatoire: tantôt c'est le phénomène que tu décrit, tantôt ça à l'air de marcher.
    Comme je n'ai jamais utilisé ce parser et que je n'ai pas l'intention de le faire, - je note que
    gtk_rc_parse_string has been deprecated since version 3.0 and should not be used in newly-written code.
    - il m'est difficile de te donner plus d'indications. J'espère que ce diagnostique va te mettre sur la voie.

  5. #5
    Membre chevronné Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Par défaut
    Merci d'avoir compiler et confirmé que j'ai effectivement bien un bug.

    J'arrive a reproduire le bug en donnant le focus a une autre fenêtre puis après avoir redonné le focus a la fenêtre de mon programme en cliquant sur le premier onglet. (A noter que si je clique sur le 3eme onglet je n'arrive pas a reproduire le bug)

    Pour ceux qui serrais intéressé; L'erreur que remonte pvincent viens du faite que les style "notebook_bg" et "notebook" ne sont pas définie. Il faut donc les déclarer:

    Dans le fichier main.c, en paramètre de gtk_rc_parser_string : il faut ajouter (avec les "\" devant les quote
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    style \"notebook_bg\" { }
    style \"notebook\" { }
    style \"notebook_button\" { }
    juste au dessus de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    widget_class "*<MyNotebook>" style "notebook_bg"
    widget_class "*<MyNotebook>*<GtkEventBox>" style "notebook_bg"
    widget_class "*<MyNotebook>*<GtkDrawingArea>" style "notebook_bg"
    widget_class "*<MyNotebook>*<GtkLayout>" style "notebook_bg"
    widget_class "*<MyNotebook>*<GtkLabel>" style "notebook_bg"
    widget_class "*<MyNotebook>" style "notebook"
    widget_class "*<MyNotebook>*<GtkButton>" style "notebook_button"
    widget_class "*<MyNotebook>*<GtkButton>*<GtkLabel>" style "notebook_button"
    Chez moi je n'obtenais pas l'erreur par ce que j'avais installé les style dans mon système.


    Pour mieux comprendre le problème au quelle je me frotte, dans le fichier notebook.c dans la fonction my_notebook_draw_focus, j'ai ajouté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
              cairo_t *cr = gdk_cairo_create(GDK_WINDOW(gtk_widget_get_window(widget)));
              cairo_set_source_rgb(cr, 1.0, 0.0, 0.0);
              cairo_rectangle(cr, 0, 0, 100, 100);
              cairo_fill(cr);
              cairo_destroy(cr);
    Juste au dessus de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
          gtk_paint_focus (widget->style, event->window,
                               gtk_widget_get_state (widget), NULL, widget, "tab",
                   area.x, area.y, area.width, area.height);
    Malgré le fait que area possède des dimensions cohérente, tout n'est pas affiché.

    Je pense que c'est une histoire de window (gdk_window_move_resize) mais sans succès...


    PS: pvincent, je ne me fait pas de fausse illusion, se cogner 8000 lignes pour un padding_top oublié ... Mais ça m'aide a poser mon problème et qui sais...

    Je vais cherche du coté de : gtk_paint_focus()

  6. #6
    Membre chevronné Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Par défaut
    C'est en faite la fonction gdk_window_invalidate_rect la clè du problème.

    Dans la fonction my_notebook_redraw_tabs() j'ai ajouté le padding_top:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          redraw_rect.height = page->allocation.height + widget->style->ythickness + padding_top;
    Et tout est revenue dans l'ordre

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

Discussions similaires

  1. [eclipse 3.0] motif et gtk2
    Par sonialem2000 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 02/08/2004, 15h00
  2. Info Hacking adresse ip
    Par DJ_Kéké dans le forum Développement
    Réponses: 12
    Dernier message: 29/06/2004, 14h55

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