FvwmPiazza
view release on metacpan or search on metacpan
lib/FvwmPiazza/Layouts/Matrix.pm view on Meta::CPAN
use lib `fvwm-perllib dir`;
use FVWM::Module;
use FvwmPiazza::Tiler;
use FvwmPiazza::Page;
use FvwmPiazza::Group;
use FvwmPiazza::GroupWindow;
use base qw( FvwmPiazza::Layouts );
our $ERROR;
our $DEBUG = 0 unless defined $DEBUG;
=head1 METHODS
=head2 init
=cut
sub init {
my ($self, $config) = @_;
return $self;
} # init
=head2 apply_layout
Apply the requested tiling layout.
=cut
sub apply_layout {
my $self = shift;
my %args = (
area=>undef,
options=>[],
left_offset=>0,
right_offset=>0,
top_offset=>0,
bottom_offset=>0,
vp_width=>0,
vp_heigt=>0,
max_win=>2,
tiler=>undef,
@_
);
my $err = $self->check_args(%args);
if ($err)
{
return $self->error($err);
}
my $area = $args{area};
my @options = @{$args{options}};
my $num_cols = 2;
my @rat_args = ();
my $width_ratio = '';
my $height_ratio = '';
my @row_arr = ();
{
local @ARGV = @options;
my $parser = new Getopt::Long::Parser();
if (!$parser->getoptions('cols=n' => \$num_cols,
'rows=s@' => \@row_arr,
'ratios=s@' => \@rat_args,
"width_ratio=s" => \$width_ratio,
"height_ratio=s" => \$height_ratio))
{
$args{tiler}->debug("Failed to parse options: " . join(':', @ARGV));
}
@options = @ARGV;
}
if (@rat_args)
{
# width first, then height
if (@rat_args = 1)
{
my @rat = split(',', $args{ratios});
$width_ratio = $rat[0];
$height_ratio = $rat[1];
}
else # more than one, take first two
{
$width_ratio = $rat_args[0];
$height_ratio = $rat_args[1];
}
}
my @row_set = ();
if (@row_arr)
{
if (@row_arr == 1)
{
# comma-separated
push @row_set, split(/,/, $row_arr[0]);
}
else
{
push @row_set, @row_arr;
}
# repeat the last one until full
while ($num_cols > @row_set)
{
push @row_set, $row_arr[$#row_arr];
}
}
# the default number of rows per column is 2
while ($num_cols > @row_set)
{
push @row_set, 2;
}
# row_set should now have a value for each column.
my $working_width = $args{vp_width} -
($args{left_offset} + $args{right_offset});
my $working_height = $args{vp_height} -
($args{top_offset} + $args{bottom_offset});
my $num_win = $area->num_windows();
my $max_win = $args{max_win};
( run in 1.410 second using v1.01-cache-2.11-cpan-ad19def0cd9 )