Use GdkEventExpose.region: GTK+ 3 Reference Manual

## Use GdkEventExpose.region

Why. The `region` field of GdkEventExpose allows you to redraw less than the traditional `GdkEventRegion.area`.

In early GTK+ versions, the GdkEventExpose structure only had an `area` field to let you determine the region that you needed to redraw. In current GTK+, this field still exists for compatibility and as a simple interface. However, there is also a `region` field which contains a fine-grained region. The `area` field is simply the bounding rectangle of the `region`.

Widgets that are very expensive to re-render, such as an image editor, may prefer to use the `GdkEventExpose.region` field to paint as little as possible. Widgets that just use a few drawing primitives, such as labels and buttons, may prefer to use the traditional `GdkEventExpose.area` field for simplicity.

Regions have an internal representation that is accessible as a list of rectangles. To turn the `GdkEventExpose.region` field into such a list, use `gdk_region_get_rectangles()`:

    static gboolean
    my_widget_expose_event_handler (GtkWidget *widget, GdkEventExpose *event)
    {
      GdkRectangle *rects;
      int n_rects;
      int i;

      gdk_region_get_rectangles (event->region, &rects, &n_rects);

      for (i = 0; i < n_rects; i++)
        {
          /* Repaint rectangle: (rects[i].x, rects[i].y),
           *                    (rects[i].width, rects[i].height)
           */
        }

      g_free (rects);

      return FALSE;
    }