1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| GdkPixmap *pixmap = NULL;
void
destroy (GtkWidget *widget, gpointer data)
{
gtk_main_quit ();
}
gboolean configure_event( GtkWidget *widget,
GdkEventConfigure *event )
{
if (pixmap)
g_object_unref (pixmap);
pixmap = gdk_pixmap_new (widget->window,
widget->allocation.width,
widget->allocation.height,
-1);
gdk_draw_rectangle (pixmap,
widget->style->white_gc,
TRUE,
0, 0,
widget->allocation.width,
widget->allocation.height);
return TRUE;
}
gboolean expose_event( GtkWidget *widget,
GdkEventExpose *event )
{
gdk_draw_drawable (widget->window,
widget->style->fg_gc[gtk_widget_get_state (widget)],
pixmap,
event->area.x, event->area.y,
event->area.x, event->area.y,
event->area.width, event->area.height);
return FALSE;
}
GdkPixmap *pix = NULL ;
GdkBitmap *mask;
GtkStyle *style;
gboolean button_press_event( GtkWidget *widget,
GdkEventButton *event )
{
if (event->button == 1 && pixmap != NULL)
draw_image (widget, event->x, event->y);
return TRUE;
}
gboolean motion_notify_event( GtkWidget *widget,
GdkEventMotion *event )
{
int a, b;
GdkModifierType state;
gdk_window_get_pointer (event->window, &a, &b, &state);
return TRUE;
}
void draw_image( GtkWidget *widget,
gdouble a,
gdouble b)
{
gdouble f,g;
f=a-10;
g=b-10;
style = gtk_widget_get_default_style();
pix = gdk_pixmap_create_from_xpm( pixmap,&mask,&style->bg[GTK_STATE_NORMAL],"./circuit.xpm" );
gdk_draw_drawable (pixmap,
widget->style->fg_gc[gtk_widget_get_state (widget)],
pix,
0,0 ,
f, g,
-1, -1);
gtk_widget_queue_draw_area (widget,
f, g,20, 20);
gtk_widget_set_sensitive (GTK_WIDGET (pix), TRUE);
} |
Partager