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/);