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_scfilt.hxx"
26
27 #include "lotfntbf.hxx"
28
29 #include "scitems.hxx"
30 #include <editeng/cntritem.hxx>
31 #include <editeng/crsditem.hxx>
32 #include <editeng/eeitem.hxx>
33 #include <editeng/postitem.hxx>
34 #include <editeng/shdditem.hxx>
35 #include <editeng/escpitem.hxx>
36 #include <editeng/udlnitem.hxx>
37 #include <editeng/wghtitem.hxx>
38 #include <sfx2/printer.hxx>
39
40 #include "attrib.hxx"
41 #include "document.hxx"
42 #include "global.hxx"
43 #include "docpool.hxx"
44 #include "patattr.hxx"
45 #include "ftools.hxx"
46
Fill(const sal_uInt8 nIndex,SfxItemSet & rItemSet)47 void LotusFontBuffer::Fill( const sal_uInt8 nIndex, SfxItemSet& rItemSet )
48 {
49 sal_uInt8 nIntIndex = nIndex & 0x07;
50
51 ENTRY* pAkt = pData + nIntIndex;
52
53 if( pAkt->pFont )
54 rItemSet.Put( *pAkt->pFont );
55
56 if( pAkt->pHeight )
57 rItemSet.Put( *pAkt->pHeight );
58
59 if( pAkt->pColor )
60 rItemSet.Put( *pAkt->pColor );
61
62 if( nIndex & 0x08 )
63 {
64 SvxWeightItem aWeightItem( WEIGHT_BOLD, ATTR_FONT_WEIGHT );
65 rItemSet.Put( aWeightItem );
66 }
67
68 if( nIndex & 0x10 )
69 {
70 SvxPostureItem aAttr( ITALIC_NORMAL, ATTR_FONT_POSTURE );
71 rItemSet.Put( aAttr );
72 }
73
74 FontUnderline eUnderline;
75 switch( nIndex & 0x60 ) // Bit 5+6
76 {
77 case 0x60:
78 case 0x20: eUnderline = UNDERLINE_SINGLE; break;
79 case 0x40: eUnderline = UNDERLINE_DOUBLE; break;
80 default: eUnderline = UNDERLINE_NONE;
81 }
82 if( eUnderline != UNDERLINE_NONE )
83 {
84 SvxUnderlineItem aUndItem( eUnderline, ATTR_FONT_UNDERLINE );
85 rItemSet.Put( aUndItem );
86 }
87 }
88
89
SetName(const sal_uInt16 nIndex,const String & rName)90 void LotusFontBuffer::SetName( const sal_uInt16 nIndex, const String& rName )
91 {
92 DBG_ASSERT( nIndex < nSize, "*LotusFontBuffer::SetName(): Array zu klein!" );
93 if( nIndex < nSize )
94 {
95 register ENTRY* pEntry = pData + nIndex;
96 pEntry->TmpName( rName );
97
98 if( pEntry->nType >= 0 )
99 MakeFont( pEntry );
100 }
101 }
102
103
SetHeight(const sal_uInt16 nIndex,const sal_uInt16 nHeight)104 void LotusFontBuffer::SetHeight( const sal_uInt16 nIndex, const sal_uInt16 nHeight )
105 {
106 DBG_ASSERT( nIndex < nSize, "*LotusFontBuffer::SetHeight(): Array zu klein!" );
107 if( nIndex < nSize )
108 pData[ nIndex ].Height( *( new SvxFontHeightItem( ( sal_uLong ) nHeight * 20, 100, ATTR_FONT_HEIGHT ) ) );
109 }
110
111
SetType(const sal_uInt16 nIndex,const sal_uInt16 nType)112 void LotusFontBuffer::SetType( const sal_uInt16 nIndex, const sal_uInt16 nType )
113 {
114 DBG_ASSERT( nIndex < nSize, "*LotusFontBuffer::SetType(): Array zu klein!" );
115 if( nIndex < nSize )
116 {
117 register ENTRY* pEntry = pData + nIndex;
118 pEntry->Type( nType );
119
120 if( pEntry->pTmpName )
121 MakeFont( pEntry );
122 }
123 }
124
125
MakeFont(ENTRY * pEntry)126 void LotusFontBuffer::MakeFont( ENTRY* pEntry )
127 {
128 FontFamily eFamily = FAMILY_DONTKNOW;
129 FontPitch ePitch = PITCH_DONTKNOW;
130 CharSet eCharSet = RTL_TEXTENCODING_DONTKNOW;
131
132 switch( pEntry->nType )
133 {
134 case 0x00: // Helvetica
135 eFamily = FAMILY_SWISS;
136 ePitch = PITCH_VARIABLE;
137 break;
138 case 0x01: // Times Roman
139 eFamily = FAMILY_ROMAN;
140 ePitch = PITCH_VARIABLE;
141 break;
142 case 0x02: // Courier
143 ePitch = PITCH_FIXED;
144 break;
145 case 0x03: // Symbol
146 eCharSet = RTL_TEXTENCODING_SYMBOL;
147 break;
148 }
149
150 pEntry->pFont = new SvxFontItem( eFamily, *pEntry->pTmpName, EMPTY_STRING, ePitch, eCharSet, ATTR_FONT );
151
152 delete pEntry->pTmpName;
153 pEntry->pTmpName = NULL;
154 }
155
156
157
158