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 / X11Font.pm
CommitLineData
86530b38
AT
1package Tk::X11Font;
2use vars qw($VERSION);
3$VERSION = '3.013'; # $Id: //depot/Tk8/Tk/X11Font.pm#13 $
4
5require Tk::Widget;
6require Tk::Xlib;
7use strict;
8
9Construct Tk::Widget 'X11Font';
10
11my @field = qw(foundry family weight slant swidth adstyle pixel
12 point xres yres space avgwidth registry encoding);
13
14map { eval "sub \u$_ { shift->elem('$_', \@_) }" } @field;
15
16use overload '""' => 'as_string';
17
18sub new
19{
20 my $pkg = shift;
21 my $w = shift;
22
23 my %me = ();
24 my $d = $w->Display;
25
26 local $_;
27
28 if(scalar(@_) == 1)
29 {
30 my $pattern = shift;
31
32 if($pattern =~ /\A(-[^-]*){14}\Z/)
33 {
34 @me{@field} = split(/-/, substr($pattern,1));
35 }
36 else
37 {
38 $me{Name} = $pattern;
39
40 if($pattern =~ /^[^-]?-([^-]*-){2,}/)
41 {
42 my $f = $d->XListFonts($pattern,1);
43
44 if($f && $f =~ /\A(-[^-]*){14}/)
45 {
46 my @f = split(/-/, substr($f,1));
47 my @n = split(/-/, $pattern);
48 my %f = ();
49 my $i = 0;
50
51 shift @n if($pattern =~ /\A-/);
52
53 while(@n && @f)
54 {
55 if($n[0] eq '*')
56 {
57 shift @n;
58 }
59 elsif($n[0] eq $f[0])
60 {
61 $f{$field[$i]} = shift @n;
62 }
63 $i++;
64 shift @f;
65 }
66
67 %me = %f
68 unless(@n);
69 }
70 }
71 }
72 }
73 else
74 {
75 %me = @_;
76 }
77
78 map { $me{$_} ||= '*' } @field;
79
80 $me{Display} = $d;
81 $me{MainWin} = $w->MainWindow;
82
83 bless \%me, $pkg;
84}
85
86sub Pattern
87{
88 my $me = shift;
89 return join('-', '',@{$me}{@field});
90}
91
92sub Name
93{
94 my $me = shift;
95 my $max = wantarray ? shift || 128 : 1;
96
97 if ($^O eq 'MSWin32' or ($^O eq 'cygwin' and $Tk::platform eq 'MSWin32'))
98 {
99 my $name = $me->{Name};
100 if (!defined $name)
101 {
102 my $fm = $me->{'family'} || 'system';
103 my $sz = -int($me->{'point'}/10) || -($me->{'pixel'}) || 12;
104 my @opt = (-family => $fm, -size => $sz );
105 my $wt = $me->{'weight'};
106 if (defined $wt)
107 {
108 $wt = 'normal' unless $wt =~ /bold/i;
109 push(@opt,-weight => lc($wt));
110 }
111 my $sl = $me->{'slant'};
112 if (defined $sl)
113 {
114 $sl = ($sl =~ /^[io]/) ? 'italic' : 'roman';
115 push(@opt,-slant => $sl);
116 }
117 $name = join(' ',@opt);
118 }
119 return $name;
120 }
121 else
122 {
123 my $name = $me->{Name} ||
124 join('-', '',@{$me}{@field});
125 return $me->{Display}->XListFonts($name,$max);
126 }
127}
128
129sub as_string
130{
131 return shift->Name;
132}
133
134sub elem
135{
136 my $me = shift;
137 my $elem = shift;
138
139 return undef
140 if(exists $me->{'Name'});
141
142 my $old = $me->{$elem};
143
144 $me->{$elem} = shift
145 if(@_);
146
147 $old;
148}
149
150sub Clone
151{
152 my $me = shift;
153
154 $me = bless { %$me }, ref($me);
155
156 unless(exists $me->{'Name'})
157 {
158 while(@_)
159 {
160 my $k = shift;
161 my $v = shift || $me->{MainWin}->BackTrace('Tk::Font->Clone( key => value, ... )');
162 $me->{$k} = $v;
163 }
164 }
165
166 $me;
167}
168
169sub ascent
170{
171 my $me = shift;
172 my $name = $me->Name;
173 $me->{MainWin}->fontMetrics($name, '-ascent');
174}
175
176sub descent
177{
178 my $me = shift;
179 my $name = $me->Name;
180 $me->{MainWin}->fontMetrics($name, '-descent');
181}
182
1831;
184