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 / Font.pm
CommitLineData
86530b38
AT
1package Tk::Font;
2use vars qw($VERSION);
3$VERSION = '3.023'; # $Id: //depot/Tk8/Tk/Font.pm#23 $
4require Tk::Widget;
5use strict;
6use Carp;
7use overload '""' => 'as_string';
8sub as_string { return ${$_[0]} }
9
10*MainWindow = \&Tk::Widget::MainWindow;
11
12foreach my $key (qw(actual metrics measure configure))
13 {
14 no strict 'refs';
15 *{$key} = sub { shift->Tk::font($key,@_) };
16 }
17
18Construct Tk::Widget 'Font';
19
20my @xfield = qw(foundry family weight slant swidth adstyle pixel
21 point xres yres space avgwidth registry encoding);
22my @tkfield = qw(family size weight slant underline overstrike);
23my %tkfield = map { $_ => "-$_" } @tkfield;
24
25sub _xonly { my $old = '*'; return $old }
26
27sub Pixel
28{
29 my $me = shift;
30 my $old = $me->configure('-size');
31 $old = '*' if ($old > 0);
32 if (@_)
33 {
34 $me->configure(-size => -$_[0]);
35 }
36 return $old;
37}
38
39sub Point
40{
41 my $me = shift;
42 my $old = 10*$me->configure('-size');
43 $old = '*' if ($old < 0);
44 if (@_)
45 {
46 $me->configure(-size => int($_[0]/10));
47 }
48 return $old;
49}
50
51foreach my $f (@tkfield,@xfield)
52 {
53 no strict 'refs';
54 my $sub = "\u$f";
55 unless (defined &{$sub})
56 {
57 my $key = $tkfield{$f};
58 if (defined $key)
59 {
60 *{$sub} = sub { shift->configure($key,@_) };
61 }
62 else
63 {
64 *{$sub} = \&_xonly;
65 }
66 }
67 }
68
69sub new
70{
71 my $pkg = shift;
72 my $w = shift;
73 my $me;
74 if (scalar(@_) == 1)
75 {
76 $me = $w->Tk::font('create',@_);
77 }
78 else
79 {
80 croak 'Odd number of args' if @_ & 1;
81 my %attr;
82 while (@_)
83 {
84 my $k = shift;
85 my $v = shift;
86 my $t = (substr($k,0,1) eq '-') ? $k : $tkfield{$k};
87 if (defined $t)
88 {
89 $attr{$t} = $v;
90 }
91 elsif ($k eq 'point')
92 {
93 $attr{'-size'} = -int($v/10+0.5);
94 }
95 elsif ($k eq 'pixel')
96 {
97 $attr{'-size'} = -$v;
98 }
99 else
100 {
101 carp "$k ignored" if $^W;
102 }
103 }
104 $me = $w->Tk::font('create',%attr);
105 }
106 return bless $me,$pkg;
107}
108
109sub Pattern
110{
111 my $me = shift;
112 my @str;
113 foreach my $f (@xfield)
114 {
115 my $meth = "\u$f";
116 my $str = $me->$meth();
117 if ($f eq 'family')
118 {
119 $str =~ s/(?:Times\s+New\s+Roman|New York)/Times/i;
120 $str =~ s/(?:Courier\s+New|Monaco)/Courier/i;
121 $str =~ s/(?:Arial|Geneva)/Helvetica/i;
122 }
123 elsif ($f eq 'slant')
124 {
125 $str = substr($str,0,1);
126 }
127 elsif ($f eq 'weight')
128 {
129 $str = 'medium' if ($str eq 'normal');
130 }
131 push(@str,$str);
132 }
133 return join('-', '', @str);
134}
135
136sub Name
137{
138 my $me = shift;
139 return $$me if (!wantarray || ($^O eq 'MSWin32'));
140 my $max = shift || 128;
141 my $w = $me->MainWindow;
142 my $d = $w->Display;
143 return $d->XListFonts($me->Pattern,$max);
144}
145
146sub Clone
147{
148 my $me = shift;
149 return ref($me)->new($me,$me->actual,@_);
150}
151
152sub ascent
153{
154 return shift->metrics('-ascent');
155}
156
157sub descent
158{
159 return shift->metrics('-descent');
160}
161
1621;
163