cairo_in_fill w/rotate?

Mark Olesen <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <CAExh6bZxUFjZ24FBTo+cCTcr=WJv2-gcQVSg7dMhcNTNSPfVfA@mail.gmail.com>
Is cairo_in_fill supposed to work with rotation?
The following code gets hits on the un-rotated rectangle.
It's like the rotation is ignored. Thanks in advance.

libcairo.so.2.11400.6

#include <gtk/gtk.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

gboolean
motion_notify_callback(GtkWidget *widget,
                       GdkEventMotion  *event,
                       gpointer   user_data)
{
    GtkWindow *l_win;
    int l_hit;
    cairo_t *cr;

    l_win = (GtkWindow *)user_data;

    cr = gdk_cairo_create(gtk_widget_get_window(GTK_WIDGET(l_win)));

    cairo_new_path(cr);
    cairo_rotate(cr, 45.0); // ROTATION SEEMS TO BE IGNORED
    cairo_rectangle(cr, 0.0, 0.0, 100.0, 100.0);

    // only gets hits on un-rotated rectangle
    l_hit = cairo_in_fill(cr, (*event).x, (*event).y);
    printf("rect hit=%d %lf %lf\n", l_hit, (*event).x, (*event).y);

    cairo_destroy(cr);

    return 1;
}

gboolean
draw_callback(GtkWidget *widget, cairo_t *cr, gpointer data)
{

    cairo_save(cr);
    cairo_rotate(cr, 45.0);
    cairo_rectangle(cr, 0.0, 0.0, 100.0, 100.0);
    cairo_stroke(cr);
    cairo_restore(cr);

    return FALSE;
}

int
main(int argc, char *argv[])
{

    gtk_init(&argc, &argv);

    GtkWindow *g_win = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
    g_signal_connect(G_OBJECT(g_win), "destroy", G_CALLBACK(gtk_main_quit),
NULL);

    GtkBox *box = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL, 0));

    GtkDrawingArea* g_drawing_area = gtk_drawing_area_new();

    gtk_box_pack_start(box, GTK_WIDGET(g_drawing_area), 1, 1, 0);
    gtk_container_add(GTK_CONTAINER(g_win), GTK_WIDGET(box));
    gtk_widget_set_size_request(g_drawing_area, 300, 300);

    g_signal_connect(G_OBJECT(g_drawing_area), "draw",
                     G_CALLBACK(draw_callback), NULL);

    g_signal_connect(G_OBJECT(g_drawing_area), "motion-notify-event",
                     G_CALLBACK(motion_notify_callback), g_win);

    gtk_widget_add_events(
        g_drawing_area,
        gtk_widget_get_events(g_drawing_area) |
        GDK_POINTER_MOTION_MASK);

    gtk_widget_show_all(GTK_WIDGET(g_win));

    gtk_main();

    return 0;
}

-- 
cairo mailing list
[email protected]
http://lists.cairographics.org/mailman/listinfo/cairo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.