<div dir="ltr"><div><div>Is cairo_in_fill supposed to work with rotation?<br></div>The following code gets hits on the un-rotated rectangle. <br></div>It's like the rotation is ignored. Thanks in advance.<br><br>libcairo.so.2.11400.6<br><div><div><div><div><div><br>#include <gtk/gtk.h><br>#include <string.h><br>#include <stdlib.h><br>#include <stdio.h><br><br>gboolean<br>motion_notify_callback(GtkWidget *widget,<br>                       GdkEventMotion  *event,<br>                       gpointer   user_data)<br>{<br>    GtkWindow *l_win;<br>    int l_hit;<br>    cairo_t *cr;<br><br>    l_win = (GtkWindow *)user_data;<br><br>    cr = gdk_cairo_create(gtk_widget_get_window(GTK_WIDGET(l_win)));<br><br>    cairo_new_path(cr);<br>    cairo_rotate(cr, 45.0); // ROTATION SEEMS TO BE IGNORED<br>    cairo_rectangle(cr, 0.0, 0.0, 100.0, 100.0);<br><br></div><div>    // only gets hits on un-rotated rectangle<br></div><div>    l_hit = cairo_in_fill(cr, (*event).x, (*event).y); <br>    printf("rect hit=%d %lf %lf\n", l_hit, (*event).x, (*event).y);<br><br>    cairo_destroy(cr);<br><br>    return 1;<br>}<br><br>gboolean<br>draw_callback(GtkWidget *widget, cairo_t *cr, gpointer data)<br>{<br><br>    cairo_save(cr);<br>    cairo_rotate(cr, 45.0);<br>    cairo_rectangle(cr, 0.0, 0.0, 100.0, 100.0);<br>    cairo_stroke(cr);<br>    cairo_restore(cr);<br><br>    return FALSE;<br>}<br><br>int<br>main(int argc, char *argv[])<br>{<br><br>    gtk_init(&argc, &argv);<br><br>    GtkWindow *g_win = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));<br>    g_signal_connect(G_OBJECT(g_win), "destroy", G_CALLBACK(gtk_main_quit), NULL);<br><br>    GtkBox *box = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL, 0));<br><br>    GtkDrawingArea* g_drawing_area = gtk_drawing_area_new();<br><br>    gtk_box_pack_start(box, GTK_WIDGET(g_drawing_area), 1, 1, 0);<br>    gtk_container_add(GTK_CONTAINER(g_win), GTK_WIDGET(box));<br>    gtk_widget_set_size_request(g_drawing_area, 300, 300);<br><br>    g_signal_connect(G_OBJECT(g_drawing_area), "draw",<br>                     G_CALLBACK(draw_callback), NULL);<br><br>    g_signal_connect(G_OBJECT(g_drawing_area), "motion-notify-event",<br>                     G_CALLBACK(motion_notify_callback), g_win);<br><br>    gtk_widget_add_events(<br>        g_drawing_area,<br>        gtk_widget_get_events(g_drawing_area) |<br>        GDK_POINTER_MOTION_MASK);<br><br>    gtk_widget_show_all(GTK_WIDGET(g_win));<br><br>    gtk_main();<br><br>    return 0;<br>}<br><br></div></div></div></div></div></div>