2010-06-07 4 views
0

나는 모든 레이아웃이 Gtk에 포팅하고 싶고 Gtk 레이아웃 시스템과 작동하도록 'n 개월'을 쓰고 싶지 않은 애플리케이션 레이어를 가지고있다. 기존의 내부 레이아웃 코드를 사용하고 Gtk로 결과 위젯을 렌더링하도록하십시오.GTK 레이아웃 엔진을 우회하는 사용자 정의 GTK 위젯?

내장 컨테이너를 여러 개 사용해 본 후에 내 위젯을 작성하는 것으로 시작했습니다. 기본적으로 최소 크기가없는 GtkFixed 컨테이너와 같은 것을 찾고 있는데, 즉 Gtk가 전체 창에 첫 번째 위젯을 넣을 것이고 모든 하위 위젯이 자신을 배치하여 영역을 채울 수 있습니다. 그 때문에 GtkFixed를 사용하면 창은 항상 초기 레이아웃의 크기로 제한됩니다. 즉, "요청 된"공간이기 때문입니다. 창 장식의 가장자리를 사용하는 것보다 크기를 조정할 수 없습니다.

어쩌면 할당 대 요청에서 학교가 필요합니다. 지금까지 내 인터넷 검색은 내가이 일을하기 위해 필요한 정보를 찾지 못했습니다. 나는 시도했다.

현재 C API를 사용하고 있으며 Win32와 Linux를 대상으로하고 있습니다. 지금까지 Win32에서 작동하는 셸 응용 프로그램에서 빈 창이 나타납니다. 그러나 첫 번째 자식 위젯은 크기 조정을 초기 크기로 제한하고 있습니다.

편집 : FYI이 모든 결과의 최종 결과는 here입니다. 이 코드는 GTK 레이아웃 엔진과 독립적으로 크기를 조정하고 이동할 수있는 기본 위젯을 나타냅니다.

답변

0

내 코드의 문제점은 "configure-event"를 잡아서 TRUE를 반환한다는 것입니다.이 때문에 정상적인 GTK 레이아웃이 작동하지 않습니다. 내부 크기 변수를 업데이트하려면 해당 이벤트가 필요하지만 다음 처리기에서 해당 신호를받을 수 있도록 FALSE를 반환해야합니다.

이제 내 위젯은 창의 클라이언트 영역 크기를 올바르게 가정 할 수 있습니다. 그런 다음 GtkFixed 스타일 배치를 사용하여 레이아웃을 제어 할 수 있습니다.

+0

컨테이너를 그 크기로 고정시키지 않고 첫 번째 위젯의 크기를 어떻게 설정하고 있습니까? – pib

+0

창 안의 가장 위젯의 경우 10x10 픽셀을 요청하고 Gtk는 전체 창을 채우기 위해 그것을 확장합니다. 나머지 위젯은 정의 된 크기를 정확하게 요청합니다. – fret

2

나는 GtkFixed을 사용하고 위젯이 원하는 공간을 파악할 때마다 호출되는 size-request 신호에 연결하려고합니다. GtkRequisition 구조체를 수정하여 위젯에 필요한 많은 공간을 확보하십시오. 이것은 GTK 레이아웃 엔진이 가능한 경우 위젯에 할당하려고하는 공간의 양이 될 것이므로 기본적으로 위젯에 필요한 최소 크기입니다. 레이아웃 엔진은 물론 당신이 요구하는 것보다 더 많은 공간을 할당 할 수 있습니다.

+0

나는 그것을 시도했다. 일단 GTK에 그 크기를 반환했다면 GtkWindow에 GtkFixed가있는 경우보다 더 작은 창 크기를 조정할 수 없다. 만약 내가 1x1을 사용하려고한다면, 창을 채우기 위해 늘어나지 않을 것입니다 ... 그것은 단지 왼쪽 상단 구석에 0,0-1,1에 있습니다. – fret