[완료] 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를 변경하는 것으로
바꿨더니 잘동작하네요.
답변감사합니다.
댓글 달기