Tk-WorldCanvas

 view release on metacpan or  search on metacpan

WorldCanvas.pm  view on Meta::CPAN

package Tk::WorldCanvas;
require Tk::Canvas;
require Tk::Derived;
use strict;
use Tk;

use vars qw($VERSION);
$VERSION = '1.2.7';

#Version
#1.0.0 -- Sept 20, 2001 -- Initial release.
#1.1.0 -- Oct  29, 2001 -- Added '-changeView' callback option
#1.2.0 -- Jan  29, 2002 -- Added 'getView' method,
#                          better error handleing in 'bbox',
#                          cleaned up syntax
#1.2.1 -- May  17, 2002 -- changed package name to Tk::WorldCanvas
#1.2.2 -- June 28, 2002 -- Fixed bug in 'coords'
#1.2.3 -- July 31, 2002 -- Fixed another bug in 'coords', and an agrument passing bug.
#1.2.4 -- Sept  5, 2002 -- Added to POD
#1.2.5 -- Sept  6, 2002 -- Enhanced view window scaleing on canvas resize
#1.2.6 -- Nov   1, 2002 -- Fixed _view_area_canvas bug.
#1.2.7 -- Nov  19, 2002 -- handle fractional arguments to canvas(x|y)

@Tk::WorldCanvas::ISA = qw(Tk::Derived Tk::Canvas);

Construct Tk::Widget 'WorldCanvas';

sub ClassInit {
    my ($worldcanvas, $mw) = @_;

    $worldcanvas->SUPER::ClassInit($mw);
}

sub InitObject {
    my ($worldcanvas, $args) = @_;

    my $pData = $worldcanvas->privateData;
    $pData->{'bbox'} = [0, 0, -1, -1];
    $pData->{'scale'} = 1;
    $pData->{'movex'} = 0;
    $pData->{'movey'} = 0;
    $pData->{'bboxvalid'} = 1;
    $pData->{'width'} = $worldcanvas->width;
    $pData->{'height'} = $worldcanvas->height;

    $worldcanvas->configure(-confine => 0);

    $worldcanvas->ConfigSpecs('-bandColor' => ['PASSIVE', 'bandColor', 'BandColor', 'red'],
                              '-bandcolor' => '-bandColor',
                              '-changeView' => ['CALLBACK', 'changeView', 'ChangeView', undef],
                              '-changeview'  => '-changeView');

    $worldcanvas->CanvasBind('<Configure>' =>
        sub {
            my $w = $worldcanvas->width;
            my $h = $worldcanvas->height;
            my $ow = $pData->{'width'};
            my $oh = $pData->{'height'};
            if ($w != $ow or $h != $oh) {
                my $b = $worldcanvas->cget('-borderwidth');
                _view_area_canvas($worldcanvas, $b, $b, $ow - $b, $oh - $b);
                $pData->{'width'} = $w;
                $pData->{'height'} = $h;

                my $bbox = $pData->{'bbox'};
                my $le = $worldcanvas->canvasx($b);
                my $re = $worldcanvas->canvasx($w - $b);
                my $te = $worldcanvas->canvasy($b);
                my $be = $worldcanvas->canvasy($h - $b);
                if (_inside(@$bbox, $le, $te, $re, $be)) {
                    $worldcanvas->viewAll;
                }
            }
        }
    );

    $worldcanvas->SUPER::InitObject($args);
}

sub getView {
    my ($canvas) = @_;

    my $borderwidth = $canvas->cget('-borderwidth');
    my $right_edge = $canvas->width - $borderwidth;



( run in 4.726 seconds using v1.01-cache-2.11-cpan-e1769b4cff6 )