Bonjour à tous.
J'ai déjà souffert un peu avec les Drawing Area notamment parce que
je travail sur la version 3 de GTK et que sur cette version on ne peut
plus faire de : Widget->window, Widget->style et que même si je
commence à peine à utiliser GTK la plupart des tutoriels sont faits
sur la version 2 de GTK et n'utilise donc pas Cairo.
Bref... Après recherche j'ai vu qu'il fallait utiliser cairo pour faire des
DrawingArea. Plusieurs tutoriels sur le net expliquent bien comment
procéder mais aucun d'entres eux ne dit comment créer un zone de
dessin dans une fenêtre et pas faire de la fenêtre une zone de dessin
entière...
Par exemple je sais que je peux dessiner une zone de dessin (couleur
jaune ici) à l'aide du code suivant, seulement toute la fenêtre sera une
DrawingArea ce que je ne veux pas :
Je voulais remplacer la ligne info->cairo... par :
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 #include <gtk/gtk.h> #include <cairo.h> typedef struct Info { GtkWidget * win; cairo_t * cairo; } Info; gboolean on_expose_color (GtkWidget * widget, GdkEvent * e, gpointer data) { Info * info= data; cairo_pattern_t * yellow; double red, green, blue, alpha; info->cairo= gdk_cairo_create (gtk_widget_get_window(widget)); red= 1.0; green= 1.0; blue= 0.0; alpha= 1.00; yellow= cairo_pattern_create_rgba (red, green, blue, alpha); cairo_set_source (info->cairo, yellow); cairo_paint (info->cairo); cairo_pattern_destroy (yellow); cairo_destroy (info->cairo); info->cairo= NULL; return TRUE; } void info_init (Info * info, GtkWidget * win) { info->win = win; info->cairo= NULL; } int main (int argc, char * argv []) { Info info; GtkWidget * win; gtk_init (& argc, & argv); win= gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_widget_set_size_request (win, 200, 200); info_init (& info, win); g_signal_connect (win, "draw", G_CALLBACK (on_expose_color), & info); gtk_widget_show_all (win); gtk_main (); return 0; }
info->cairo= gdk_cairo_create (gtk_widget_queue_draw_area(widget, 2, 5, 50, 20));
mais gtk_widget_queue_draw_area renvoie pas une GtkWindow mais rien (void) donc
cela fait une erreur... je vois pas du tout comment faire.
Note :
Widget->window est remplacé par gtk_widget_get_window(widget) dans GTK 3.
Dans l'absolu ce qui serait encore mieux c'est que quand je clique sur l'icône "Nouveau"
de ma barre d'outils une zone de dessin sur fond noire apparaissent sur une partie
de ma fenêtre principale...
Merci par avance
Bonne soirée
Partager