Object
+--- Widget
+--- Container
+--- Bin
+--- Frame
+--- AspectFrame
The aspect frame widget is like a frame widget, except that it also enforces the aspect ratio (that is, the ratio of the width to the height) of the child widget to have a certain value, adding extra space if necessary. This is useful, for instance, if you want to preview a larger image. The size of the preview should vary when the user resizes the window, but the aspect ratio needs to always match the original image.
To create a new aspect frame use:
$aspect = new Gtk::AspectFrame( $label,
The
$xalign
and
$yalign
arguments specify the horizontal and vertical alignment, and
varies from
0.0
(left or top aligned) to
1.0
(right or bottom aligned).
If
$obey_child
is true, the aspect ratio of a child widget will match the
aspect ratio of the ideal size it requests. Otherwise, it is
given by
$ratio.
$xalign,
$yalign,
$ratio,
$obey_child );
To change the options of an existing aspect frame, you can use:
$aspect->frame_set( $xalign, $yalign, $ratio, $obey_child );
As an example, the following program uses an AspectFrame to present a drawing area whose aspect ratio will always be 2:1, no matter how the user resizes the top-level window.
#!/usr/bin/perl -w use Gtk ; use strict ; set_locale Gtk; init Gtk; my $false = 0; my $true = 1; my $window; my $aspect; my $drawing_area; # Create the window $window = new Gtk::Window( "toplevel" ); $window->set_title( "Aspect Frame" ); $window->signal_connect( "destroy", sub { Gtk-> exit ( 0 ); } ); $window->border_width( 10 ); # Create an aspect_frame and add it to our toplevel window $aspect = new Gtk::AspectFrame( "2x1", 0.5, 0.5, 2, $false ); $window->add( $aspect ); $aspect->show(); # Now add a child widget to the aspect frame $drawing_area = new Gtk::DrawingArea(); # Ask for a 200x200 window, but the AspectFrame will give us a 200x100 # window since we are forcing a 2x1 aspect ratio $drawing_area->set_usize( 200, 200 ); $aspect->add( $drawing_area ); $drawing_area->show(); $window->show(); main Gtk; exit ( 0 ); # END EXAMPLE PROGRAM
AspectFrame Example Screenshot