/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_scfilt.hxx" #include "lotfntbf.hxx" #include "scitems.hxx" #include #include #include #include #include #include #include #include #include #include "attrib.hxx" #include "document.hxx" #include "global.hxx" #include "docpool.hxx" #include "patattr.hxx" #include "ftools.hxx" void LotusFontBuffer::Fill( const sal_uInt8 nIndex, SfxItemSet& rItemSet ) { sal_uInt8 nIntIndex = nIndex & 0x07; ENTRY* pAkt = pData + nIntIndex; if( pAkt->pFont ) rItemSet.Put( *pAkt->pFont ); if( pAkt->pHeight ) rItemSet.Put( *pAkt->pHeight ); if( pAkt->pColor ) rItemSet.Put( *pAkt->pColor ); if( nIndex & 0x08 ) { SvxWeightItem aWeightItem( WEIGHT_BOLD, ATTR_FONT_WEIGHT ); rItemSet.Put( aWeightItem ); } if( nIndex & 0x10 ) { SvxPostureItem aAttr( ITALIC_NORMAL, ATTR_FONT_POSTURE ); rItemSet.Put( aAttr ); } FontUnderline eUnderline; switch( nIndex & 0x60 ) // Bit 5+6 { case 0x60: case 0x20: eUnderline = UNDERLINE_SINGLE; break; case 0x40: eUnderline = UNDERLINE_DOUBLE; break; default: eUnderline = UNDERLINE_NONE; } if( eUnderline != UNDERLINE_NONE ) { SvxUnderlineItem aUndItem( eUnderline, ATTR_FONT_UNDERLINE ); rItemSet.Put( aUndItem ); } } void LotusFontBuffer::SetName( const sal_uInt16 nIndex, const String& rName ) { DBG_ASSERT( nIndex < nSize, "*LotusFontBuffer::SetName(): Array zu klein!" ); if( nIndex < nSize ) { register ENTRY* pEntry = pData + nIndex; pEntry->TmpName( rName ); if( pEntry->nType >= 0 ) MakeFont( pEntry ); } } void LotusFontBuffer::SetHeight( const sal_uInt16 nIndex, const sal_uInt16 nHeight ) { DBG_ASSERT( nIndex < nSize, "*LotusFontBuffer::SetHeight(): Array zu klein!" ); if( nIndex < nSize ) pData[ nIndex ].Height( *( new SvxFontHeightItem( ( sal_uLong ) nHeight * 20, 100, ATTR_FONT_HEIGHT ) ) ); } void LotusFontBuffer::SetType( const sal_uInt16 nIndex, const sal_uInt16 nType ) { DBG_ASSERT( nIndex < nSize, "*LotusFontBuffer::SetType(): Array zu klein!" ); if( nIndex < nSize ) { register ENTRY* pEntry = pData + nIndex; pEntry->Type( nType ); if( pEntry->pTmpName ) MakeFont( pEntry ); } } void LotusFontBuffer::MakeFont( ENTRY* pEntry ) { FontFamily eFamily = FAMILY_DONTKNOW; FontPitch ePitch = PITCH_DONTKNOW; CharSet eCharSet = RTL_TEXTENCODING_DONTKNOW; switch( pEntry->nType ) { case 0x00: // Helvetica eFamily = FAMILY_SWISS; ePitch = PITCH_VARIABLE; break; case 0x01: // Times Roman eFamily = FAMILY_ROMAN; ePitch = PITCH_VARIABLE; break; case 0x02: // Courier ePitch = PITCH_FIXED; break; case 0x03: // Symbol eCharSet = RTL_TEXTENCODING_SYMBOL; break; } pEntry->pFont = new SvxFontItem( eFamily, *pEntry->pTmpName, EMPTY_STRING, ePitch, eCharSet, ATTR_FONT ); delete pEntry->pTmpName; pEntry->pTmpName = NULL; }