Graphics::Primitive::Brush - Description of a stroke


Graphics-Primitive documentation Contained in the Graphics-Primitive distribution.

Index


Code Index:

NAME

Top

Graphics::Primitive::Brush - Description of a stroke

DESCRIPTION

Top

Graphics::Primitive::Brush represents the visible trace of 'ink' along a path.

SYNOPSIS

Top

  use Graphics::Primitive::Brush;

  my $stroke = Graphics::Primitive::Brush->new({
    line_cap => 'round',
    line_join => 'miter',
    width => 2
  });

METHODS

Top

Constructor

new

Creates a new Graphics::Primitive::Brush. Defaults to a width of 1, a line_cap 'butt' and a line_join of 'miter'.

Instance Methods

color

Set/Get this brush's color.

dash_pattern

Set/Get the dash pattern. A dash pattern is an arrayref of numbers representing the lengths of the various line segments of the dash. Even numbered elements are considered opaque and odd elements are transparent.

derive

Clone this brush but change one or more of it's attributes by passing in a hashref of options:

  my $new = $brush->derive({ attr => $newvalue });

The returned font will be identical to the cloned one, save the attributes specified.

equal_to ($other)

Returns 1 if this brush is equal to the supplied one, else returns 0.

line_cap

Set/Get the line_cap of this stroke. Valid values are butt, round and square.

line_join

Set/Get the line_join of this stroke. Valid values are miter, round and bevel.

not_equal_to ($other)

Opposite of equal_to.

width

Set/Get the width of this stroke. Defaults to 1

AUTHOR

Top

Cory Watson, <gphat@cpan.org>

COPYRIGHT & LICENSE

Top


Graphics-Primitive documentation Contained in the Graphics-Primitive distribution.

package Graphics::Primitive::Brush;
use Moose;
use Moose::Util::TypeConstraints;
use MooseX::Storage;

with 'MooseX::Clone';
with Storage (format => 'JSON', io => 'File');

enum 'LineCap' => qw(butt round square);
enum 'LineJoin' => qw(miter round bevel);

has 'color' => ( is => 'rw', isa => 'Graphics::Color', traits => [qw(Clone)] );
has 'dash_pattern' => ( is => 'rw', isa => 'ArrayRef' );
has 'width' => ( is => 'rw', isa => 'Int', default => sub { 0 } );
has 'line_cap' => ( is => 'rw', isa => 'LineCap', default => 'butt' );
has 'line_join' => ( is => 'rw', isa => 'LineJoin', default => 'miter' );

__PACKAGE__->meta->make_immutable;

sub derive {
    my ($self, $args) = @_;

    return unless ref($args) eq 'HASH';
    my $new = $self->clone;
    foreach my $key (keys %{ $args }) {
        $new->$key($args->{$key}) if($new->can($key));
    }
    return $new;
}

sub equal_to {
    my ($self, $other) = @_;

    return 0 unless defined($other);

    unless($self->width == $other->width) {
        return 0;
    }

    unless($self->line_cap eq $other->line_cap) {
        return 0;
    }

    unless($self->line_join eq $other->line_join) {
        return 0;
    }

    if(defined($self->color)) {
        unless($self->color->equal_to($other->color)) {
            return 0;
        }
    } else {
        if(defined($other->color)) {
            return 0;
        }
    }

    if(defined($self->dash_pattern)) {
        unless(scalar(@{ $self->dash_pattern }) == scalar(@{ $other->dash_pattern })) {
            return 0;
        }

        for(my $i = 0; $i < scalar(@{ $self->dash_pattern }); $i++) {
            unless($self->dash_pattern->[$i] == $other->dash_pattern->[$i]) {
                return 0;
            }
        }
    } else {
        if(defined($other->dash_pattern)) {
            return 0;
        }
    }

    return 1;
}

sub not_equal_to {
    my ($self, $other) = @_;

    return !$self->equal_to($other);
}

no Moose;
1;
__END__