Commit | Line | Data |
---|---|---|
86530b38 AT |
1 | package Pastel::Geometry::Rectangle;\r |
2 | @ISA = qw (Pastel::Mixin::Mixin Pastel::Shape);\r | |
3 | use strict;\r | |
4 | \r | |
5 | use constant OUT_BOTTOM => 8;\r | |
6 | use constant OUT_LEFT => 1;\r | |
7 | use constant OUT_RIGHT=> 4;\r | |
8 | use constant OUT_TOP => 2;\r | |
9 | \r | |
10 | sub new {\r | |
11 | my $class = shift;\r | |
12 | my $self = {};\r | |
13 | bless $self, ref($class) || $class;\r | |
14 | $self->_init(@_);\r | |
15 | return $self;\r | |
16 | }\r | |
17 | \r | |
18 | sub _init {\r | |
19 | my ($self, @args) =@_;\r | |
20 | my ($x, $y, $width, $height)=\r | |
21 | $self->_rearrange(["X", "Y", "WIDTH", "HEIGHT"], @args);\r | |
22 | $self->{x} = defined($x) ? $x : 0;\r | |
23 | $self->{y} = defined($y) ? $y : 0;\r | |
24 | $self->{w} = defined($width) ? $width : 0;\r | |
25 | $self->{h} = defined($height)? $height : 0;\r | |
26 | \r | |
27 | return $self;\r | |
28 | }\r | |
29 | \r | |
30 | \r | |
31 | sub to_string {\r | |
32 | my $self = shift;\r | |
33 | return ref($self)." Location:[".$self->{x}.",".$self->{y}."] Width:".$self->{w}." Height:".$self->{h};\r | |
34 | }\r | |
35 | \r | |
36 | sub get_x {\r | |
37 | return $_[0]->{x};\r | |
38 | }\r | |
39 | \r | |
40 | sub set_x {\r | |
41 | $_[0]->{x} = $_[1];\r | |
42 | }\r | |
43 | \r | |
44 | sub get_y {\r | |
45 | return $_[0]->{y};\r | |
46 | }\r | |
47 | \r | |
48 | sub set_y {\r | |
49 | $_[0]->{y} = $_[1];\r | |
50 | }\r | |
51 | \r | |
52 | sub get_width {\r | |
53 | return $_[0]->{w};\r | |
54 | }\r | |
55 | \r | |
56 | sub set_width {\r | |
57 | $_[0]->{w} = $_[1];\r | |
58 | }\r | |
59 | \r | |
60 | sub get_height {\r | |
61 | return $_[0]->{h};\r | |
62 | }\r | |
63 | \r | |
64 | sub set_height {\r | |
65 | $_[0]->{h} = $_[1];\r | |
66 | }\r | |
67 | \r | |
68 | sub _draw {\r | |
69 | my $self = shift;\r | |
70 | my $graphics = shift;\r | |
71 | my $style = $self->get_style($graphics);\r | |
72 | my $data = "<rect x=\"".$self->get_x()."\" y=\"".$self->get_y()."\" width=\"".$self->get_width()."\" height=\"".$self->get_height()."\" style=\"".$style."\" \/>";\r | |
73 | return $data;\r | |
74 | \r | |
75 | }\r | |
76 | \r | |
77 | sub is_empty {\r | |
78 | my $self = shift;\r | |
79 | return ($self->get_width() <= 0) || ($self->get_height() <= 0);\r | |
80 | }\r | |
81 | \r | |
82 | sub set_rect {\r | |
83 | my $self = shift;\r | |
84 | my @args = @_;\r | |
85 | #If argument is a Pastel::Geometry::Rectangle\r | |
86 | if ($args[0]->isa("Pastel::Geometry::Rectangle") ){\r | |
87 | $self->set_x($args[0]->get_x());\r | |
88 | $self->set_y($args[0]->get_y());\r | |
89 | $self->set_width($args[0]->get_width());\r | |
90 | $self->set_height($args[0]->get_height());\r | |
91 | }\r | |
92 | else{\r | |
93 | $self->set_x($args[0]);\r | |
94 | $self->set_y($args[1]);\r | |
95 | $self->set_width($args[2]);\r | |
96 | $self->set_height($args[3]);\r | |
97 | }\r | |
98 | }\r | |
99 | \r | |
100 | sub _outcode {\r | |
101 | my $self = shift;\r | |
102 | my ($x, $y) = @_;\r | |
103 | my $out = 0;\r | |
104 | \r | |
105 | if($self->get_width() <= 0){\r | |
106 | $out |= $self->OUT_LEFT | $self->OUT_RIGHT;\r | |
107 | }elsif ( $x < $self->{x}){\r | |
108 | $out |= $self->OUT_LEFT;\r | |
109 | }elsif ( $x > ($self->{x} + $self->{w})){\r | |
110 | $out |= $self->OUT_RIGHT;\r | |
111 | }\r | |
112 | \r | |
113 | if($self->get_height() <=0 ){\r | |
114 | $out |= $self->OUT_TOP | $self->OUT_BOTTOM;\r | |
115 | } elsif ($y < $self->{y}){\r | |
116 | $out |= $self->OUT_TOP;\r | |
117 | } elsif ($y > ( $self->{y} + $self->{h})){\r | |
118 | $out |= $self->OUT_BOTTOM;\r | |
119 | }\r | |
120 | # print "Inside outcode\n";\r | |
121 | # print $self->OUT_LEFT;\r | |
122 | return $out;\r | |
123 | }\r | |
124 | \r | |
125 | \r | |
126 | 1;\r |