Re: changing mouse cursor over a drawing area
- From: Olexiy Avramchenko <ath beast stu cn ua>
- To: Jack Wei <cowlemon yahoo com>
- Cc: gtk-app-devel-list gnome org
- Subject: Re: changing mouse cursor over a drawing area
- Date: Wed, 25 Sep 2002 15:00:45 +0300
Jack Wei wrote:
i can change the cursor just fine over eventboxes, buttons, etc...but why
doesn't it work for drawing areas?  i used the following code...
gdk_window_set_cursor(drawing_area->window,gdk_cursor_new(GdkCursorType(120)));
anyone?  thanks in advance.
The line of code you've posted have to work
(in case you're not using gdk_pointer_grab() before),
except you have a little memory leak.
Look at code I've attached (gtk+-2.0). Push the button
and move pointer to the area above
Olexiy
#include <stdio.h>
#include <gtk/gtk.h>
static GdkCursor        *cursor=NULL;
static GdkCursorType    cursor_type=0;
void callback(GtkWidget *widget, GtkWidget *area)
{
        if (cursor)
                gdk_cursor_unref(cursor);
        if (++cursor_type >= GDK_LAST_CURSOR)
                cursor_type = 0;
        cursor = gdk_cursor_new(cursor_type);
        gdk_window_set_cursor(area->window, cursor);
}
int main(int argc, char **argv)
{
GtkWidget *window;
GtkWidget *vbox;
GtkWidget *frame;
GtkWidget *area;
GtkWidget *button;
    
        gtk_init(&argc, &argv);
        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_main_quit), window);
        gtk_container_set_border_width (GTK_CONTAINER (window), 8);
        vbox = gtk_vbox_new(FALSE, 2);
        gtk_container_add(GTK_CONTAINER(window), vbox);
        frame = gtk_frame_new(NULL);
        gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE,FALSE, 0);
        area = gtk_drawing_area_new();
        gtk_widget_set_size_request(area, 256,256);
        gtk_container_add(GTK_CONTAINER(frame), area);
        button = gtk_button_new_with_label("change cursor");
        g_signal_connect(
                        G_OBJECT(button),
                        "clicked",
                        G_CALLBACK(callback),
                        area
        );
        gtk_box_pack_start(GTK_BOX(vbox), button, FALSE,FALSE, 0);
        gtk_widget_show_all(window);
        
        gtk_main();
        return 0;
}
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]