본문 바로가기
컴퓨터 관련

GTK+ layout 관리 [5] Corner buttons 모서리에 버튼 위치시키는 방법.

by _BlankSpace 2017. 4. 23.
이번 기능은 Window창의 모서리에 버튼을 위치시키는 방법을 소개하고자 한다.

보통 다이얼로그 창에는 버튼을 가운데 두지 않는다. 보통 모서리에 두기 때문에 GTK에서도 이러한 기능을

따로 두지 않았나라고 조심히 생각해본다.


그럼 예를 보자.

출처: http://zetcode.com/gui/gtk2/gtklayoutmanagement/ 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <gtk/gtk.h>
 
int main(int argc, char *argv[]) {
 
    GtkWidget *window;
    GtkWidget *okBtn;
    GtkWidget *clsBtn;
 
    GtkWidget *vbox;
    GtkWidget *hbox;
    GtkWidget *halign;
    GtkWidget *valign;
 
    gtk_init(&argc, &argv);
 
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
    gtk_window_set_default_size(GTK_WINDOW(window), 300200);
    gtk_window_set_title(GTK_WINDOW(window), "Corner buttons");
    gtk_container_set_border_width(GTK_CONTAINER(window), 10);
 
    vbox = gtk_vbox_new(FALSE, 5);
 
    valign = gtk_alignment_new(0100);
    gtk_container_add(GTK_CONTAINER(vbox), valign);
    gtk_container_add(GTK_CONTAINER(window), vbox);
 
    hbox = gtk_hbox_new(TRUE, 3);
 
    okBtn = gtk_button_new_with_label("OK");
    gtk_widget_set_size_request(okBtn, 7030);
    gtk_container_add(GTK_CONTAINER(hbox), okBtn);
    clsBtn = gtk_button_new_with_label("Close");
    gtk_container_add(GTK_CONTAINER(hbox), clsBtn);
 
    halign = gtk_alignment_new(1000);
    gtk_container_add(GTK_CONTAINER(halign), hbox);
 
    gtk_box_pack_start(GTK_BOX(vbox), halign, FALSE, FALSE, 0);
 
    g_signal_connect(G_OBJECT(window), "destroy",
            G_CALLBACK(gtk_main_quit), G_OBJECT(window));
 
    gtk_widget_show_all(window);
 
    gtk_main();
 
    return 0;
}
cs

예의 대한 설명은 다음과 같다.

1
valign = gtk_alignment_new(, 1, , );
cs

- 두 번째 인자를 1로 설정하여, 수직으로 가장 끝 점으로 이동하는 alignment를 만든다. (하단 정렬)

1
gtk_container_add(GTK_CONTAINER(vbox), valign);
cs

- 설정한 alignment를 vbox 컨테이너에 넣는다.

1
2
3
4
5
6
7
8
9
10
11
hbox = gtk_hbox_new(TRUE, 3);
 
okBtn = gtk_button_new_with_label("OK");
 
gtk_widget_set_size_request(okBtn, 7030);
 
gtk_container_add(GTK_CONTAINER(hbox), okBtn);
 
clsBtn = gtk_button_new_with_label("Close");
 
gtk_container_add(GTK_CONTAINER(hbox), clsBtn);
cs

- horizontal box와 두 개의 버튼을 넣는다.

- gtk_widget_set_size_request() 함수는 widget의 사이즈를 변경한다.

- GtkHBox의 homogeneous (즉, 첫 번째 인자)를 TRUE로 할 경우, 새로운 버튼도 모두 같은 사이즈로 된다.

1
2
3
4
5
halign = gtk_alignment_new(1, , , );
 
gtk_container_add(GTK_CONTAINER(halign), hbox);
 
gtk_box_pack_start(GTK_BOX(vbox), halign, FALSE, FALSE, );
cs

- alignment 컨테이너에 horizon 박스를 넣고, vertical 박스에 halign 컨테이너를 넣는다. (오른쪽 정렬)

댓글