FvwmPiazza
view release on metacpan or search on metacpan
lib/FvwmPiazza/Layouts/Wide.pm view on Meta::CPAN
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};
# parse the options, if any
my @options = @{$args{options}};
my $wide_style;
my @rat_args = ();
my $width_ratio;
my $height_ratio;
{
local @ARGV = @options;
my $parser = new Getopt::Long::Parser();
if (!$parser->getoptions(
'variant=s' => \$wide_style,
'ratios=s@' => \@rat_args,
"width_ratio=s" => \$width_ratio,
"height_ratio=s" => \$height_ratio))
{
$args{tiler}->debug("Failed to parse options: " . join(':', @options));
}
@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];
}
}
# old-style
if (!defined $wide_style)
{
$wide_style = (@options ? shift @options : '');
}
if (!defined $width_ratio)
{
$width_ratio = (@options ? shift @options : '');
}
if (!defined $height_ratio)
{
$height_ratio = (@options ? shift @options : '');
}
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};
my $num_rows = 2;
my $wide_row_nr = 0;
if ($wide_style =~ /Bottom/)
{
$wide_row_nr = 1;
}
if ($num_win < $max_win)
{
$max_win = $num_win;
$area->redistribute_windows(n_groups=>$max_win);
}
elsif ($area->num_groups() != $max_win)
( run in 1.218 second using v1.01-cache-2.11-cpan-800906f7e73 )