📄 line.c
字号:
#include <gtk/gtk.h>
GtkWidget *g_window;
GtkWidget *g_vbox;
GtkWidget *g_drawing;
GdkPixmap *g_pixmap;
int xx, yy;
static gint configure_event(GtkWidget *widget, GdkEventConfigure *event,gpointer data)
{
if (g_pixmap == NULL)
{
g_pixmap = gdk_pixmap_new(widget->window,widget->allocation.width,widget->allocation.height,-1);
gdk_draw_rectangle(g_pixmap,widget->style->white_gc,TRUE,0, 0,widget->allocation.width,widget->allocation.height);
}
return TRUE;
}
static gint
button_press_event(GtkWidget *widget, GdkEventButton *event)
{
if(event->button == 1 && g_pixmap != NULL)
xx = event->x, yy = event->y;
return TRUE;
}
static gint
button_release_event(GtkWidget *widget, GdkEventButton *event)
{
if(event->button == 1 && g_pixmap != NULL)
{
gdk_draw_line(g_pixmap, g_window->style->black_gc,
xx, yy, event->x, event->y);
GdkRectangle update_rect;
update_rect.x = MIN(event->x, xx);
update_rect.y = MIN(event->y, yy);
update_rect.width = ABS(event->x - xx);
update_rect.height = ABS(event->y - yy);
gtk_widget_draw (g_drawing ,&update_rect);
}
return TRUE;
}
static gint
expose_event(GtkWidget *widget, GdkEventExpose *event)
{
gdk_draw_pixmap(widget->window,widget->style->fg_gc[GTK_WIDGET_STATE (widget)],g_pixmap,
event->area.x, event->area.y,event->area.x, event->area.y,event->area.width, event->area.height);
return FALSE;
}
GtkWidget* create_g_window1 (void)
{
g_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_object_set_data (GTK_OBJECT (g_window), "g_window", g_window);
gtk_window_set_title (GTK_WINDOW (g_window),"g_window");
gtk_container_border_width(GTK_CONTAINER(g_window),2);
gtk_signal_connect(GTK_OBJECT(g_window),"destroy",GTK_SIGNAL_FUNC(gtk_main_quit),NULL);
g_vbox = gtk_vbox_new (FALSE, 0);
gtk_widget_show (g_vbox);
gtk_container_add (GTK_CONTAINER (g_window), g_vbox);
g_drawing = gtk_drawing_area_new();
gtk_widget_set_events(g_drawing, GDK_EXPOSURE_MASK|GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK|GDK_BUTTON_MOTION_MASK|GDK_SUBSTRUCTURE_MASK);
gtk_signal_connect(GTK_OBJECT(g_drawing), "configure_event", GTK_SIGNAL_FUNC(configure_event), NULL);
gtk_signal_connect(GTK_OBJECT(g_drawing), "button_press_event", GTK_SIGNAL_FUNC(button_press_event), NULL);
gtk_signal_connect(GTK_OBJECT(g_drawing), "button_release_event", GTK_SIGNAL_FUNC(button_release_event), NULL);
gtk_signal_connect(GTK_OBJECT(g_drawing), "expose_event", GTK_SIGNAL_FUNC(expose_event), NULL);
gtk_widget_set_usize(GTK_WIDGET(g_drawing), 300, 200);
gtk_widget_show(g_drawing);
gtk_box_pack_start(GTK_BOX(g_vbox),g_drawing,FALSE,TRUE,0);
return g_window;
}
int main (int arg_gc, char *argv[])
{
gtk_set_locale();
gtk_init (&arg_gc,&argv);
GtkWidget *g_window1;
g_window1 = create_g_window1 ();
gtk_widget_show (g_window1);
gtk_main ();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -