GTK3/Cairo 버튼 클릭시 이벤트 처리
2015.03.16 03:24
.
/*
============================================================================
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;
}
.
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | 툴 북마크 | 꿈돌이 | 2021.02.11 | 80967 |
39 | 윈도우 작업표시줄에 날짜와 시간 한 줄 표시, 요일 표시 | 꿈돌이 | 2019.08.20 | 472 |
38 | 윈도우 cmd에서 랜카드 dhcp on/off | 꿈돌이 | 2018.09.29 | 459 |
37 | 윈도우에서 가상머신 또는 다른 곳으로 포트포워딩 | 꿈돌이 | 2019.09.02 | 454 |
36 | Chromium chrome://flags 설정 파일의 위치 | 꿈돌이 | 2016.04.12 | 424 |
35 | 라즈베리파이 메모 | 꿈돌이 | 2018.02.13 | 410 |
34 | mysql update _priv='Y' root 복구용 | 꿈돌이 | 2019.06.25 | 395 |
33 | C sprintf 숫자에서 문자열로 변환 | 꿈돌이 | 2015.03.10 | 389 |
32 | Klipper display config for SKR mini E3 v1.2 on ender 3 | 꿈돌이 | 2019.11.21 | 381 |
31 | mysql_error() equivalent is mssql_get_last_message() | 꿈돌이 | 2019.03.11 | 355 |
30 | .jsbeautifyrc | 꿈돌이 | 2020.11.04 | 351 |
29 | golang Powershell에서 현재 디렉터리를 gopath로 지정 | 꿈돌이 | 2017.04.03 | 350 |
28 | Sass 관련 링크 | 꿈돌이 | 2016.06.12 | 326 |
27 | ender 3 메모 | 꿈돌이 | 2020.01.05 | 321 |
26 | Git (MinGW) 인증서 설정 | 꿈돌이 | 2017.03.22 | 285 |
25 | Bed leveling | 꿈돌이 | 2019.11.30 | 262 |
24 | 해상도 fps 다른 동영상 합치기 | 꿈돌이 | 2022.05.09 | 230 |
23 | 우분투 USB 리셋 - MS 무선마우스 휠 문제 | 꿈돌이 | 2018.06.18 | 218 |
22 | 지코드 - 옥토프린트 콘솔에서 쓸거 | 꿈돌이 | 2020.04.04 | 204 |
21 | certbot 수동 갱신 | 꿈돌이 | 2019.01.27 | 201 |
20 | 디버그모드에서 안드로이드 instant run | 꿈돌이 | 2018.04.20 | 200 |