Widget maison : problème de rendu
Bonjour à tous,
J'écris un widget à partir d'un GtkWidget, et dessine avec Cairo dans sa GdkWindow, ça fonctionne :)
Cependant, j'ai un problème majeur : je ne vois les dessins effectués par Cairo dans gtk_***_expose() que pendant le redimentionnement de mon widget.
Je subodore que "quelqu'un" (le GtkWidget parent !?) redessine sur ma fenêtre juste après moi ou quelque chose dans le genre...
Voici ma gtk_***_expose() (avec en cadeau bonus ma gtk_***_realize au cas-où) :
Code:
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
|
static gboolean
gtk_lonly_expose (GtkWidget* widget,
GdkEventExpose* event)
{
g_return_val_if_fail (GTK_IS_LONLY (widget), FALSE);
g_return_val_if_fail (event != NULL, FALSE);
if (GTK_WIDGET_DRAWABLE (widget))
{
gtk_lonly_paint (GTK_LONLY (widget)); /* => fonction dessinant avec Cairo sur widget->window */
}
return FALSE;
}
static void
gtk_lonly_realize (GtkWidget* widget)
{
GdkWindowAttr attributes;
guint attributes_mask;
g_return_if_fail (GTK_IS_LONLY (widget));
GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
attributes.window_type = GDK_WINDOW_CHILD;
attributes.x = widget->allocation.x;
attributes.y = widget->allocation.y;
attributes.width = widget->allocation.width;
attributes.height = widget->allocation.height;
attributes.wclass = GDK_INPUT_OUTPUT;
attributes.event_mask = gtk_widget_get_events (widget) | GDK_EXPOSURE_MASK;
attributes_mask = GDK_WA_X | GDK_WA_Y;
widget->window = gdk_window_new (gtk_widget_get_parent_window (widget),
&attributes, attributes_mask);
/* create CairoRenderer now because of need of the GdkWindow */
GTK_LONLY (widget)->cr = cairo_reference (gdk_cairo_create (widget->window));
gdk_window_set_user_data (widget->window, widget);
widget->style = gtk_style_attach (widget->style, widget->window);
gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
} |
Qu'ais-je fais de mal ?
Merci d'avance !