| 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 |