docs: Redo drawing area drawing docs

They don't seem to have been updated for a long time...
This commit is contained in:
Benjamin Otte
2010-12-14 21:10:22 +01:00
parent 96a4fc4e5b
commit 9929743f24

View File

@ -35,8 +35,8 @@ the application may want to connect to:
</listitem>
<listitem>
<para>
The "expose_event" signal to handle redrawing the
contents of the widget.
The "draw" signal to handle redrawing the contents of the
widget.
</para>
</listitem>
</itemizedlist>
@ -53,40 +53,47 @@ that drawing is implicitly clipped to the exposed area.
<title>Simple <structname>GtkDrawingArea</structname> usage.</title>
<programlisting>
gboolean
expose_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data)
draw_callback (GtkWidget *widget, cairo_t *cr, gpointer data)
{
cairo_t *cr;
cr = gdk_cairo_create (event->window);
guint width, height;
GdkRGBA color;
cairo_set_source_rgb (cr, 0.0, 0.0, 1.0);
cairo_paint (cr);
width = gtk_widget_get_allocated_width (widget);
height = gtk_widget_get_allocated_height (widget);
cairo_arc (cr,
width / 2.0, height / 2.0,
MIN (width, height) / 2.0,
0, 2 * G_PI);
cairo_destroy (cr);
return TRUE;
gtk_style_context_get_color (gtk_widget_get_style_context (widget),
0,
&color);
gdk_cairo_set_source_rgba (cr, &color);
cairo_fill (cr);
return FALSE;
}
[...]
GtkWidget *drawing_area = gtk_drawing_area_new (<!-- -->);
gtk_widget_set_size_request (drawing_area, 100, 100);
g_signal_connect (G_OBJECT (drawing_area), "expose_event",
G_CALLBACK (expose_event_callback), NULL);
g_signal_connect (G_OBJECT (drawing_area), "draw",
G_CALLBACK (draw_callback), NULL);
</programlisting>
</example>
<para>
Expose events are normally delivered when a drawing area first comes
onscreen, or when it's covered by another window and then uncovered
(exposed). You can also force an expose event by adding to the "damage
region" of the drawing area's window; gtk_widget_queue_draw_area() and
gdk_window_invalidate_rect() are equally good ways to do this. You'll
then get an expose event for the invalid region.
Draw signals are normally delivered when a drawing area first comes
onscreen, or when it's covered by another window and then uncovered.
You can also force a redraw by adding to the "damage region" of the
drawing area's window; use gtk_widget_queue_draw_area() to do this.
You'll then get a draw event for the invalid region.
</para>
<para>
The available routines for drawing are documented on the <link
linkend="gdk-Drawing-Primitives">GDK Drawing Primitives</link> page.
See also gdk_draw_pixbuf() for drawing a #GdkPixbuf.
linkend="gdk3-Cairo-Interaction">GDK Drawing Primitives</link> page
and the cairo documentation.
</para>
<para>