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 #ifndef INCLUDED_SVX_ENHANCEDCUSTOMSHAPEGEOMETRY_HXX
21 #define INCLUDED_SVX_ENHANCEDCUSTOMSHAPEGEOMETRY_HXX
22 
23 #include <sal/types.h>
24 #include <svx/msdffdef.hxx>
25 #include <svx/svxdllapi.h>
26 #include <o3tl/typed_flags_set.hxx>
27 
28 struct SvxMSDffVertPair
29 {
30     sal_Int32 const   nValA;
31     sal_Int32 const   nValB;
32 };
33 struct SvxMSDffCalculationData
34 {
35     sal_uInt16 const  nFlags;
36     sal_Int32 const   nVal[ 3 ];
37 };
38 struct SvxMSDffTextRectangles
39 {
40     SvxMSDffVertPair const    nPairA;
41     SvxMSDffVertPair const    nPairB;
42 };
43 
44 enum class SvxMSDffHandleFlags
45 {
46     NONE                         = 0x0000,
47     MIRRORED_X                   = 0x0001,
48     MIRRORED_Y                   = 0x0002,
49     SWITCHED                     = 0x0004,
50     POLAR                        = 0x0008,
51     MAP                          = 0x0010,
52     RANGE                        = 0x0020,
53     RANGE_X_MIN_IS_SPECIAL       = 0x0080,
54     RANGE_X_MAX_IS_SPECIAL       = 0x0100,
55     RANGE_Y_MIN_IS_SPECIAL       = 0x0200,
56     RANGE_Y_MAX_IS_SPECIAL       = 0x0400,
57     CENTER_X_IS_SPECIAL          = 0x0800,
58     CENTER_Y_IS_SPECIAL          = 0x1000,
59     RADIUS_RANGE                 = 0x2000,
60 };
61 namespace o3tl
62 {
63     template<> struct typed_flags<SvxMSDffHandleFlags> : is_typed_flags<SvxMSDffHandleFlags, 0x3fff> {};
64 }
65 
66 struct SvxMSDffHandle
67 {
68     SvxMSDffHandleFlags const nFlags;
69     sal_Int32   nPositionX, nPositionY, nCenterX, nCenterY, nRangeXMin, nRangeXMax, nRangeYMin, nRangeYMax;
70 };
71 struct mso_CustomShape
72 {
73     SvxMSDffVertPair* const                       pVertices;
74     sal_uInt32 const                              nVertices;
75     sal_uInt16* const                             pElements;
76     sal_uInt32 const                              nElements;
77     SvxMSDffCalculationData* const                pCalculation;
78     sal_uInt32 const                              nCalculation;
79     sal_Int32* const                              pDefData;
80     SvxMSDffTextRectangles* const                 pTextRect;
81     sal_uInt32 const                              nTextRect;
82     sal_Int32 const                               nCoordWidth;
83     sal_Int32 const                               nCoordHeight;
84     sal_Int32 const                               nXRef;
85     sal_Int32 const                               nYRef;
86     SvxMSDffVertPair* const                       pGluePoints;
87     sal_uInt32 const                              nGluePoints;
88     SvxMSDffHandle* const                         pHandles;
89     sal_uInt32 const                              nHandles;
90 };
91 
92 #define MSO_I | sal_Int32(0x80000000)
93 
94 bool                        SortFilledObjectsToBackByDefault( MSO_SPT eSpType );
95 SVX_DLLPUBLIC bool          IsCustomShapeFilledByDefault( MSO_SPT eSpType );
96 SVX_DLLPUBLIC sal_Int16     GetCustomShapeConnectionTypeDefault( MSO_SPT eSpType );
97 
98 // #i28269#
99 SVX_DLLPUBLIC bool          IsCustomShapeStrokedByDefault( MSO_SPT eSpType );
100 
101 SVX_DLLPUBLIC const mso_CustomShape*    GetCustomShapeContent( MSO_SPT eSpType );
102 
103 #endif
104 
105 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
106