Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / tools / perl-5.8.0 / lib / site_perl / 5.8.0 / sun4-solaris / Tk / Region.pm
CommitLineData
86530b38
AT
1package Tk::Region;
2
3# Ideas in progress do not document ...
4
5use strict;
6
7use vars qw($VERSION);
8$VERSION = '3.004'; # $Id: //depot/Tk8/Tk/Region.pm#4 $
9
10use Tk::Widget ();
11
12Construct Tk::Widget 'Region';
13
14my %index = (-widget => 1, '-x' => 2, '-y' => 3, -width => 4, -height => 5);
15
16sub _attr
17{
18 my ($obj,$key,$val) = @_;
19 if (@_ > 2)
20 {
21 $obj->{$key} = $val;
22 }
23 return $obj->{$key}
24}
25
26foreach my $name (qw(widget x y width height))
27 {
28 my $key = "-$name";
29 no strict 'refs';
30 *{$name} = sub { shift->_attr($key,@_) };
31 }
32
33sub new
34{
35 my $class = shift;
36 my $widget = shift;
37 my $obj = bless [\%index,$widget,0,0,0,0],$class;
38 $obj->configure(@_);
39}
40
41sub cfgDefault
42{
43 my ($class,$key) = @_;
44 return undef;
45}
46
47sub cfgName
48{
49 my ($class,$key) = @_;
50 $key =~ s/^-//;
51 return lcfirst($key);
52}
53
54sub cfgClass
55{
56 return ucfirst(shift->cfgName(@_));
57}
58
59sub configure
60{
61 my $obj = shift;
62 my @results;
63 if (@_ > 1)
64 {
65 while (@_)
66 {
67 my $key = shift;
68 my $val = shift;
69 if (exists $obj->{$key})
70 {
71 $obj->{$key} = $val;
72 }
73 else
74 {
75 my ($meth) = $key =~ /^-(\w+)$/;
76 croak("Invalid option $key") unless $obj->can($meth);
77 $obj->$meth($val);
78 }
79 }
80 }
81 elsif (@_ == 1)
82 {
83 my $key = shift;
84 my $value = $obj->cget($key);
85 push(@results,$key,$obj->cfgName($key),$obj->cfgClass($key),$obj->cfgDefault($key),$value);
86 }
87 else
88 {
89 foreach my $key (sort keys %$obj)
90 {
91 push(@results,scalar($obj->configure($key)))
92 }
93 }
94 return wantarray ? @results : \@results;
95}
96
97sub cget
98{
99 my $obj = shift;
100 my $key = shift;
101 return $obj->{$key} if exists $obj->{$key};
102 my ($meth) = $key =~ /^-(\w+)$/;
103 croak("Invalid option $key") unless $obj->can($meth);
104 return $obj->$meth();
105}
106
107sub bbox
108{
109 my $obj = shift;
110 my @results;
111 if (@_)
112 {
113 my $ref = (@_ == 1) ? shift : \@_;
114 my ($x1,$y1,$x2,$y2) = (ref $ref) ? @$ref : split(/\s+/,$ref);
115 ($x2,$x1) = ($x1,$x2) if ($x2 < $x1);
116 ($y2,$y1) = ($y1,$y2) if ($y2 < $y1);
117 $obj->width($x2-$x1);
118 $obj->height($y2-$y1);
119 $obj->x($x1);
120 $obj->y($y1);
121 }
122 else
123 {
124 my $x = $obj->x;
125 my $y = $obj->x;
126 push(@results,$x,$y,$x+$obj->width,$y+$obj->height);
127 }
128 return wantarray ? @results : \@results;
129}
130
131sub rootx
132{
133 my $obj = shift;
134 if (@_)
135 {
136 my $x = shift;
137 $obj->x($x-$obj->widget->rootx);
138 }
139 return $obj->widget->rootx + $obj->{'-x'}
140}
141
142sub rooty
143{
144 my $obj = shift;
145 if (@_)
146 {
147 my $y = shift;
148 $obj->y($y-$obj->widget->rootx);
149 }
150 return $obj->widget->rooty + $obj->{'-y'}
151}
152
153sub rootxy
154{
155 my $obj = shift;
156 if (@_)
157 {
158 $obj->rootx(shift);
159 $obj->rooty(shift);
160 }
161 my @results = ($obj->rootx,$obj->rooty);
162 return wantarray ? @results : \@results;
163}
164
165sub rootbbox
166{
167 my $obj = shift;
168 my ($x1,$y1) = $obj->rootxy;
169 my $x2 = $x1+$obj->width;
170 my $y2 = $y1+$obj->height;
171 my @results = ($x1,$y1,$x2,$y2);
172 return wantarray ? @results : \@results;
173}
174
175
176*Width = \&width;
177*Height = \&height;
178*X = \&rootx;
179*Y = \&rooty;
180
1811;
182__END__