my @box; # Tracks the IDs of each rectangle
my $viewable_width=400; # How wide is the viewable Canvas?
####
$sc[$i] = $tile[$i]->Scrolled('Canvas',
-scrollbars => 'os',
-scrollregion => [0, 0, $initial_width, 125],
-width => $viewable_width,
-height => 125,
-background => randColor()
)->pack(qw/-fill both -side top -expand 1/);
####
$box[$i] = $sc[$i]->createRectangle($x, 50, $x+20, 90,
-fill => randColor(),
-outline => 'black',
-width => 2,
-tags => 'rect',
);
####
sub AlignAll{
my ($x1, $y1, $x2, $y2);
foreach my $i (0 .. 3) {
my $sc = $sc[$i]; # Get Canvas object
my $box = $box[$i]; # Get box id (rectangle)
my ($x1, $y1, $x2, $y2) = $sc->bbox($box); # Get box coordinates
my $mid = ($x1 + $x2) / 2; # Get midpoint, minus
$mid -= $viewable_width / 2; # 1/2 of visible window
my $newx = $mid / $initial_width; # Get delta x-distance
$sc->xviewMoveto($newx); # Move Canvas object
}
}
####
$frame->Button(
-text => " Zoom Out ",
-width => 10,
-command => sub {
$scale*=0.8;
$initial_width *= $scale;
foreach $i (0 .. 3) {
$sc[$i]->scale(qw/all 0 0 .8 1/);
$sc[$i]->configure(-scrollregion => [0, 0, $initial_width, 125]);
}
}
)->pack(qw/-side left -padx 25/);
$frame->Button(
-text => " Zoom In ",
-width => 10,
-command => sub {
$scale*=1.25;
$initial_width *= $scale;
foreach $i (0 .. 3) {
$sc[$i]->scale(qw/all 0 0 1.25 1/);
$sc[$i]->configure(-scrollregion => [0, 0, $initial_width, 125]);
}
}
)->pack(qw/-side left -padx 25/);