Re: "ghost" image on canvas
- From: Diego Zuccato <diego otello alma unibo it>
- To: gtk-list gnome org
- Subject: Re: "ghost" image on canvas
- Date: Tue, 17 Dec 2002 00:34:39 +0000
Diego Zuccato wrote:
That's strictly related to the previous. I could reproduce a really
strange behaviour using the attached code.
The only difference lies in the pointer type. And I can't understand why
in the hell should that matter...
The code should display a thumbnail (the file 001_01.jpg in the current
directory, must be 256x256) when first clicked and clear the window when
clicked again (like a toggle button). canvas_ok.c works as expected,
while canvas_bad not :-(
Please, HELP! I's driving me crazy :-(
BYtE,
Diego.
#include <gtk/gtk.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <gdk-pixbuf/gnome-canvas-pixbuf.h>
gboolean
canvas_event(GtkWidget *w, GdkEvent *e, gpointer d)
{
gpointer bg;
if(e->type!=GDK_BUTTON_PRESS)
return FALSE;
bg=gtk_object_get_data(GTK_OBJECT(d), "thumb");
if(bg) {
printf("Destroying!\n");
gtk_object_destroy(GTK_OBJECT(bg));
bg=NULL;
} else {
GdkPixbuf *pb=gdk_pixbuf_new_from_file("001_01.jpg");
bg=gnome_canvas_item_new(gnome_canvas_root(GNOME_CANVAS(d)),
gnome_canvas_pixbuf_get_type(), "pixbuf", pb, NULL);
}
gtk_object_set_data(GTK_OBJECT(d), "thumb", bg);
return TRUE;
}
int main( int argc, char *argv[] )
{
GtkWidget *window;
GnomeCanvas *gc=NULL;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_widget_push_visual (gdk_imlib_get_visual ());
gtk_widget_push_colormap (gdk_imlib_get_colormap ());
gc = gnome_canvas_new ();
gtk_widget_pop_colormap ();
gtk_widget_pop_visual ();
gtk_container_add (GTK_CONTAINER (window), gc);
gtk_widget_set_usize (gc, 256, 256);
gnome_canvas_set_scroll_region (gc, 0, 0, 256, 256);
gtk_signal_connect(GTK_OBJECT(gc), "event", canvas_event, gc);
gtk_widget_show_all(window);
gtk_main ();
return(0);
}
//#include <gnome/gnome.h>
#include <gtk/gtk.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <gdk-pixbuf/gnome-canvas-pixbuf.h>
gboolean
canvas_event(GtkWidget *w, GdkEvent *e, gpointer d)
{
GtkObject *bg;
if(e->type!=GDK_BUTTON_PRESS)
return FALSE;
bg=GTK_OBJECT(gtk_object_get_data(GTK_OBJECT(d), "thumb"));
if(bg) {
printf("Destroying!\n");
gtk_object_destroy(bg);
bg=NULL;
} else {
GdkPixbuf *pb=gdk_pixbuf_new_from_file("001_01.jpg");
bg=GTK_OBJECT(gnome_canvas_item_new(gnome_canvas_root(GNOME_CANVAS(d)),
gnome_canvas_pixbuf_get_type(),
"pixbuf", pb, NULL));
}
gtk_object_set_data(GTK_OBJECT(d), "thumb", bg);
return TRUE;
}
int main( int argc, char *argv[] )
{
GtkWidget *window;
GnomeCanvas *gc=NULL;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_widget_push_visual (gdk_imlib_get_visual ());
gtk_widget_push_colormap (gdk_imlib_get_colormap ());
gc = gnome_canvas_new ();
gtk_widget_pop_colormap ();
gtk_widget_pop_visual ();
gtk_container_add (GTK_CONTAINER (window), gc);
gtk_widget_set_usize (gc, 256, 256);
gnome_canvas_set_scroll_region (gc, 0, 0, 256, 256);
gtk_signal_connect(GTK_OBJECT(gc), "event", canvas_event, gc);
gtk_widget_show_all(window);
gtk_main ();
return(0);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]