пропорциональная
рамка
пропорциональная рамка очень похожа
на виджет рамка, за исключением того,
что стороны виджета имеют определенную
пропорцию соотношения ширины и высоты
рамки. это может пригодится при просмотре
изображений. размер предварительного
просмотра должен измениться, когда
пользователь изменяет размеры окна, но
соотношение сторон должно всегда
соответствовать оригинальному
изображению.
создание аспект
рамки:
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;
}
|
|