Graphics::Primitive::Canvas - Component composed of paths


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

Index


Code Index:

NAME

Top

Graphics::Primitive::Canvas - Component composed of paths

DESCRIPTION

Top

Graphics::Primitive::Canvas is a component for drawing arbitrary things. It holds Paths and Operations.

SYNOPSIS

Top

  use Graphics::Primitive::Canvas;

  my $canvas = Graphics::Primitive::Canvas->new;
  $canvas->move_to($point); # or just $x, $y
  $canvas->do($op);

DESCRIPTION

Top

The Canvas is a container for multiple Paths. It has a path that is the operative path for all path-related methods. You can treat the Canvas as if it was a path, calling methods like line_to or move_to.

When you are ready to perform an operation on the path, call the do method with the operation you want to call as an argument. Drawing a line and stroking it would look like:

  $canvas->move_to(0, 0);
  $canvas->line_to(10, 10);
  my $op = Graphics::Primitive::Operation::Stroke->new;
  $stroke->brush->color(
      Graphics::Color::RGB->new(red => 0, blue => 1, green => 1)
  );
  $canvas->do($op);

When you instantiate a Canvas a newly instantiated path resides in path. After you call do that current path is moved to the paths list and new path is placed in current_path. If you want to keep the path around you can call save before do then call restore to put a saved copy of the path back into path.

METHODS

Top

Constructor

new

Creates a new Graphics::Primitive::Canvas

Instance Methods

do

Given an operation, pushes the current path onto the path stack.

  FIXME: Example

path

The current path this canvas is using.

path_count

Count of paths in paths.

paths

Arrayref of hashrefs representing paths combined with their operations:

  [
    {
        path => $path,
        op   => $op
    },
  ]

restore

Replace the current path by popping the top path from the saved path list.

save

Copy the current path and push it onto the stack of saved paths.

saved_paths

List of saved paths. Add to the list with save and pop from it using restore.

saved_path_count

Count of paths saved in saved_paths.

AUTHOR

Top

Cory Watson <gphat@cpan.org>

COPYRIGHT & LICENSE

Top


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

package Graphics::Primitive::Canvas;
use Moose;
use MooseX::Storage;

extends 'Graphics::Primitive::Component';

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

use Graphics::Primitive::Path;

has path => (
    isa => 'Graphics::Primitive::Path',
    is  => 'rw',
    default =>  sub { Graphics::Primitive::Path->new },
    handles => [
        'arc', 'close_path', 'current_point', 'curve_to', 'line_to',
        'move_to', 'rectangle', 'rel_curve_to', 'rel_line_to', 'rel_move_to'
    ]
);

has paths => (
    traits => [qw(Array Clone)],
    isa => 'ArrayRef',
    is  => 'rw',
    default =>  sub { [] },
    handles => {
        add_path => 'push',
        path_count => 'count',
        get_path => 'get',
    }
);

has saved_paths => (
    traits => [qw(Array Copy)],
    isa => 'ArrayRef',
    is  => 'rw',
    default =>  sub { [] },
    handles => {
        push_path => 'push',
        pop_path => 'pop',
        saved_path_count => 'count',
    }
);

sub do {
    my ($self, $op) = @_;

    $self->add_path({ op => $op, path => $self->path->clone });
    # Don't replace the current path if we are preserving.
    unless($op->preserve) {
        $self->path(Graphics::Primitive::Path->new);
    }
}

sub save {
    my ($self) = @_;

    $self->push_path($self->path->clone);
}

sub restore {
    my ($self) = @_;

    return if($self->saved_path_count < 1);

    $self->path($self->pop_path);
}

__PACKAGE__->meta->make_immutable;

no Moose;
1;
__END__