LibreOffice Module oox (master)  1
textfont.cxx
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  * Licensed to the Apache Software Foundation (ASF) under one or more
12  * contributor license agreements. See the NOTICE file distributed
13  * with this work for additional information regarding copyright
14  * ownership. The ASF licenses this file to you under the Apache
15  * License, Version 2.0 (the "License"); you may not use this file
16  * except in compliance with the License. You may obtain a copy of
17  * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 
20 #include <drawingml/textfont.hxx>
21 #include <com/sun/star/awt/FontFamily.hpp>
22 #include <com/sun/star/awt/FontPitch.hpp>
23 #include <oox/drawingml/theme.hxx>
26 #include <oox/token/tokens.hxx>
27 
28 using ::oox::core::XmlFilterBase;
29 
30 namespace oox::drawingml {
31 
32 namespace {
33 
34 sal_Int16 lclGetFontPitch( sal_Int32 nOoxValue )
35 {
36  using namespace ::com::sun::star::awt::FontPitch;
37  static const sal_Int16 spnFontPitch[] = { DONTKNOW, FIXED, VARIABLE };
38  return STATIC_ARRAY_SELECT( spnFontPitch, nOoxValue, DONTKNOW );
39 }
40 
41 sal_Int16 lclGetFontFamily( sal_Int32 nOoxValue )
42 {
43  using namespace ::com::sun::star::awt::FontFamily;
44  static const sal_Int16 spnFontFamily[] = { DONTKNOW, ROMAN, SWISS, MODERN, SCRIPT, DECORATIVE };
45  return STATIC_ARRAY_SELECT( spnFontFamily, nOoxValue, DONTKNOW );
46 }
47 
48 } // namespace
49 
51  mnPitch( 0 ),
52  mnCharset( WINDOWS_CHARSET_ANSI )
53 {
54 }
55 
56 void TextFont::setAttributes( const AttributeList& rAttribs )
57 {
58  maTypeface = rAttribs.getString( XML_typeface, OUString() );
59  maPanose = rAttribs.getString( XML_panose, OUString() );
60  mnPitch = rAttribs.getInteger( XML_pitchFamily, 0 );
61  mnCharset = rAttribs.getInteger( XML_charset, WINDOWS_CHARSET_DEFAULT );
62 }
63 
64 void TextFont::setAttributes( const OUString& sFontName )
65 {
66  maTypeface = sFontName;
67  maPanose.clear();
68  mnPitch = 0;
70 }
71 
72 void TextFont::assignIfUsed( const TextFont& rTextFont )
73 {
74  if( !rTextFont.maTypeface.isEmpty() )
75  *this = rTextFont;
76 }
77 
78 bool TextFont::getFontData( OUString& rFontName, sal_Int16& rnFontPitch, sal_Int16& rnFontFamily, const XmlFilterBase& rFilter ) const
79 {
80  if( const Theme* pTheme = rFilter.getCurrentTheme() )
81  if( const TextFont* pFont = pTheme->resolveFont( maTypeface ) )
82  return pFont->implGetFontData( rFontName, rnFontPitch, rnFontFamily );
83  return implGetFontData( rFontName, rnFontPitch, rnFontFamily );
84 }
85 
86 bool TextFont::implGetFontData( OUString& rFontName, sal_Int16& rnFontPitch, sal_Int16& rnFontFamily ) const
87 {
88  rFontName = maTypeface;
89  rnFontPitch = lclGetFontPitch( extractValue< sal_Int16 >( mnPitch, 0, 4 ) );
90  rnFontFamily = lclGetFontFamily( extractValue< sal_Int16 >( mnPitch, 4, 4 ) );
91  return !rFontName.isEmpty();
92 }
93 
94 } // namespace oox::drawingml
95 
96 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
OptValue< sal_Int32 > getInteger(sal_Int32 nAttrToken) const
Returns the 32-bit signed integer value of the specified attribute (decimal).
#define STATIC_ARRAY_SELECT(array, index, def)
Expands to the 'index'-th element of a STATIC data array, or to 'def', if 'index' is out of the array...
Definition: helper.hxx:55
OptValue< OUString > getString(sal_Int32 nAttrToken) const
Returns the string value of the specified attribute.
bool getFontData(OUString &rFontName, sal_Int16 &rnFontPitch, sal_Int16 &rnFontFamily, const ::oox::core::XmlFilterBase &rFilter) const
Returns the font name, pitch, and family; tries to resolve theme placeholder names, e.g.
Definition: textfont.cxx:78
virtual const ::oox::drawingml::Theme * getCurrentTheme() const =0
Has to be implemented by each filter, returns the current theme.
const sal_uInt8 WINDOWS_CHARSET_DEFAULT
Definition: helper.hxx:61
void setAttributes(const AttributeList &rAttribs)
Sets attributes from the passed attribute list.
Definition: textfont.cxx:56
Provides access to attribute values of an element.
bool implGetFontData(OUString &rFontName, sal_Int16 &rnFontPitch, sal_Int16 &rnFontFamily) const
Definition: textfont.cxx:86
const sal_uInt8 WINDOWS_CHARSET_ANSI
Definition: helper.hxx:60
void assignIfUsed(const TextFont &rTextFont)
Overwrites this text font with the passed text font, if it is used.
Definition: textfont.cxx:72
carries a CT_TextFont
Definition: textfont.hxx:32