package Image::ANSI::Pixel;

=head1 NAME

Image::ANSI::Pixel - Pixel object

=head1 SYNOPSIS

	$pixel = Image::ANSI::Pixel->new;

	# foreground color
	$pixel->fg( $fg );

	# background color
	$pixel->bg( $bg );

	# blinking
	$pixel->blink( $blink );

	# or all 3 from an attribute byte
	$pixel->attr( $attr );

	# the character
	$pixel->char( $char );

=cut

use base qw( Class::Accessor );

use strict;
use warnings;

# Attribute byte constants
use constant ATTR_BLINK => 128;
use constant ATTR_BG    => 112;
use constant ATTR_FG    => 15;

our $VERSION = '0.10';

__PACKAGE__->mk_accessors( qw( char fg bg blink ) );

=head1 METHODS

=head2 new( %options )

Create a new pixel and set its attributes.

=cut

sub new {
	my $class   = shift;
	my %options = @_;
	my $self    = {};

	bless $self, $class;

	$self->$_( $options{ $_ } ) for keys %options;

	return $self;
}

=head2 attr( [$attr] )

Set the foreground, background and blink properties from an attribute byte.

=cut

sub attr {
	my $self = shift;
	my $attr = $_[ 0 ];

	if( @_ ) {
		$self->fg( $attr & ATTR_FG );
		$self->bg( ( $attr & ATTR_BG ) >> 4 );
		$self->blink( ( $attr & ATTR_BLINK ) >> 7 );
	}
	else {
		$attr  = 0;
		$attr |= $self->fg;
		$attr |= ( $self->bg << 4 );
		$attr |= ( $self->blink << 7 );
	}

	return $attr;
}

=head2 fg( [$fg] )

Set the foreground color

=head2 bg( [$bg] )

Set the background color

=head2 blink( [$blink] )

Set the blink property

=head2 char( [$char] )

Set the character to be displayed

=head1 AUTHOR

=over 4 

=item * Brian Cassidy E<lt>bricas@cpan.orgE<gt>

=back

=head1 COPYRIGHT AND LICENSE

Copyright 2004-2009 by Brian Cassidy

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

=cut

1;
