1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_vcl.hxx"
26
27 #include <impfont.hxx>
28 #include <vcl/metric.hxx>
29
30 #include <vector>
31 #include <set>
32
33 #include <cstdio>
34
35 // =======================================================================
36
ImplFontMetric()37 ImplFontMetric::ImplFontMetric()
38 : mnAscent( 0 ),
39 mnDescent( 0 ),
40 mnIntLeading( 0 ),
41 mnExtLeading( 0 ),
42 mnLineHeight( 0 ),
43 mnSlant( 0 ),
44 mnMiscFlags( 0 ),
45 mnRefCount( 1 )
46 {}
47
48 // -----------------------------------------------------------------------
49
AddReference()50 inline void ImplFontMetric::AddReference()
51 {
52 // TODO: disable refcounting on the default maps?
53 ++mnRefCount;
54 }
55
56 // -----------------------------------------------------------------------
57
DeReference()58 inline void ImplFontMetric::DeReference()
59 {
60 // TODO: disable refcounting on the default maps?
61 if( --mnRefCount <= 0 )
62 delete this;
63 }
64
65 // -----------------------------------------------------------------------
66
operator ==(const ImplFontMetric & r) const67 bool ImplFontMetric::operator==( const ImplFontMetric& r ) const
68 {
69 if( mnMiscFlags != r.mnMiscFlags )
70 return false;
71 if( mnAscent != r.mnAscent )
72 return false;
73 if( mnDescent != r.mnDescent )
74 return false;
75 if( mnIntLeading != r.mnIntLeading )
76 return false;
77 if( mnExtLeading != r.mnExtLeading )
78 return false;
79 if( mnSlant != r.mnSlant )
80 return false;
81
82 return true;
83 }
84
85 // =======================================================================
86
FontInfo()87 FontInfo::FontInfo()
88 : mpImplMetric( new ImplFontMetric )
89 {}
90
91 // -----------------------------------------------------------------------
92
FontInfo(const FontInfo & rInfo)93 FontInfo::FontInfo( const FontInfo& rInfo )
94 : Font( rInfo )
95 {
96 mpImplMetric = rInfo.mpImplMetric;
97 mpImplMetric->AddReference();
98 }
99
100 // -----------------------------------------------------------------------
101
~FontInfo()102 FontInfo::~FontInfo()
103 {
104 mpImplMetric->DeReference();
105 }
106
107 // -----------------------------------------------------------------------
108
operator =(const FontInfo & rInfo)109 FontInfo& FontInfo::operator=( const FontInfo& rInfo )
110 {
111 Font::operator=( rInfo );
112
113 if( mpImplMetric != rInfo.mpImplMetric )
114 {
115 mpImplMetric->DeReference();
116 mpImplMetric = rInfo.mpImplMetric;
117 mpImplMetric->AddReference();
118 }
119
120 return *this;
121 }
122
123 // -----------------------------------------------------------------------
124
operator ==(const FontInfo & rInfo) const125 sal_Bool FontInfo::operator==( const FontInfo& rInfo ) const
126 {
127 if( !Font::operator==( rInfo ) )
128 return sal_False;
129 if( mpImplMetric == rInfo.mpImplMetric )
130 return sal_True;
131 if( *mpImplMetric == *rInfo.mpImplMetric )
132 return sal_True;
133 return sal_False;
134 }
135
136 // -----------------------------------------------------------------------
137
GetType() const138 FontType FontInfo::GetType() const
139 {
140 return (mpImplMetric->IsScalable() ? TYPE_SCALABLE : TYPE_RASTER);
141 }
142
143 // -----------------------------------------------------------------------
144
IsDeviceFont() const145 sal_Bool FontInfo::IsDeviceFont() const
146 {
147 return mpImplMetric->IsDeviceFont();
148 }
149
150 // -----------------------------------------------------------------------
151
SupportsLatin() const152 sal_Bool FontInfo::SupportsLatin() const
153 {
154 return mpImplMetric->SupportsLatin();
155 }
156
157 // -----------------------------------------------------------------------
158
SupportsCJK() const159 sal_Bool FontInfo::SupportsCJK() const
160 {
161 return mpImplMetric->SupportsCJK();
162 }
163
164 // -----------------------------------------------------------------------
165
SupportsCTL() const166 sal_Bool FontInfo::SupportsCTL() const
167 {
168 return mpImplMetric->SupportsCTL();
169 }
170
171 // =======================================================================
172
FontMetric(const FontMetric & rMetric)173 FontMetric::FontMetric( const FontMetric& rMetric )
174 : FontInfo( rMetric )
175 {}
176
177 // -----------------------------------------------------------------------
178
GetAscent() const179 long FontMetric::GetAscent() const
180 {
181 return mpImplMetric->GetAscent();
182 }
183
184 // -----------------------------------------------------------------------
185
GetDescent() const186 long FontMetric::GetDescent() const
187 {
188 return mpImplMetric->GetDescent();
189 }
190
191 // -----------------------------------------------------------------------
192
GetIntLeading() const193 long FontMetric::GetIntLeading() const
194 {
195 return mpImplMetric->GetIntLeading();
196 }
197
198 // -----------------------------------------------------------------------
199
GetExtLeading() const200 long FontMetric::GetExtLeading() const
201 {
202 return mpImplMetric->GetExtLeading();
203 }
204
205 // -----------------------------------------------------------------------
206
GetLineHeight() const207 long FontMetric::GetLineHeight() const
208 {
209 return mpImplMetric->GetLineHeight();
210 }
211
212 // -----------------------------------------------------------------------
213
GetSlant() const214 long FontMetric::GetSlant() const
215 {
216 return mpImplMetric->GetSlant();
217 }
218
219 // -----------------------------------------------------------------------
220
operator =(const FontMetric & rMetric)221 FontMetric& FontMetric::operator =( const FontMetric& rMetric )
222 {
223 FontInfo::operator=( rMetric );
224 return *this;
225 }
226
227 // -----------------------------------------------------------------------
228
operator ==(const FontMetric & rMetric) const229 sal_Bool FontMetric::operator==( const FontMetric& rMetric ) const
230 {
231 return FontInfo::operator==( rMetric );
232 }
233
234 // =======================================================================
235
236