office-gobmx/oox/source/drawingml/textcharacterproperties.cxx

175 lines
6.9 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
#include "oox/drawingml/textcharacterproperties.hxx"
#include <com/sun/star/lang/Locale.hpp>
#include <com/sun/star/awt/FontSlant.hpp>
#include <com/sun/star/awt/FontWeight.hpp>
#include "oox/helper/helper.hxx"
#include "oox/helper/propertyset.hxx"
#include "oox/core/xmlfilterbase.hxx"
#include "oox/drawingml/drawingmltypes.hxx"
#include "oox/token/tokens.hxx"
using ::rtl::OUString;
using ::oox::core::XmlFilterBase;
using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::beans;
namespace oox {
namespace drawingml {
// ============================================================================
void TextCharacterProperties::assignUsed( const TextCharacterProperties& rSourceProps )
{
// overwrite all properties exisiting in rSourceProps
maHyperlinkPropertyMap.insert( rSourceProps.maHyperlinkPropertyMap.begin(), rSourceProps.maHyperlinkPropertyMap.end() );
maLatinFont.assignIfUsed( rSourceProps.maLatinFont );
maAsianFont.assignIfUsed( rSourceProps.maAsianFont );
maComplexFont.assignIfUsed( rSourceProps.maComplexFont );
maSymbolFont.assignIfUsed( rSourceProps.maSymbolFont );
maCharColor.assignIfUsed( rSourceProps.maCharColor );
maHighlightColor.assignIfUsed( rSourceProps.maHighlightColor );
maUnderlineColor.assignIfUsed( rSourceProps.maUnderlineColor );
moHeight.assignIfUsed( rSourceProps.moHeight );
moSpacing.assignIfUsed( rSourceProps.moSpacing );
moUnderline.assignIfUsed( rSourceProps.moUnderline );
moStrikeout.assignIfUsed( rSourceProps.moStrikeout );
moCaseMap.assignIfUsed( rSourceProps.moCaseMap );
moBold.assignIfUsed( rSourceProps.moBold );
moItalic.assignIfUsed( rSourceProps.moItalic );
moUnderlineLineFollowText.assignIfUsed( rSourceProps.moUnderlineLineFollowText );
moUnderlineFillFollowText.assignIfUsed( rSourceProps.moUnderlineFillFollowText );
}
void TextCharacterProperties::pushToPropMap( PropertyMap& rPropMap, const XmlFilterBase& rFilter, bool bUseOptional ) const
{
OUString aFontName;
sal_Int16 nFontPitch = 0;
sal_Int16 nFontFamily = 0;
if( maLatinFont.getFontData( aFontName, nFontPitch, nFontFamily, rFilter ) )
{
rPropMap[ PROP_CharFontName ] <<= aFontName;
rPropMap[ PROP_CharFontPitch ] <<= nFontPitch;
rPropMap[ PROP_CharFontFamily ] <<= nFontFamily;
}
if( maAsianFont.getFontData( aFontName, nFontPitch, nFontFamily, rFilter ) )
{
rPropMap[ PROP_CharFontNameAsian ] <<= aFontName;
rPropMap[ PROP_CharFontPitchAsian ] <<= nFontFamily;
rPropMap[ PROP_CharFontFamilyAsian ] <<= nFontPitch;
}
if( maComplexFont.getFontData( aFontName, nFontPitch, nFontFamily, rFilter ) )
{
rPropMap[ PROP_CharFontNameComplex ] <<= aFontName;
rPropMap[ PROP_CharFontPitchComplex ] <<= nFontPitch;
rPropMap[ PROP_CharFontFamilyComplex ] <<= nFontFamily;
}
// symbolfont, will now be ... textrun.cxx ... ausgewertet !!!i#113673
if( maCharColor.isUsed() )
rPropMap[ PROP_CharColor ] <<= maCharColor.getColor( rFilter.getGraphicHelper() );
if( moLang.has() && !moLang.get().isEmpty() )
{
lang::Locale aLocale;
sal_Int32 nSepPos = moLang.get().indexOf( sal_Unicode( '-' ), 0 );
if ( nSepPos >= 0 )
{
aLocale.Language = moLang.get().copy( 0, nSepPos );
aLocale.Country = moLang.get().copy( nSepPos + 1 );
}
else
{
aLocale.Language = moLang.get();
}
rPropMap[ PROP_CharLocale ] <<= aLocale;
rPropMap[ PROP_CharLocaleAsian ] <<= aLocale;
rPropMap[ PROP_CharLocaleComplex ] <<= aLocale;
}
if( moHeight.has() )
{
float fHeight = GetFontHeight( moHeight.get() );
rPropMap[ PROP_CharHeight ] <<= fHeight;
rPropMap[ PROP_CharHeightAsian ] <<= fHeight;
rPropMap[ PROP_CharHeightComplex ] <<= fHeight;
}
rPropMap[ PROP_CharKerning ] <<= (sal_Int16) GetTextSpacingPoint( moSpacing.get( 0 ) );
rPropMap[ PROP_CharUnderline ] <<= GetFontUnderline( moUnderline.get( XML_none ) );
rPropMap[ PROP_CharStrikeout ] <<= GetFontStrikeout( moStrikeout.get( XML_noStrike ) );
rPropMap[ PROP_CharCaseMap ] <<= GetCaseMap( moCaseMap.get( XML_none ) );
if( !bUseOptional || moBold.has() ) {
float fWeight = moBold.get( false ) ? awt::FontWeight::BOLD : awt::FontWeight::NORMAL;
rPropMap[ PROP_CharWeight ] <<= fWeight;
rPropMap[ PROP_CharWeightAsian ] <<= fWeight;
rPropMap[ PROP_CharWeightComplex ] <<= fWeight;
}
if( !bUseOptional || moItalic.has() ) {
awt::FontSlant eSlant = moItalic.get( false ) ? awt::FontSlant_ITALIC : awt::FontSlant_NONE;
rPropMap[ PROP_CharPosture ] <<= eSlant;
rPropMap[ PROP_CharPostureAsian ] <<= eSlant;
rPropMap[ PROP_CharPostureComplex ] <<= eSlant;
}
bool bUnderlineFillFollowText = moUnderlineFillFollowText.get( false );
if( moUnderline.has() && maUnderlineColor.isUsed() && !bUnderlineFillFollowText )
{
rPropMap[ PROP_CharUnderlineHasColor ] <<= true;
rPropMap[ PROP_CharUnderlineColor ] <<= maUnderlineColor.getColor( rFilter.getGraphicHelper() );
}
}
void TextCharacterProperties::pushToPropSet( PropertySet& rPropSet, const XmlFilterBase& rFilter, bool bUseOptional ) const
{
PropertyMap aPropMap;
pushToPropMap( aPropMap, rFilter, bUseOptional );
rPropSet.setProperties( aPropMap );
}
float TextCharacterProperties::getCharHeightPoints( float fDefault ) const
{
return moHeight.has() ? GetFontHeight( moHeight.get() ) : fDefault;
}
// ============================================================================
} // namespace drawingml
} // namespace oox
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */