The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Graphics::Primitive::Oriented;
use Moose::Role;

use Moose::Util::TypeConstraints;

enum 'Graphics::Primitive::Orientations' => [qw(vertical horizontal)];

has 'orientation' => (
    is => 'rw',
    isa => 'Graphics::Primitive::Orientations',
);

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

    return 0 unless $self->orientation;

    return ($self->orientation eq 'vertical');
}

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

    !$self->is_vertical;
}

no Moose;
1;
__END__
=head1 NAME

Graphics::Primitive::Oriented - Role for components that care about
orientation.

=head1 SYNOPSIS

Some components (or things that use components) require a bit more information
than origin and width/height.  The orientation role allows a component to
specify whether is vertically or horizontally oriented.

    package My::Component;
    
    extends 'Graphics::Primitive::Component';
    
    with 'Graphics::Primitive::Oriented';
    
    1;

=head1 METHODS

=over 

=item I<is_vertical>

Returns true if the component is vertically oriented.

=item I<is_horizontal>

Returns true if the component is not vertically oriented.

=item I<orientation>

The way a component is oriented. Values allowed are 'horizontal' or
'vertical'.


=back

=head1 AUTHOR

Cory Watson, C<< <gphat@cpan.org> >>

=head1 SEE ALSO

perl(1)

=head1 COPYRIGHT & LICENSE

Copyright 2008-2010 by Cory G Watson.

This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.