1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
20 #ifndef OOX_DRAWINGML_TYPES_HXX
21 #define OOX_DRAWINGML_TYPES_HXX
23 #include <boost/shared_ptr.hpp>
24 #include <com/sun/star/style/TabAlign.hpp>
25 #include <com/sun/star/drawing/TextVerticalAdjust.hpp>
26 #include <com/sun/star/geometry/IntegerRectangle2D.hpp>
27 #include <com/sun/star/awt/Point.hpp>
28 #include <com/sun/star/awt/Size.hpp>
29 #include <com/sun/star/xml/sax/XFastAttributeList.hpp>
30 #include "oox/helper/helper.hxx"
35 // ============================================================================
37 const sal_Int32 PER_PERCENT
= 1000;
38 const sal_Int32 MAX_PERCENT
= 100 * PER_PERCENT
;
40 const sal_Int32 PER_DEGREE
= 60000;
41 const sal_Int32 MAX_DEGREE
= 360 * PER_DEGREE
;
43 // ============================================================================
45 struct LineProperties
;
46 typedef ::boost::shared_ptr
< LineProperties
> LinePropertiesPtr
;
48 struct FillProperties
;
49 typedef ::boost::shared_ptr
< FillProperties
> FillPropertiesPtr
;
51 struct GraphicProperties
;
52 typedef ::boost::shared_ptr
< GraphicProperties
> GraphicPropertiesPtr
;
54 struct Shape3DProperties
;
55 typedef ::boost::shared_ptr
< Shape3DProperties
> Shape3DPropertiesPtr
;
57 struct TextCharacterProperties
;
58 typedef ::boost::shared_ptr
< TextCharacterProperties
> TextCharacterPropertiesPtr
;
60 struct TextBodyProperties
;
61 typedef ::boost::shared_ptr
< TextBodyProperties
> TextBodyPropertiesPtr
;
63 struct EffectProperties
;
64 typedef ::boost::shared_ptr
< EffectProperties
> EffectPropertiesPtr
;
67 typedef ::boost::shared_ptr
< TextBody
> TextBodyPtr
;
70 typedef ::boost::shared_ptr
< Shape
> ShapePtr
;
73 typedef ::boost::shared_ptr
< Theme
> ThemePtr
;
75 // ---------------------------------------------------------------------------
79 class TableProperties
;
80 typedef ::boost::shared_ptr
< TableProperties
> TablePropertiesPtr
;
84 // ============================================================================
86 /** converts the attributes from an CT_TLPoint into an awt Point with 1/1000% */
87 com::sun::star::awt::Point
GetPointPercent( const ::com::sun::star::uno::Reference
< ::com::sun::star::xml::sax::XFastAttributeList
>& xAttribs
);
90 /** converts the attributes from an CT_Size2D into an awt Size with 1/100th mm */
91 com::sun::star::awt::Size
GetSize2D( const ::com::sun::star::uno::Reference
< ::com::sun::star::xml::sax::XFastAttributeList
>& xAttributes
);
93 /** converts the attributes from a CT_RelativeRect to an IntegerRectangle2D */
94 com::sun::star::geometry::IntegerRectangle2D
GetRelativeRect( const ::com::sun::star::uno::Reference
< ::com::sun::star::xml::sax::XFastAttributeList
>& xAttributes
);
96 /** converts EMUs into 1/100th mmm */
97 sal_Int32
GetCoordinate( sal_Int32 nValue
);
99 /** converts an emu string into 1/100th mmm */
100 sal_Int32
GetCoordinate( const OUString
& sValue
);
102 /** converts a ST_Percentage % string into 1/1000th of % */
103 sal_Int32
GetPercent( const OUString
& sValue
);
105 /** Converts a ST_PositiveFixedPercentage to a float. 1.0 == 100% */
106 double GetPositiveFixedPercentage( const OUString
& sValue
);
108 /** converts the ST_TextFontSize to point */
109 float GetTextSize( const OUString
& rValue
);
111 /** converts the ST_TextSpacingPoint to 1/100mm */
112 sal_Int32
GetTextSpacingPoint( const OUString
& sValue
);
113 sal_Int32
GetTextSpacingPoint( const sal_Int32 nValue
);
116 ::com::sun::star::style::TabAlign
GetTabAlign( ::sal_Int32 aToken
);
118 float GetFontHeight( sal_Int32 nHeight
);
120 sal_Int16
GetFontUnderline( sal_Int32 nToken
);
122 sal_Int16
GetFontStrikeout( sal_Int32 nToken
);
124 sal_Int16
GetCaseMap( sal_Int32 nToken
);
126 /** converts a paragraph align to a ParaAdjust */
127 sal_Int16
GetParaAdjust( sal_Int32 nAlign
);
129 // ============================================================================
137 /** retrieve the content of CT_IndexRange */
138 IndexRange
GetIndexRange( const ::com::sun::star::uno::Reference
< ::com::sun::star::xml::sax::XFastAttributeList
>& xAttributes
);
140 // ============================================================================
142 const sal_Int32 EMU_PER_HMM
= 360; /// 360 EMUs per 1/100 mm.
144 /** Converts the passed 32-bit integer value from 1/100 mm to EMUs. */
145 inline sal_Int64
convertHmmToEmu( sal_Int32 nValue
)
147 return static_cast< sal_Int64
>( nValue
) * EMU_PER_HMM
;
150 /** Converts the passed 64-bit integer value from EMUs to 1/100 mm. */
151 inline sal_Int32
convertEmuToHmm( sal_Int64 nValue
)
153 return getLimitedValue
< sal_Int32
, sal_Int64
>( (nValue
+ EMU_PER_HMM
/ 2) / EMU_PER_HMM
, SAL_MIN_INT32
, SAL_MAX_INT32
);
156 // ============================================================================
158 /** A structure for a point with 64-bit interger components. */
164 inline explicit EmuPoint() : X( 0 ), Y( 0 ) {}
165 inline explicit EmuPoint( sal_Int64 nX
, sal_Int64 nY
) : X( nX
), Y( nY
) {}
168 // ============================================================================
170 /** A structure for a size with 64-bit interger components. */
176 inline explicit EmuSize() : Width( 0 ), Height( 0 ) {}
177 inline explicit EmuSize( sal_Int64 nWidth
, sal_Int64 nHeight
) : Width( nWidth
), Height( nHeight
) {}
180 // ============================================================================
182 /** A structure for a rectangle with 64-bit interger components. */
183 struct EmuRectangle
: public EmuPoint
, public EmuSize
185 inline explicit EmuRectangle() {}
186 inline explicit EmuRectangle( const EmuPoint
& rPos
, const EmuSize
& rSize
) : EmuPoint( rPos
), EmuSize( rSize
) {}
187 inline explicit EmuRectangle( sal_Int64 nX
, sal_Int64 nY
, sal_Int64 nWidth
, sal_Int64 nHeight
) : EmuPoint( nX
, nY
), EmuSize( nWidth
, nHeight
) {}
189 inline void setPos( const EmuPoint
& rPos
) { static_cast< EmuPoint
& >( *this ) = rPos
; }
190 inline void setSize( const EmuSize
& rSize
) { static_cast< EmuSize
& >( *this ) = rSize
; }
193 // ============================================================================
195 } // namespace drawingml
200 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */