#include gboolean cb_expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer user_data) { cairo_t *cr; cr = gdk_cairo_create(widget->window); cairo_set_line_width(cr, 1.0); //線の太さ cairo_set_line_join(cr, CAIRO_LINE_JOIN_ROUND); //角を丸くする //矩形の描画(説明のために{}を付けた) { //色の指定(これは外枠の色になる) (青、赤、緑) cairo_set_source_rgb(cr,0 ,0 ,0 ); //矩形を描画 (横、縦、横、縦) cairo_rectangle(cr, 70.0, 30.0, 70.0, 30.0); //矩形の外枠を作る cairo_stroke_preserve(cr); //色の指定(これは塗りつぶしの色になる) cairo_set_source_rgb(cr, 0, 10, 10); //矩形を塗りつぶす cairo_fill(cr); } //グラデーション付き矩形 { //外枠を作る cairo_set_source_rgb(cr, 0.0, 1.0, 0.0); cairo_rectangle(cr, 150.0, 50.0, 50.0, 50.0); cairo_stroke_preserve(cr); //グラデーションを作る。 //どのようなグラデーションにするかをpattern変数で指定する cairo_pattern_t *pattern; pattern = cairo_pattern_create_linear(200.0, 60.0, 200.0, 100.0); //色(1.0, 1.0, 1.0)から色(0.0, 1.0, 0.0)にグラデーションする cairo_pattern_add_color_stop_rgb(pattern, 0.0, 1.0, 0, 1.0); cairo_pattern_add_color_stop_rgb(pattern, 1.0, 0.0, 1.0, 0.0); //上記のグラデーションを設定する cairo_set_source(cr, pattern); //上記のグラデーションで矩形を塗りつぶす cairo_rectangle(cr, 150.0, 50.0, 50.0, 50.0); cairo_fill(cr); } //円形(ほとんど矩形と同じ) cairo_set_source_rgb(cr, 0, 10, 10); cairo_arc(cr, 270.0, 75.0, 20.0, 0.0, 2.0*3.14); cairo_stroke_preserve(cr); cairo_set_source_rgb(cr,10, 0, 10); cairo_fill(cr); return FALSE; } int main(int argc, char *argv[]) { GtkWidget *window; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), "block"); gtk_widget_set_size_request(window, 400,200); //ウインドウに図形を描けるように設定 gtk_widget_set_app_paintable(window, TRUE); gtk_widget_add_events (window, GDK_BUTTON_PRESS_MASK); //ウインドウが表示されたときにcb_expose_event()を呼び出す g_signal_connect(G_OBJECT(window), "expose-event", G_CALLBACK(cb_expose_event), NULL); g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); gtk_widget_show_all(window); gtk_main(); return 0; }