Bonjour, je voudrai ajouter un padding-top sur le notebook.
Savez-vous comment je peux y parvenir ?
Bonjour, je voudrai ajouter un padding-top sur le notebook.
Savez-vous comment je peux y parvenir ?
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.
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.
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.
J'ai essayé d'exécuter ton petit programme de test (sous Linux Mint17, GTK+2) et j'ai ce message:
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.-:1: error: invalid string constant "notebook_bg", expected valid string constant
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
- il m'est difficile de te donner plus d'indications. J'espère que ce diagnostique va te mettre sur la voie.gtk_rc_parse_string has been deprecated since version 3.0 and should not be used in newly-written code.
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
juste au dessus de
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 style \"notebook_bg\" { } style \"notebook\" { } style \"notebook_button\" { }Chez moi je n'obtenais pas l'erreur par ce que j'avais installé les style dans mon système.
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"
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é :
Juste au dessus de
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);
Malgré le fait que area possède des dimensions cohérente, tout n'est pas affiché.
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);
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()
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:
Et tout est revenue dans l'ordre
Code : Sélectionner tout - Visualiser dans une fenêtre à part redraw_rect.height = page->allocation.height + widget->style->ythickness + padding_top;
Partager