메뉴 건너뛰기

enjoyTools.net

GTK3/Cairo 버튼 클릭시 이벤트 처리

2015.03.16 03:24

꿈돌이 조회 수:8678

.

/*
 ============================================================================
 Name        : cairo_hello_world.c
 Author      : swshin
 Version     : not versioned
 Copyright   : team maniac.
 Description : Hello World in GTK+
 ============================================================================
 */

#include <string.h>
#include <gtk/gtk.h>

char myHello[255] = "Hello world.";
int stats = 0;

// 아래 함수 먼저 선언되어야 동작 됨.
static void do_drawing(cairo_t *);

static gboolean do_text_change(GtkWidget *widget, cairo_t *cr, gpointer user_data) {
 if (stats == 0) {
  strcpy(myHello, "Hi Button.");
  stats = 1;
 } else {
  strcpy(myHello, "Hello World.");
  stats = 0;
 }

 return FALSE;
}

static gboolean on_draw_event(GtkWidget *widget, cairo_t *cr,
  gpointer user_data) {
 // 아래 두 줄 다 있어야 바로 반응함.
 // 두번째줄 없으면 바로 반응 안하고 다른 창 갔다와야 반응함.
 do_drawing(cr);
 gtk_widget_queue_draw(widget);

 return FALSE;
}

static void do_drawing(cairo_t *cr) {
 cairo_set_source_rgb(cr, 0, 0, 0);
 cairo_set_font_size(cr, 40.0);

 cairo_move_to(cr, 10.0, 50.0);
 cairo_show_text(cr, myHello);
}

int main(int argc, char *argv[]) {
 GtkWidget *window;
 GtkWidget *box;
 GtkWidget *button1;
 GtkWidget *darea;

 gtk_init(&argc, &argv);

 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

 box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 1);
 button1 = gtk_button_new_with_label("Change text");
 darea = gtk_drawing_area_new();

 gtk_box_pack_start(GTK_BOX(box), darea, TRUE, TRUE, 0);
 gtk_box_pack_start(GTK_BOX(box), button1, TRUE, TRUE, 0);
 gtk_container_add(GTK_CONTAINER(window), box);

 g_signal_connect(G_OBJECT(darea), "draw", G_CALLBACK(on_draw_event), NULL);
 g_signal_connect(button1, "clicked", G_CALLBACK(do_text_change), NULL);
 g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);

 gtk_window_set_default_size(GTK_WINDOW(window), 250, 150);
 gtk_window_set_title(GTK_WINDOW(window), "GTK window");

 gtk_widget_show_all(window);

 gtk_main();

 return 0;
}



.

번호 제목 글쓴이 날짜 조회 수
공지 툴 북마크 꿈돌이 2021.02.11 80865
» GTK3/Cairo 버튼 클릭시 이벤트 처리 꿈돌이 2015.03.16 8678