[완료] GTK gtk_widget_set_size_request() 재설정 질문??
글쓴이: 초코리 / 작성시간: 수, 2007/08/08 - 10:52오전
gtk_widget_set_size_request() 함수로 drawing_area Widget의 크기를 변경하였습니다.
위 함수로 Widget의 크기를 변경하는데 Widget을 키우는것은 되지만
다시 작아지게 할때는 동작이 되지 않습니다.
gtk_widget_set_size_request(draw, -1, -1);로
초기화 하는 부분도 넣어봤지만 원하는 동작은 하지 않습니다.
원래 gtk_widget_set_size_request()로 크기를 키운 위젯은 다시 작아지지 않는것인지
아니면 작아지게 하는 다른 방법이 있는지 궁굼합니다..
그냥 drawing_area를 새로 생성하고 크기를 조절해야하는건가요??
새로 생성해야한다면 이때 기존 drawing_area에 연결된 signal은 어떻게 삭제해줘야 하는지
궁굼합니다..
요약
1. gtk_widget_set_size_request()로 늘린 Widget의 크기를 줄일수 있느냐??
2. Widget을 새로 생성할때 기존 제거하려는 Widget에 연결된 signal은 어떻게 삭제해야하는가??
첨부한 예제는 윈도우에서 키를 입력시에 위젯의 크기를 늘리고
작아지게 하는 목적으로 테스트 하기 위해 작성하였습니다.
#include <gtk/gtk.h> GtkWidget *window; gint expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer user_data) { fprintf(stderr,"expose_eventX[%d]Y[%d]W[%d]H[%d]\n", event->area.x, event->area.y, event->area.width, event->area.height); return TRUE; } static void button_clicked( GtkWidget *button, GdkEventKey *event_type, GtkWidget *draw ) { static int size = 50; static int flag = 0; fprintf(stderr,"click\n"); if (size <20) { flag = 0; } else if (size> 500) { flag = 1; } if (flag == 0) size += 20; else size -= 20; fprintf(stderr,"SIZE[%d]\n", size); gtk_widget_set_size_request(GTK_WIDGET(GTK_DRAWING_AREA( draw)), size, size); } int main( int argc, char **argv ) { GtkWidget *button; GtkWidget *draw; gtk_set_locale(); gtk_init( &argc, &argv ); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); draw = gtk_drawing_area_new(); gtk_widget_set_size_request(GTK_WIDGET(GTK_DRAWING_AREA( draw)), 50, 50); g_signal_connect(GTK_OBJECT(window), "button_press_event", GTK_SIGNAL_FUNC(button_clicked), draw); g_signal_connect(GTK_OBJECT(window), "key_press_event", GTK_SIGNAL_FUNC(button_clicked), draw); g_signal_connect(GTK_OBJECT(draw), "expose_event", GTK_SIGNAL_FUNC(expose_event), draw); gtk_container_add(window, draw); gtk_widget_show_all( window ); gtk_main(); return( 0 ); }
Forums:
1. GtkFixed 같은
1. GtkFixed 같은 고정크기의 위젯이 아니면 기본적으로 부모 위젯에 꽉 채워지게 됩니다.
즉 위와 같은 상황에서는 drawarea의 크기를 조정하는 것이 아니라 gtkwindow의 크기를 조정해야 합니다.
2. 그냥 destroy시키면 알아서 시그널이 해제가 됩니다.
----
Do not feed troll!
----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러
답변
답변 감사합니다...
gtk_window_resize()로 TOP LEVEL WINDOW를 변경하는 것으로
바꿨더니 잘동작하네요.
답변감사합니다.
댓글 달기