X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2FLaTeX%2FTikZ%2FPoint.pm;h=7fa3fa1076b0a61a8689284df875aaea90856c32;hb=e6c6fbca8df4f8df7bbce2eb98dd260ed51d9141;hp=f2155e8ff75b151ef0e83b45361c0047d8913e73;hpb=e8f0879ade07eed4f58cd52c0771f4e1ecc90b09;p=perl%2Fmodules%2FLaTeX-TikZ.git diff --git a/lib/LaTeX/TikZ/Point.pm b/lib/LaTeX/TikZ/Point.pm index f2155e8..7fa3fa1 100644 --- a/lib/LaTeX/TikZ/Point.pm +++ b/lib/LaTeX/TikZ/Point.pm @@ -5,7 +5,7 @@ use warnings; =head1 NAME -LaTeX::TikZ::Point - Interface role for what LaTeX::TikZ consider as 2D points. +LaTeX::TikZ::Point - Internal representation of what LaTeX::TikZ consider as 2D points. =head1 VERSION @@ -15,13 +15,64 @@ Version 0.01 our $VERSION = '0.01'; -use Any::Moose 'Role'; +use Any::Moose; +use Any::Moose 'Util::TypeConstraints' => [ qw/ + coerce + from + via + find_type_constraint + register_type_constraint +/ ]; -requires qw( - x - y +=head1 ATTRIBUTES + +=head2 C + +The abscissa of the point. + +=cut + +has 'x' => ( + is => 'ro', + isa => 'Num', + required => 1, +); + +=head2 C + +The ordinate of the point. + +=cut + +has 'y' => ( + is => 'ro', + isa => 'Num', + required => 1, +); + +use LaTeX::TikZ::Meta::TypeConstraint::Autocoerce; + +register_type_constraint( + LaTeX::TikZ::Meta::TypeConstraint::Autocoerce->new( + name => 'LaTeX::TikZ::Point::Autocoerce', + parent => find_type_constraint(__PACKAGE__), + ), ); +coerce 'LaTeX::TikZ::Point::Autocoerce' + => from 'LaTeX::TikZ::Point' + => via { $_ }; + +coerce 'LaTeX::TikZ::Point::Autocoerce' + => from 'Num' + => via { LaTeX::TikZ::Point->new(x => $_, y => 0) }; + +coerce 'LaTeX::TikZ::Point::Autocoerce' + => from 'ArrayRef' + => via { LaTeX::TikZ::Point->new(x => $_->[0], y => $_->[1]) }; + +__PACKAGE__->meta->make_immutable; + =head1 AUTHOR Vincent Pit, C<< >>, L.