diff options
Diffstat (limited to 'oox/source/drawingml/textcharacterproperties.cxx')
-rw-r--r-- | oox/source/drawingml/textcharacterproperties.cxx | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/oox/source/drawingml/textcharacterproperties.cxx b/oox/source/drawingml/textcharacterproperties.cxx new file mode 100644 index 000000000000..3ac5018c1dad --- /dev/null +++ b/oox/source/drawingml/textcharacterproperties.cxx @@ -0,0 +1,170 @@ +/************************************************************************* + * + * 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 "properties.hxx" +#include "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 ) 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; + } + + // symbol font not supported + + if( maCharColor.isUsed() ) + rPropMap[ PROP_CharColor ] <<= maCharColor.getColor( rFilter.getGraphicHelper() ); + + if( moLang.has() && (moLang.get().getLength() > 0) ) + { + 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 ) ); + + float fWeight = moBold.get( false ) ? awt::FontWeight::BOLD : awt::FontWeight::NORMAL; + rPropMap[ PROP_CharWeight ] <<= fWeight; + rPropMap[ PROP_CharWeightAsian ] <<= fWeight; + rPropMap[ PROP_CharWeightComplex ] <<= fWeight; + + 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 ) const +{ + PropertyMap aPropMap; + pushToPropMap( aPropMap, rFilter ); + rPropSet.setProperties( aPropMap ); +} + +float TextCharacterProperties::getCharHeightPoints( float fDefault ) const +{ + return moHeight.has() ? GetFontHeight( moHeight.get() ) : fDefault; +} + +// ============================================================================ + +} // namespace drawingml +} // namespace oox + |