ソフトウェア設計及び演習用の班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