GTK+ 2.0 Tutorial

<<< Previous

Container Widgets

Next >>>


Пропорциональная рамка

Пропорциональная рамка очень похожа на виджет рамка, за исключением того, что стороны виджета имеют определенную пропорцию соотношения ширины и высоты рамки. Это может пригодится при просмотре изображений.  Размер предварительного просмотра должен измениться, когда пользователь изменяет размеры окна, но соотношение сторон должно всегда соответствовать оригинальному изображению.

Создание аспект рамки:

GtkWidget *gtk_aspect_frame_new( const gchar *label, gfloat xalign, gfloat yalign, gfloat ratio, gboolean obey_child);

xalign и yalign определяют выравнивание как в Alignment widgets. Если obey_child равен TRUE, то пропорции дочернего виджета будут соответствовать коэффициенту сжатия идеального размера. Иначе будет использовано отношение сторон.

Установки можно изменить функцией:

void gtk_aspect_frame_set( GtkAspectFrame *aspect_frame, gfloat xalign, gfloat yalign, gfloat ratio, gboolean obey_child);

В следующем примере приведен код аспект рамки, имеющей соотношение сторон 2х1, при изменении размера окна меняется размер рамки, но не меняется соотношение сторон.

#include <gtk/gtk.h> int main( int argc, char *argv[] ) { GtkWidget *window; GtkWidget *aspect_frame; GtkWidget *drawing_area; gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), "Aspect Frame"); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL); gtk_container_set_border_width (GTK_CONTAINER (window), 10); /* Создаём аспект рамку и помещаем в основное окно */ aspect_frame = gtk_aspect_frame_new ("2x1", /* label */ 0.5, /* center x */ 0.5, /* center y */ 2, /* xsize/ysize = 2 */ FALSE /* ignore child's aspect */); gtk_container_add (GTK_CONTAINER (window), aspect_frame); gtk_widget_show (aspect_frame); /* Добавляем дочерний виджет в аспект рамку */ drawing_area = gtk_drawing_area_new (); /* При размере она в 200x200, рамка имеет размер 200x100 * потому, что соотношение установлено в 2х1 */ gtk_widget_set_size_request (drawing_area, 200, 200); gtk_container_add (GTK_CONTAINER (aspect_frame), drawing_area); gtk_widget_show (drawing_area); gtk_widget_show (window); gtk_main (); return 0; }

<<< Previous

Home

Next >>>

Frames

Up

Paned Window Widgets