ソフトウェア設計及び演習用の班Wiki

ブロック、玉画像

#include <gtk/gtk.h>

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;

}


最終更新日:2013/10/24 14:02:43