forked from AuroraMiddleware/gtk
Make drawing example work again
Using ::configure-event and ::draw on a drawing area doesn't work anymore. Use ::size-allocate and a draw function instead.
This commit is contained in:
parent
4d6fbdd19e
commit
bb568a51d4
@ -17,39 +17,44 @@ clear_surface (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Create a new surface of the appropriate size to store our scribbles */
|
/* Create a new surface of the appropriate size to store our scribbles */
|
||||||
static gboolean
|
static void
|
||||||
configure_event_cb (GtkWidget *widget,
|
size_allocate_cb (GtkWidget *widget,
|
||||||
GdkEventConfigure *event,
|
GtkAllocation *alloc,
|
||||||
gpointer data)
|
int baseline,
|
||||||
|
GdkRectangle *clip,
|
||||||
|
gpointer data)
|
||||||
{
|
{
|
||||||
if (surface)
|
if (surface)
|
||||||
cairo_surface_destroy (surface);
|
{
|
||||||
|
cairo_surface_destroy (surface);
|
||||||
|
surface = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
surface = gdk_window_create_similar_surface (gtk_widget_get_window (widget),
|
if (gtk_widget_get_window (widget))
|
||||||
CAIRO_CONTENT_COLOR,
|
{
|
||||||
gtk_widget_get_width (widget),
|
surface = gdk_window_create_similar_surface (gtk_widget_get_window (widget),
|
||||||
gtk_widget_get_height (widget));
|
CAIRO_CONTENT_COLOR,
|
||||||
|
gtk_widget_get_width (widget),
|
||||||
|
gtk_widget_get_height (widget));
|
||||||
|
|
||||||
/* Initialize the surface to white */
|
/* Initialize the surface to white */
|
||||||
clear_surface ();
|
clear_surface ();
|
||||||
|
}
|
||||||
/* We've handled the configure event, no need for further processing. */
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Redraw the screen from the surface. Note that the ::draw
|
/* Redraw the screen from the surface. Note that the ::draw
|
||||||
* signal receives a ready-to-be-used cairo_t that is already
|
* signal receives a ready-to-be-used cairo_t that is already
|
||||||
* clipped to only draw the exposed areas of the widget
|
* clipped to only draw the exposed areas of the widget
|
||||||
*/
|
*/
|
||||||
static gboolean
|
static void
|
||||||
draw_cb (GtkWidget *widget,
|
draw_cb (GtkDrawingArea *drawing_area,
|
||||||
cairo_t *cr,
|
cairo_t *cr,
|
||||||
gpointer data)
|
int width,
|
||||||
|
int height,
|
||||||
|
gpointer data)
|
||||||
{
|
{
|
||||||
cairo_set_source_surface (cr, surface, 0, 0);
|
cairo_set_source_surface (cr, surface, 0, 0);
|
||||||
cairo_paint (cr);
|
cairo_paint (cr);
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Draw a rectangle on the surface at the given position */
|
/* Draw a rectangle on the surface at the given position */
|
||||||
@ -162,11 +167,10 @@ activate (GtkApplication *app,
|
|||||||
|
|
||||||
gtk_container_add (GTK_CONTAINER (frame), drawing_area);
|
gtk_container_add (GTK_CONTAINER (frame), drawing_area);
|
||||||
|
|
||||||
/* Signals used to handle the backing surface */
|
gtk_drawing_area_set_draw_func (GTK_DRAWING_AREA (drawing_area), draw_cb, NULL, NULL);
|
||||||
g_signal_connect (drawing_area, "draw",
|
|
||||||
G_CALLBACK (draw_cb), NULL);
|
g_signal_connect_after (drawing_area, "size-allocate",
|
||||||
g_signal_connect (drawing_area,"configure-event",
|
G_CALLBACK (size_allocate_cb), NULL);
|
||||||
G_CALLBACK (configure_event_cb), NULL);
|
|
||||||
|
|
||||||
/* Event signals */
|
/* Event signals */
|
||||||
g_signal_connect (drawing_area, "motion-notify-event",
|
g_signal_connect (drawing_area, "motion-notify-event",
|
||||||
|
Loading…
Reference in New Issue
Block a user