Perl x Open Food Facts Hackathon: Paris, France - May 24-25 Learn more

package Color;
=head1 NAME
Color - A XFig file animator class - Color object
=head1 DESCRIPTION
Color pseudo-object (user defined colors) - object code in FIG format: 0.
This is used to define arbitrary colors beyond the 32 standard colors.
Here are all the attributes of this class:
B<color_bumber, rgb>
=head1 FIG ATTRIBUTES
=over
=item color_bumber
color number, from 32-543 (512 total)
The two color fields (pen and fill; pen only, for texts) are
defined as follows:
-1: Default;
0: Black;
1: Blue;
2: Green;
3: Cyan;
4: Red;
5: Magenta;
6: Yellow;
7: White;
8..11: four shades of blue (dark to lighter);
12..14: three shades of green (dark to lighter);
15..17: three shades of cyan (dark to lighter);
18..20: three shades of red (dark to lighter);
21..23: three shades of magenta (dark to lighter);
24..26: three shades of brown (dark to lighter);
27..30: four shades of pink (dark to lighter);
31: Gold;
32..543 (512 total): user colors defined in color pseudo-objects (type 0).
For White color, the area fill field is defined as follows:
-1: not filled;
0: black;
1..19: shades of grey, from darker to lighter;
20: white;
21..40: not used;
41..56: see patterns for colors, below.
For Black or Default color, the area fill field is defined as follows:
-1: not filled;
0: white;
1..19: shades of grey, from lighter to darker;
20: black;
21..40: not used;
41..56: see patterns for colors, below.
For all other colors, the area fill field is defined as follows:
-1: not filled;
0: black;
1..19: "shades" of the color, from darker to lighter,
a shade is defined as the color mixed with black;
20: full saturation of the color;
21..39: "tints" of the color from the color to white,
a tint is defined as the color mixed with white;
40: white;
41: 30 degree left diagonal pattern;
42: 30 degree right diagonal pattern;
43: 30 degree crosshatch;
44: 45 degree left diagonal pattern;
45: 45 degree right diagonal pattern;
46: 45 degree crosshatch;
47: bricks;
48: circles;
49: horizontal lines;
50: vertical lines;
51: crosshatch;
52: fish scales;
53: small fish scales;
54: octagons;
55: horizontal "tire treads";
56: vertical "tire treads".
=item rgb
hex string rgb values:
hexadecimal string describing red, green and blue values (e.g. #330099)
=back
=cut
use strict;
# constructor
sub new {
my $proto = shift;
my $class = ref($proto) || $proto;
my $self = {};
#$self->{object_code} = 0;
$self->{color_number} = shift;
$self->{rgb} = shift;
bless ($self, $class);
return $self;
}
# methods
sub clone {
my $self = shift;
my $obj = new Color;
$obj->{$_} = $self->{$_} foreach (keys %{$self});
return $obj;
}
sub output {
my $self = shift;
my $fh = shift;
printf $fh "0 %d %s\n", @$self{'color_number','rgb'};
}
1;