[완료] GTK gtk_widget_set_size_request() 재설정 질문??

초코리의 이미지

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 );
}
ganadist의 이미지

1. GtkFixed 같은 고정크기의 위젯이 아니면 기본적으로 부모 위젯에 꽉 채워지게 됩니다.

즉 위와 같은 상황에서는 drawarea의 크기를 조정하는 것이 아니라 gtkwindow의 크기를 조정해야 합니다.

2. 그냥 destroy시키면 알아서 시그널이 해제가 됩니다.

----
Do not feed troll!

----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러

초코리의 이미지

답변 감사합니다...

gtk_window_resize()로 TOP LEVEL WINDOW를 변경하는 것으로
바꿨더니 잘동작하네요.

답변감사합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.