| /************************************************************** |
| * |
| * 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. |
| * |
| *************************************************************/ |
| |
| |
| |
| #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 ); |
| // keep existing char color |
| if (!maCharColor.isUsed()) |
| 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; |
| } |
| |
| // symbolfont, will now be ... textrun.cxx ... ausgewertet !!!i#113673 |
| |
| 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 |
| |