Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / tools / perl-5.8.0 / lib / site_perl / 5.8.0 / Pastel / LinearGradient.pm
CommitLineData
86530b38
AT
1package Pastel::LinearGradient;
2@ISA = qw(Pastel::GradientI Pastel::Mixin::Mixin);
3use Carp;
4use strict;
5
6{
7 my $id = 0;
8 sub _id { return $id++ ; }
9}
10
11use constant USER_SPACE => "userSpaceOnUse";
12use constant BOUNDING_BOX => "objectBoundingBox";
13use constant PAD => "pad";
14use constant REFLECT => "reflect";
15use constant REPEAT => "repeat";
16use constant RADIAL => "radial";
17use constant LINEAR => "linear";
18
19# Perl module for linear Gradientpaint
20# Cared for by Malay<curiouser@ccmb.ap.nic.in>
21# Copyright 2001, Malay Kumar Basu
22# You may distribute this module under the same terms as perl itself
23
24
25=head2 NAME
26
27Pastel::LinearGradient
28
29=head2 DESCRIPTION
30
31In SVG there are two different types of GradientPaint that you can use.
32"Linear" and "Circular". Both of these are represented in Pastel by separate
33modules. Pastel::LinearGradient represent a Gradient paint in liear mode. The
34Gradient goes from one color to the next from one point to another on the
35vector from the first point to the second.
36
37=head2 CONSTRAUCTOR
38
39=head3 Pastel::LinearGradient()
40
41=head3 Pastel::LinearGradient(-color1=>$color1, -color2=>$color2)
42
43=head3 Pastel::LinearGradient(-point1=>$point1, -color1=>$color1, -point2=>$point2, -color2=>$color2)
44
45=head3 Pastel::LinearGradient(-point1=>$point1, -color1=>$color1, -point2=>$point2, -color2=>$color2, -method=>Pastel::LinearGradient::PAD/REFLECT/REPEAT, -units=>Pastel::LinearGradient::USER_SPACE/BOUNDING_BOX)
46
47=head3 Pastel::LinearGradient(-point1=>$point1, -color1=>$color1, -point2=>$point2, -color2=>$color2, -method=>Pastel::LinearGradient::PAD/REFLECT/REPEAT)
48
49=cut
50
51sub new {
52 my $class = shift;
53 my $self = {};
54 bless $self, ref($class) || $class;
55 $self->_init(@_);
56 return $self;
57}
58
59sub _init {
60 my ($self, @args) = @_;
61 my($p1, $c1, $p2, $c2, $m, $u)=$self->_rearrange(["POINT1",
62 "COLOR1",
63 "POINT2",
64 "COLOR2",
65 "METHOD",
66 "UNITS"], @args);
67
68 if ( defined($p1) ){ $self->{p1} = $p1; }
69 if ( defined($p2) ){ $self->{p2} = $p2; }
70 if ( defined($c1) ){ $self->{c1} = $c1; }
71 if ( defined($c2) ){ $self->{c2} = $c2; }
72 if ( defined($m) ) { $self->{method} = $m; }
73 if (defined ($u) ) { $self->{units} = $u; }
74
75 $self->{id} = "LinearGradient". $self->_get_id();
76 $self->{stops} = [];
77
78 if( defined($self->{c1}) && defined($self->{c2})){
79 my $stop1 = Pastel::GradientStop->new(0, $c1);
80 my $stop2 = Pastel::GradientStop->new(100, $c2);
81
82 $self->add_stop($stop1);
83 $self->add_stop($stop2);
84 }
85
86
87
88 return $self;
89}
90
91sub get_point1 {
92 my $self = shift;
93 return (defined($self->{p1}))? $self->{p1}: undef;
94}
95
96sub get_point2 {
97 my $self = shift;
98 return (defined($self->{p2}))? $self->{p2}: undef;
99}
100
101sub get_spread_method {
102 my $self= shift;
103 return (defined($self->{method}))? $self->{method}: undef;
104}
105
106sub get_units {
107 my $self = shift;
108 return (defined($self->{units}))? $self->{units}: undef;
109}
110sub to_svg {
111 my $self = shift;
112
113 my $s = '<linearGradient id="'.$self->get_id().'" ';
114 if ( defined( $self->{p1} )){
115 $s .= 'x1="'.$self->get_point1()->get_x().'" ';
116 $s .= 'y1="'.$self->get_point1()->get_y().'" ';
117 }
118
119 if (defined($self->{p2})){
120 $s.= 'x2="'.$self->get_point2()->get_x().'" ';
121 $s.= 'y2="'.$self->get_point2()->get_y().'" ';
122 }
123
124 if (defined($self->{method})){
125 $s .= 'spreadMethod="'.$self->get_method().'" ';
126 }
127
128 if (defined($self->{units})){
129 $s .= 'gradientUnits="'.$self->get_units().'" ';
130 }
131
132 $s .= '>';
133
134 if(@{$self->{stops}} > 0){
135 for( my $i = 0; $i < @{$self->{stops}}; $i++){
136 $s .= ${$self->{stops}}[$i]->to_svg();
137 }
138}
139
140 $s .= '</linearGradient>';
141}
142
143sub get_ref {
144 my $self = shift;
145 return '#'.$self->get_id();
146}
147
148sub _get_id {
149 return $_[0]->_id();
150}
151
152sub get_id {
153 return $_[0]->{id};
154}
1551;
156
157
158