The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# Copyright (C) 2000-2002, Free Software Foundation FSF.

package PPresenter::Image;

use strict;
use PPresenter::Object;
use base 'PPresenter::Object';
use File::Basename;

use constant ObjDefaults =>
{ -name        => ''    # defaults to filename later
, -aliases     => undef
, -file        => undef
, -sizeBase    => undef
, -resize      => undef
, -enlarge     => undef

, show         => undef

, ino          => undef # to determine equivalent images with
, dev          => undef #    used under different name.
, source       => undef
};

sub InitObject()
{   my $img = shift;
    $img->SUPER::InitObject;

    # Find a name for the image.

    (my $basename = $img->{-file}) =~ s|^.*/([^\.]*)|$1|g;

    if($img->{-name} eq '') {$img->{-name} = $basename}
    else                    {push @{$img->{-aliases}}, $basename}

    push @{$img->{aliases}}, $img->{-file};

    # Find-out for which screen-size this image was created.

    my $show = $img->{show};
    $img->{-sizeBase} = $show->imageSizeBase
        unless defined $img->{-sizeBase};

    $img->{-resize} = ($show->resizeImages && defined $img->{-sizeBase})
        unless defined $img->{-resize};

    $img->{-enlarge} = ($show->enlargeImages && defined $img->{-sizeBase})
        unless defined $img->{-enlarge};

    $img;
}

sub sameSource($)
{   my ($img, $options) = @_;

    if($options->{ino}==0)
    {   # Non-UNIX, so have to fake our way out.
        return -s $options->{source} == -s $img->{source}
               && basename $options->{source} eq basename $img->{source}
    }
    else
    {   # UNIX: same file is safely detectable.
        return $options->{ino}==$img->{ino}
               && $options->{dev}==$img->{dev}
    }
}

sub scaling($)
{   my ($img,$viewport) = @_;

    return 1.0 unless $img->{-resize};
    my $scaling = $viewport->geometryScaling($img->{-sizeBase});
    ($scaling < 1.0 || $img->{-enlarge}) ? $scaling : 1.0;
}

1;