正直あまりよく分からなくなってきた。GTKを理解するのは時間がかかりそうだ。
プログラムはボタンが3つあってそれぞれ別の画像を表示させることができる
ボタン1は押していくと画像の表示部分が増えていく
プログラム
#include
#include
#include
#include
int count = 0;
void button1_clicked(GtkWidget *widget, gpointer data){
static GdkPixbuf *pixbuf = NULL; //staticにしておくことで最初の1回だけファイルを読み込む
GtkWidget *drawing_area = (GtkWidget *)data;
count++;
if(count==6)count=0;
if(!pixbuf) pixbuf = gdk_pixbuf_new_from_file("city.jpg", NULL);
gdk_pixbuf_render_to_drawable (pixbuf, drawing_area->window,
widget->style->fg_gc[GTK_STATE_NORMAL],
0, 0, 0, 0,
gdk_pixbuf_get_width(pixbuf) - 50 + count*10,
gdk_pixbuf_get_height(pixbuf) - 50 + count*10,
GDK_RGB_DITHER_NORMAL, 0, 0);
}
void button2_clicked(GtkWidget *widget, gpointer data){
static GdkPixbuf *pixbuf = NULL; //staticにしておくことで最初の1回だけファイルを読み込む
GtkWidget *drawing_area = (GtkWidget *)data;
if(!pixbuf) pixbuf = gdk_pixbuf_new_from_file("red_flower.jpg", NULL);
gdk_pixbuf_render_to_drawable (pixbuf, drawing_area->window,
widget->style->fg_gc[GTK_STATE_NORMAL],
0, 0, 0, 0,
gdk_pixbuf_get_width(pixbuf),
gdk_pixbuf_get_height(pixbuf),
GDK_RGB_DITHER_NORMAL, 0, 0);
}
void button3_clicked(GtkWidget *widget, gpointer data){
static GdkPixbuf *pixbuf = NULL; //staticにしておくことで最初の1回だけファイルを読み込む
GtkWidget *drawing_area = (GtkWidget *)data;
if(!pixbuf) pixbuf = gdk_pixbuf_new_from_file("result03.jpg", NULL);
gdk_pixbuf_render_to_drawable (pixbuf, drawing_area->window,
widget->style->fg_gc[GTK_STATE_NORMAL],
0, 0, 0, 0,
gdk_pixbuf_get_width(pixbuf),
gdk_pixbuf_get_height(pixbuf),
GDK_RGB_DITHER_NORMAL, 0, 0);
}
void flip_vertical(GdkPixbuf *pixbuf, int x, int y, int w, int h)
int main(int argc, char *argv[]){
GtkWidget *window, *button1, *button2, *button3, *button4,*vbox, *hbox, *drawing_area;
/* 初期化とパラメータの指定 */
gtk_init(&argc, &argv);
gdk_rgb_init();
/**********************/
/* ウィジェットの作成 */
/**********************/
window = gtk_window_new(GTK_WINDOW_TOPLEVEL); //メインwindow
button1 = gtk_button_new_with_label("image 1"); //ボタン
button2 = gtk_button_new_with_label("image 2"); //ボタン
button3 = gtk_button_new_with_label("image 3");
button4 = gtk_button_new_with_label("image 4");
vbox = gtk_vbox_new (FALSE, 3); //垂直パッキングボックス
hbox = gtk_hbox_new (FALSE, 3); //水平パッキングボックス
drawing_area = gtk_drawing_area_new(); //描画領域
gtk_drawing_area_size(GTK_DRAWING_AREA(drawing_area), 320, 214);
/**************************/
/* ウィジェットを配置する */
/**************************/
gtk_container_add(GTK_CONTAINER(window), vbox);
gtk_box_pack_start(GTK_BOX(vbox), drawing_area, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(hbox), button1, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(hbox), button2, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(hbox), button3, FALSE, FALSE, 0);
/* Window内の全てのウィジェットを表示 */
gtk_widget_show_all(window);
/**************************/
/* コールバック関数の登録 */
/**************************/
/* 右上の×が押されたら終了 */
gtk_signal_connect(GTK_OBJECT(window), "destroy",
GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
/* ボタン1が押されたら画像1が表示される */
gtk_signal_connect(GTK_OBJECT(button1), "clicked",
GTK_SIGNAL_FUNC(button1_clicked), (gpointer)drawing_area);
/* ボタン2が押されたら画像が表示される */
gtk_signal_connect(GTK_OBJECT(button2), "clicked",
GTK_SIGNAL_FUNC(button2_clicked), (gpointer)drawing_area);
/*ボタン3が押されたら*/
gtk_signal_connect(GTK_OBJECT(button3), "clicked",
GTK_SIGNAL_FUNC(button3_clicked), (gpointer)drawing_area);
/* メインループ */
gtk_main();
return 0;
}
0 件のコメント:
コメントを投稿