/src/libreoffice/lotuswordpro/inc/lwpfont.hxx
Line | Count | Source |
1 | | /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ |
2 | | /************************************************************************* |
3 | | * |
4 | | * The Contents of this file are made available subject to the terms of |
5 | | * either of the following licenses |
6 | | * |
7 | | * - GNU Lesser General Public License Version 2.1 |
8 | | * - Sun Industry Standards Source License Version 1.1 |
9 | | * |
10 | | * Sun Microsystems Inc., October, 2000 |
11 | | * |
12 | | * GNU Lesser General Public License Version 2.1 |
13 | | * ============================================= |
14 | | * Copyright 2000 by Sun Microsystems, Inc. |
15 | | * 901 San Antonio Road, Palo Alto, CA 94303, USA |
16 | | * |
17 | | * This library is free software; you can redistribute it and/or |
18 | | * modify it under the terms of the GNU Lesser General Public |
19 | | * License version 2.1, as published by the Free Software Foundation. |
20 | | * |
21 | | * This library is distributed in the hope that it will be useful, |
22 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
23 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
24 | | * Lesser General Public License for more details. |
25 | | * |
26 | | * You should have received a copy of the GNU Lesser General Public |
27 | | * License along with this library; if not, write to the Free Software |
28 | | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, |
29 | | * MA 02111-1307 USA |
30 | | * |
31 | | * |
32 | | * Sun Industry Standards Source License Version 1.1 |
33 | | * ================================================= |
34 | | * The contents of this file are subject to the Sun Industry Standards |
35 | | * Source License Version 1.1 (the "License"); You may not use this file |
36 | | * except in compliance with the License. You may obtain a copy of the |
37 | | * License at http://www.openoffice.org/license.html. |
38 | | * |
39 | | * Software provided under this License is provided on an "AS IS" basis, |
40 | | * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, |
41 | | * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, |
42 | | * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. |
43 | | * See the License for the specific provisions governing your rights and |
44 | | * obligations concerning the Software. |
45 | | * |
46 | | * The Initial Developer of the Original Code is: IBM Corporation |
47 | | * |
48 | | * Copyright: 2008 by IBM Corporation |
49 | | * |
50 | | * All Rights Reserved. |
51 | | * |
52 | | * Contributor(s): _______________________________________ |
53 | | * |
54 | | * |
55 | | ************************************************************************/ |
56 | | /************************************************************************* |
57 | | * @file |
58 | | * Font manager related classes header file |
59 | | * LwpFontTableEntry, LwpFontTable, LwpFontNameEntry, |
60 | | * LwpFontAttrEntry, LwpFontNameManager,LwpFontAttrManager, |
61 | | * LwpFontManager |
62 | | ************************************************************************/ |
63 | | |
64 | | #ifndef INCLUDED_LOTUSWORDPRO_INC_LWPFONT_HXX |
65 | | #define INCLUDED_LOTUSWORDPRO_INC_LWPFONT_HXX |
66 | | |
67 | | #include <config_lgpl.h> |
68 | | #include <rtl/ref.hxx> |
69 | | #include "lwpobjstrm.hxx" |
70 | | #include "lwpatomholder.hxx" |
71 | | #include "lwpcolor.hxx" |
72 | | #include "xfilter/xffont.hxx" |
73 | | #include <memory> |
74 | | |
75 | | class LwpFontTableEntry |
76 | | { |
77 | | public: |
78 | 94.1M | LwpFontTableEntry(){} |
79 | | public: |
80 | | void Read(LwpObjectStream *pStrm); |
81 | | OUString const & GetFaceName() const; |
82 | | private: |
83 | | LwpAtomHolder m_WindowsFaceName; //font face name under windows |
84 | | LwpAtomHolder m_FaceName; //font face name |
85 | | void RegisterFontDecl(); |
86 | | //Not useful now, so skip |
87 | | //LwpPanoseNumber m_PanoseNumber; |
88 | | }; |
89 | | |
90 | | class LwpFontTable |
91 | | { |
92 | | public: |
93 | | LwpFontTable(); |
94 | | ~LwpFontTable(); |
95 | | public: |
96 | | void Read(LwpObjectStream *pStrm); |
97 | | OUString GetFaceName(sal_uInt16 index); //index: start from 1 |
98 | | // void RegisterFontDecls(); |
99 | | private: |
100 | | sal_uInt16 m_nCount; |
101 | | std::unique_ptr<LwpFontTableEntry[]> m_pFontEntries; |
102 | | }; |
103 | | |
104 | | class LwpFontNameEntry |
105 | | { |
106 | | public: |
107 | | LwpFontNameEntry() |
108 | 40.2M | : m_nOverrideBits(0) |
109 | 40.2M | , m_nApplyBits(0) |
110 | 40.2M | , m_nPointSize(0) |
111 | 40.2M | , m_nOverstrike(0) |
112 | 40.2M | , m_nTightness(0) |
113 | 40.2M | , m_nFaceName(0) |
114 | 40.2M | , m_nAltFaceName(0) |
115 | 40.2M | {} |
116 | | public: |
117 | | void Read(LwpObjectStream *pStrm); |
118 | 27.2k | sal_uInt16 GetFaceID() const {return m_nFaceName;} |
119 | 16.3k | sal_uInt16 GetAltFaceID() const {return m_nAltFaceName;} |
120 | | void Override(rtl::Reference<XFFont> const & pFont); |
121 | | inline bool IsFaceNameOverridden() const; |
122 | | inline bool IsAltFaceNameOverridden() const; |
123 | | private: |
124 | | //Data of CFontDescriptionOverrideBase |
125 | | sal_uInt8 m_nOverrideBits; |
126 | | sal_uInt8 m_nApplyBits; |
127 | | sal_uInt32 m_nPointSize; |
128 | | sal_uInt16 m_nOverstrike; |
129 | | sal_uInt16 m_nTightness; |
130 | | LwpColor m_Color; |
131 | | LwpColor m_BackColor; |
132 | | //Data of LwpFontNameEntry |
133 | | sal_uInt16 m_nFaceName; //CFontTableID |
134 | | sal_uInt16 m_nAltFaceName; //CFontTableID |
135 | | enum |
136 | | { |
137 | | POINTSIZE = 0x01, |
138 | | COLOR = 0x02, |
139 | | OVERSTRIKE = 0x04, |
140 | | TIGHTNESS = 0x08, |
141 | | FACENAME = 0x10, |
142 | | BKCOLOR = 0x20, |
143 | | ALTFACENAME = 0x40, |
144 | | ALL_BITS = (POINTSIZE | COLOR | OVERSTRIKE |
145 | | | ALTFACENAME |
146 | | | TIGHTNESS | FACENAME | BKCOLOR) |
147 | | }; |
148 | | |
149 | | inline bool IsPointSizeOverridden() const; |
150 | | inline bool IsColorOverridden() const; |
151 | | inline bool IsBackgroundColorOverridden() const; |
152 | | //TODO |
153 | | // inline sal_Bool IsTightnessOverridden(); |
154 | | // inline sal_Bool IsAnythingOverridden(); |
155 | | }; |
156 | | |
157 | | class LwpFontNameManager |
158 | | { |
159 | | public: |
160 | | LwpFontNameManager(); |
161 | | ~LwpFontNameManager(); |
162 | | OUString GetNameByIndex(sal_uInt16 index); |
163 | | private: |
164 | | sal_uInt16 m_nCount; |
165 | | std::unique_ptr<LwpFontNameEntry[]> m_pFontNames; |
166 | | LwpFontTable m_FontTbl; |
167 | | |
168 | | public: |
169 | | void Read(LwpObjectStream *pStrm); |
170 | | void Override(sal_uInt16 index, rtl::Reference<XFFont> const & pFont); |
171 | | }; |
172 | | |
173 | | class LwpFontAttrEntry |
174 | | { |
175 | | public: |
176 | | LwpFontAttrEntry() |
177 | 8.55M | : m_nAttrBits(0) |
178 | 8.55M | , m_nAttrOverrideBits(0) |
179 | 8.55M | , m_nAttrApplyBits(0) |
180 | 8.55M | , m_nAttrOverrideBits2(0) |
181 | 8.55M | , m_nAttrApplyBits2(0) |
182 | 8.55M | , m_nCase(0) |
183 | 8.55M | , m_nUnder(0) |
184 | 8.55M | {} |
185 | | public: |
186 | | void Read(LwpObjectStream *pStrm); |
187 | | void Override(rtl::Reference<XFFont> const & pFont); |
188 | | private: |
189 | | sal_uInt16 m_nAttrBits; |
190 | | sal_uInt16 m_nAttrOverrideBits; |
191 | | sal_uInt16 m_nAttrApplyBits; |
192 | | sal_uInt8 m_nAttrOverrideBits2; |
193 | | sal_uInt8 m_nAttrApplyBits2; |
194 | | sal_uInt8 m_nCase; |
195 | | sal_uInt8 m_nUnder; |
196 | | enum |
197 | | { |
198 | | BOLD = 0x0001, |
199 | | ITALIC = 0x0002, |
200 | | STRIKETHRU = 0x0004, |
201 | | |
202 | | SUPERSCRIPT = 0x0100, |
203 | | SUBSCRIPT = 0x0200, |
204 | | |
205 | | SMALLCAPS = 0x0400, |
206 | | |
207 | | ALL_ATTRS = BOLD | ITALIC | STRIKETHRU |
208 | | | SUPERSCRIPT | SUBSCRIPT |
209 | | | SMALLCAPS, |
210 | | |
211 | | CASE_DONTCARE = 0, |
212 | | CASE_NORMAL = 1, |
213 | | CASE_UPPER = 2, |
214 | | CASE_LOWER = 3, |
215 | | CASE_INITCAPS = 4, |
216 | | CASE_STYLE = 7, |
217 | | |
218 | | UNDER_DONTCARE = 0, |
219 | | UNDER_OFF = 1, |
220 | | UNDER_SINGLE = 2, |
221 | | UNDER_DOUBLE = 3, |
222 | | UNDER_WORD_SINGLE = 4, |
223 | | UNDER_WORD_DOUBLE = 5, |
224 | | UNDER_STYLE = 7, |
225 | | |
226 | | CASE = 0x01, |
227 | | UNDER = 0x02, |
228 | | ALL_ATTRS2 = CASE | UNDER |
229 | | }; |
230 | | bool Is(sal_uInt16 Attr); |
231 | | bool IsBoldOverridden() const; |
232 | | bool IsItalicOverridden() const; |
233 | | bool IsStrikeThruOverridden() const; |
234 | | bool IsSmallCapsOverridden() const; |
235 | | bool IsSuperOverridden() const; |
236 | | bool IsSubOverridden() const; |
237 | | bool IsUnderlineOverridden() const; |
238 | | bool IsCaseOverridden() const; |
239 | | |
240 | | }; |
241 | | |
242 | | class LwpFontAttrManager |
243 | | { |
244 | | public: |
245 | | LwpFontAttrManager() |
246 | 20.4k | : m_nCount(0) |
247 | 20.4k | {} |
248 | | ~LwpFontAttrManager(); |
249 | | public: |
250 | | void Read(LwpObjectStream *pStrm); |
251 | | void Override(sal_uInt16 index, rtl::Reference<XFFont> const & pFont); |
252 | | private: |
253 | | sal_uInt16 m_nCount; |
254 | | std::unique_ptr<LwpFontAttrEntry[]> m_pFontAttrs; |
255 | | }; |
256 | | |
257 | | class LwpFontManager |
258 | | { |
259 | | public: |
260 | 20.4k | LwpFontManager(){} |
261 | | private: |
262 | | LwpFontNameManager m_FNMgr; |
263 | | LwpFontAttrManager m_AttrMgr; |
264 | | |
265 | | public: |
266 | | void Read(LwpObjectStream *pStrm); |
267 | | rtl::Reference<XFFont> CreateOverrideFont(sal_uInt32 fontID, sal_uInt32 overID); |
268 | | rtl::Reference<XFFont> CreateFont(sal_uInt32 fontID); |
269 | | OUString GetNameByID(sal_uInt32 fontID); |
270 | | |
271 | | private: |
272 | | void Override(sal_uInt32 fontID, rtl::Reference<XFFont> const & pFont); |
273 | | static inline sal_uInt16 GetFontNameIndex(sal_uInt32 fontID); |
274 | | static inline sal_uInt16 GetFontAttrIndex(sal_uInt32 fontID); |
275 | | }; |
276 | | |
277 | | sal_uInt16 LwpFontManager::GetFontNameIndex(sal_uInt32 fontID) |
278 | 53.3k | { |
279 | 53.3k | return static_cast<sal_uInt16>((fontID>>16)&0xFFFF); |
280 | 53.3k | } |
281 | | |
282 | | sal_uInt16 LwpFontManager::GetFontAttrIndex(sal_uInt32 fontID) |
283 | 47.9k | { |
284 | 47.9k | return static_cast<sal_uInt16>(fontID); |
285 | 47.9k | } |
286 | | |
287 | | #endif |
288 | | |
289 | | /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |