Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : : #ifndef _SVX_ESCHEREX_HXX
30 : : #define _SVX_ESCHEREX_HXX
31 : :
32 : : #include <memory>
33 : : #include <vector>
34 : : #include <boost/shared_ptr.hpp>
35 : : #include <tools/solar.h>
36 : : #include <tools/gen.hxx>
37 : : #include <tools/stream.hxx>
38 : : #include <com/sun/star/uno/Reference.h>
39 : : #include <svtools/grfmgr.hxx>
40 : : #include <com/sun/star/awt/Size.hpp>
41 : : #include <com/sun/star/awt/Point.hpp>
42 : : #include <com/sun/star/awt/Rectangle.hpp>
43 : : #include <com/sun/star/beans/XPropertySet.hpp>
44 : : #include <com/sun/star/beans/PropertyState.hpp>
45 : : #include <com/sun/star/beans/PropertyValue.hpp>
46 : : #include <com/sun/star/drawing/BitmapMode.hpp>
47 : : #include <com/sun/star/drawing/Hatch.hpp>
48 : : #include <svx/msdffdef.hxx>
49 : : #include "filter/msfilter/msfilterdllapi.h"
50 : :
51 : : /*Record Name FBT-Value Instance Contents Wrd Exl PPt Ver*/
52 : : // In the Microsoft documentation the naming scheme is msofbt... instead of ESCHER_...
53 : : #define ESCHER_DggContainer 0xF000 /* per-document data X X X */
54 : : #define ESCHER_Dgg 0xF006 /* an FDGG and several FIDCLs X X X 0 */
55 : : #define ESCHER_CLSID 0xF016 /* the CLSID of the application that put the data on the clipboard C C C 0 */
56 : : #define ESCHER_OPT 0xF00B /* count of properties the document-wide default shape properties X X X 3 */
57 : : #define ESCHER_ColorMRU 0xF11A /* count of colors the colors in the MRU swatch X X X 0 */
58 : : #define ESCHER_SplitMenuColors 0xF11E /* count of colors the colors in the top-level split menus X X X 0 */
59 : : #define ESCHER_BstoreContainer 0xF001 /* count of BLIPs all images in the document (JPEGs, metafiles, etc.) X X X */
60 : : #define ESCHER_BSE 0xF007 /* BLIP type an FBSE (one per BLIP) X X X 2 */
61 : : #define ESCHER_BlipFirst 0xF018 /* range of fbts reserved for various kinds of BLIPs X X X */
62 : : #define ESCHER_BlipLast 0xF117 /* range of fbts reserved for various kinds of BLIPs X X X */
63 : :
64 : : #define ESCHER_DgContainer 0xF002 /* per-sheet/page/slide data X X X */
65 : : #define ESCHER_Dg 0xF008 /* drawing ID an FDG X X X 0 */
66 : : #define ESCHER_RegroupItems 0xF118 /* count of regroup entries several FRITs X X X 0 */
67 : : #define ESCHER_ColorScheme 0xF120 /* count of colors the colors of the source host's color scheme C C 0 */
68 : : #define ESCHER_SpgrContainer 0xF003 /* several SpContainers, the first of which is the group shape itself X X X */
69 : : #define ESCHER_SpContainer 0xF004 /* a shape X X X */
70 : : #define ESCHER_Spgr 0xF009 /* an FSPGR; only present if the shape is a group shape X X X 1 */
71 : : #define ESCHER_Sp 0xF00A /* shape type an FSP X X X 2 */
72 : : //#define ESCHER_OPT 0xF00B /* count of properties a shape property table X X X 3 */
73 : : #define ESCHER_Textbox 0xF00C /* RTF text C C C 0 */
74 : : #define ESCHER_ClientTextbox 0xF00D /* host-defined the text in the textbox, in host-defined format X X X */
75 : : #define ESCHER_Anchor 0xF00E /* a RECT, in 100000ths of an inch C C C 0 */
76 : : #define ESCHER_ChildAnchor 0xF00F /* a RECT, in units relative to the parent group X X X 0 */
77 : : #define ESCHER_ClientAnchor 0xF010 /* host-defined the location of the shape, in a host-defined format X X X */
78 : : #define ESCHER_ClientData 0xF011 /* host-defined host-specific data X X X */
79 : : #define ESCHER_OleObject 0xF11F /* a serialized IStorage for an OLE object C C C 0 */
80 : : #define ESCHER_DeletedPspl 0xF11D /* an FPSPL; only present in top-level deleted shapes X 0 */
81 : : #define ESCHER_SolverContainer 0xF005 /* count of rules the rules governing shapes X X X */
82 : : #define ESCHER_ConnectorRule 0xF012 /* an FConnectorRule X X 1 */
83 : : #define ESCHER_AlignRule 0xF013 /* an FAlignRule X X X 0 */
84 : : #define ESCHER_ArcRule 0xF014 /* an FARCRU X X X 0 */
85 : : #define ESCHER_ClientRule 0xF015 /* host-defined host-defined */
86 : : #define ESCHER_CalloutRule 0xF017 /* an FCORU X X X 0 */
87 : : #define ESCHER_Selection 0xF119 /* an FDGSL followed by the SPIDs of the shapes in the selection X 0 */
88 : : #define ESCHER_UDefProp 0xF122
89 : :
90 : : #define SHAPEFLAG_GROUP 0x001 /* This shape is a group shape */
91 : : #define SHAPEFLAG_CHILD 0x002 /* Not a top-level shape */
92 : : #define SHAPEFLAG_PATRIARCH 0x004 /* This is the topmost group shape. Exactly one of these per drawing. */
93 : : #define SHAPEFLAG_DELETED 0x008 /* The shape has been deleted */
94 : : #define SHAPEFLAG_OLESHAPE 0x010 /* The shape is an OLE object */
95 : : #define SHAPEFLAG_HAVEMASTER 0x020 /* Shape has a hspMaster property */
96 : : #define SHAPEFLAG_FLIPH 0x040 /* Shape is flipped horizontally */
97 : : #define SHAPEFLAG_FLIPV 0x080 /* Shape is flipped vertically */
98 : : #define SHAPEFLAG_CONNECTOR 0x100 /* Connector type of shape */
99 : : #define SHAPEFLAG_HAVEANCHOR 0x200 /* Shape has an anchor of some kind */
100 : : #define SHAPEFLAG_BACKGROUND 0x400 /* Background shape */
101 : : #define SHAPEFLAG_HAVESPT 0x800 /* Shape has a shape type property */
102 : :
103 : : #define ESCHER_ShpInst_Min 0
104 : : #define ESCHER_ShpInst_NotPrimitive ESCHER_ShpInst_Min
105 : : #define ESCHER_ShpInst_Rectangle 1
106 : : #define ESCHER_ShpInst_RoundRectangle 2
107 : : #define ESCHER_ShpInst_Ellipse 3
108 : : #define ESCHER_ShpInst_Diamond 4
109 : : #define ESCHER_ShpInst_IsocelesTriangle 5
110 : : #define ESCHER_ShpInst_RightTriangle 6
111 : : #define ESCHER_ShpInst_Parallelogram 7
112 : : #define ESCHER_ShpInst_Trapezoid 8
113 : : #define ESCHER_ShpInst_Hexagon 9
114 : : #define ESCHER_ShpInst_Octagon 10
115 : : #define ESCHER_ShpInst_Plus 11
116 : : #define ESCHER_ShpInst_Star 12
117 : : #define ESCHER_ShpInst_Arrow 13
118 : : #define ESCHER_ShpInst_ThickArrow 14
119 : : #define ESCHER_ShpInst_HomePlate 15
120 : : #define ESCHER_ShpInst_Cube 16
121 : : #define ESCHER_ShpInst_Balloon 17
122 : : #define ESCHER_ShpInst_Seal 18
123 : : #define ESCHER_ShpInst_Arc 19
124 : : #define ESCHER_ShpInst_Line 20
125 : : #define ESCHER_ShpInst_Plaque 21
126 : : #define ESCHER_ShpInst_Can 22
127 : : #define ESCHER_ShpInst_Donut 23
128 : : #define ESCHER_ShpInst_TextSimple 24
129 : : #define ESCHER_ShpInst_TextOctagon 25
130 : : #define ESCHER_ShpInst_TextHexagon 26
131 : : #define ESCHER_ShpInst_TextCurve 27
132 : : #define ESCHER_ShpInst_TextWave 28
133 : : #define ESCHER_ShpInst_TextRing 29
134 : : #define ESCHER_ShpInst_TextOnCurve 30
135 : : #define ESCHER_ShpInst_TextOnRing 31
136 : : #define ESCHER_ShpInst_StraightConnector1 32
137 : : #define ESCHER_ShpInst_BentConnector2 33
138 : : #define ESCHER_ShpInst_BentConnector3 34
139 : : #define ESCHER_ShpInst_BentConnector4 35
140 : : #define ESCHER_ShpInst_BentConnector5 36
141 : : #define ESCHER_ShpInst_CurvedConnector2 37
142 : : #define ESCHER_ShpInst_CurvedConnector3 38
143 : : #define ESCHER_ShpInst_CurvedConnector4 39
144 : : #define ESCHER_ShpInst_CurvedConnector5 40
145 : : #define ESCHER_ShpInst_Callout1 41
146 : : #define ESCHER_ShpInst_Callout2 42
147 : : #define ESCHER_ShpInst_Callout3 43
148 : : #define ESCHER_ShpInst_AccentCallout1 44
149 : : #define ESCHER_ShpInst_AccentCallout2 45
150 : : #define ESCHER_ShpInst_AccentCallout3 46
151 : : #define ESCHER_ShpInst_BorderCallout1 47
152 : : #define ESCHER_ShpInst_BorderCallout2 48
153 : : #define ESCHER_ShpInst_BorderCallout3 49
154 : : #define ESCHER_ShpInst_AccentBorderCallout1 50
155 : : #define ESCHER_ShpInst_AccentBorderCallout2 51
156 : : #define ESCHER_ShpInst_AccentBorderCallout3 52
157 : : #define ESCHER_ShpInst_Ribbon 53
158 : : #define ESCHER_ShpInst_Ribbon2 54
159 : : #define ESCHER_ShpInst_Chevron 55
160 : : #define ESCHER_ShpInst_Pentagon 56
161 : : #define ESCHER_ShpInst_NoSmoking 57
162 : : #define ESCHER_ShpInst_Seal8 58
163 : : #define ESCHER_ShpInst_Seal16 59
164 : : #define ESCHER_ShpInst_Seal32 60
165 : : #define ESCHER_ShpInst_WedgeRectCallout 61
166 : : #define ESCHER_ShpInst_WedgeRRectCallout 62
167 : : #define ESCHER_ShpInst_WedgeEllipseCallout 63
168 : : #define ESCHER_ShpInst_Wave 64
169 : : #define ESCHER_ShpInst_FoldedCorner 65
170 : : #define ESCHER_ShpInst_LeftArrow 66
171 : : #define ESCHER_ShpInst_DownArrow 67
172 : : #define ESCHER_ShpInst_UpArrow 68
173 : : #define ESCHER_ShpInst_LeftRightArrow 69
174 : : #define ESCHER_ShpInst_UpDownArrow 70
175 : : #define ESCHER_ShpInst_IrregularSeal1 71
176 : : #define ESCHER_ShpInst_IrregularSeal2 72
177 : : #define ESCHER_ShpInst_LightningBolt 73
178 : : #define ESCHER_ShpInst_Heart 74
179 : : #define ESCHER_ShpInst_PictureFrame 75
180 : : #define ESCHER_ShpInst_QuadArrow 76
181 : : #define ESCHER_ShpInst_LeftArrowCallout 77
182 : : #define ESCHER_ShpInst_RightArrowCallout 78
183 : : #define ESCHER_ShpInst_UpArrowCallout 79
184 : : #define ESCHER_ShpInst_DownArrowCallout 80
185 : : #define ESCHER_ShpInst_LeftRightArrowCallout 81
186 : : #define ESCHER_ShpInst_UpDownArrowCallout 82
187 : : #define ESCHER_ShpInst_QuadArrowCallout 83
188 : : #define ESCHER_ShpInst_Bevel 84
189 : : #define ESCHER_ShpInst_LeftBracket 85
190 : : #define ESCHER_ShpInst_RightBracket 86
191 : : #define ESCHER_ShpInst_LeftBrace 87
192 : : #define ESCHER_ShpInst_RightBrace 88
193 : : #define ESCHER_ShpInst_LeftUpArrow 89
194 : : #define ESCHER_ShpInst_BentUpArrow 90
195 : : #define ESCHER_ShpInst_BentArrow 91
196 : : #define ESCHER_ShpInst_Seal24 92
197 : : #define ESCHER_ShpInst_StripedRightArrow 93
198 : : #define ESCHER_ShpInst_NotchedRightArrow 94
199 : : #define ESCHER_ShpInst_BlockArc 95
200 : : #define ESCHER_ShpInst_SmileyFace 96
201 : : #define ESCHER_ShpInst_VerticalScroll 97
202 : : #define ESCHER_ShpInst_HorizontalScroll 98
203 : : #define ESCHER_ShpInst_CircularArrow 99
204 : : #define ESCHER_ShpInst_NotchedCircularArrow 100
205 : : #define ESCHER_ShpInst_UturnArrow 101
206 : : #define ESCHER_ShpInst_CurvedRightArrow 102
207 : : #define ESCHER_ShpInst_CurvedLeftArrow 103
208 : : #define ESCHER_ShpInst_CurvedUpArrow 104
209 : : #define ESCHER_ShpInst_CurvedDownArrow 105
210 : : #define ESCHER_ShpInst_CloudCallout 106
211 : : #define ESCHER_ShpInst_EllipseRibbon 107
212 : : #define ESCHER_ShpInst_EllipseRibbon2 108
213 : : #define ESCHER_ShpInst_FlowChartProcess 109
214 : : #define ESCHER_ShpInst_FlowChartDecision 110
215 : : #define ESCHER_ShpInst_FlowChartInputOutput 111
216 : : #define ESCHER_ShpInst_FlowChartPredefinedProcess 112
217 : : #define ESCHER_ShpInst_FlowChartInternalStorage 113
218 : : #define ESCHER_ShpInst_FlowChartDocument 114
219 : : #define ESCHER_ShpInst_FlowChartMultidocument 115
220 : : #define ESCHER_ShpInst_FlowChartTerminator 116
221 : : #define ESCHER_ShpInst_FlowChartPreparation 117
222 : : #define ESCHER_ShpInst_FlowChartManualInput 118
223 : : #define ESCHER_ShpInst_FlowChartManualOperation 119
224 : : #define ESCHER_ShpInst_FlowChartConnector 120
225 : : #define ESCHER_ShpInst_FlowChartPunchedCard 121
226 : : #define ESCHER_ShpInst_FlowChartPunchedTape 122
227 : : #define ESCHER_ShpInst_FlowChartSummingJunction 123
228 : : #define ESCHER_ShpInst_FlowChartOr 124
229 : : #define ESCHER_ShpInst_FlowChartCollate 125
230 : : #define ESCHER_ShpInst_FlowChartSort 126
231 : : #define ESCHER_ShpInst_FlowChartExtract 127
232 : : #define ESCHER_ShpInst_FlowChartMerge 128
233 : : #define ESCHER_ShpInst_FlowChartOfflineStorage 129
234 : : #define ESCHER_ShpInst_FlowChartOnlineStorage 130
235 : : #define ESCHER_ShpInst_FlowChartMagneticTape 131
236 : : #define ESCHER_ShpInst_FlowChartMagneticDisk 132
237 : : #define ESCHER_ShpInst_FlowChartMagneticDrum 133
238 : : #define ESCHER_ShpInst_FlowChartDisplay 134
239 : : #define ESCHER_ShpInst_FlowChartDelay 135
240 : : #define ESCHER_ShpInst_TextPlainText 136
241 : : #define ESCHER_ShpInst_TextStop 137
242 : : #define ESCHER_ShpInst_TextTriangle 138
243 : : #define ESCHER_ShpInst_TextTriangleInverted 139
244 : : #define ESCHER_ShpInst_TextChevron 140
245 : : #define ESCHER_ShpInst_TextChevronInverted 141
246 : : #define ESCHER_ShpInst_TextRingInside 142
247 : : #define ESCHER_ShpInst_TextRingOutside 143
248 : : #define ESCHER_ShpInst_TextArchUpCurve 144
249 : : #define ESCHER_ShpInst_TextArchDownCurve 145
250 : : #define ESCHER_ShpInst_TextCircleCurve 146
251 : : #define ESCHER_ShpInst_TextButtonCurve 147
252 : : #define ESCHER_ShpInst_TextArchUpPour 148
253 : : #define ESCHER_ShpInst_TextArchDownPour 149
254 : : #define ESCHER_ShpInst_TextCirclePour 150
255 : : #define ESCHER_ShpInst_TextButtonPour 151
256 : : #define ESCHER_ShpInst_TextCurveUp 152
257 : : #define ESCHER_ShpInst_TextCurveDown 153
258 : : #define ESCHER_ShpInst_TextCascadeUp 154
259 : : #define ESCHER_ShpInst_TextCascadeDown 155
260 : : #define ESCHER_ShpInst_TextWave1 156
261 : : #define ESCHER_ShpInst_TextWave2 157
262 : : #define ESCHER_ShpInst_TextWave3 158
263 : : #define ESCHER_ShpInst_TextWave4 159
264 : : #define ESCHER_ShpInst_TextInflate 160
265 : : #define ESCHER_ShpInst_TextDeflate 161
266 : : #define ESCHER_ShpInst_TextInflateBottom 162
267 : : #define ESCHER_ShpInst_TextDeflateBottom 163
268 : : #define ESCHER_ShpInst_TextInflateTop 164
269 : : #define ESCHER_ShpInst_TextDeflateTop 165
270 : : #define ESCHER_ShpInst_TextDeflateInflate 166
271 : : #define ESCHER_ShpInst_TextDeflateInflateDeflate 167
272 : : #define ESCHER_ShpInst_TextFadeRight 168
273 : : #define ESCHER_ShpInst_TextFadeLeft 169
274 : : #define ESCHER_ShpInst_TextFadeUp 170
275 : : #define ESCHER_ShpInst_TextFadeDown 171
276 : : #define ESCHER_ShpInst_TextSlantUp 172
277 : : #define ESCHER_ShpInst_TextSlantDown 173
278 : : #define ESCHER_ShpInst_TextCanUp 174
279 : : #define ESCHER_ShpInst_TextCanDown 175
280 : : #define ESCHER_ShpInst_FlowChartAlternateProcess 176
281 : : #define ESCHER_ShpInst_FlowChartOffpageConnector 177
282 : : #define ESCHER_ShpInst_Callout90 178
283 : : #define ESCHER_ShpInst_AccentCallout90 179
284 : : #define ESCHER_ShpInst_BorderCallout90 180
285 : : #define ESCHER_ShpInst_AccentBorderCallout90 181
286 : : #define ESCHER_ShpInst_LeftRightUpArrow 182
287 : : #define ESCHER_ShpInst_Sun 183
288 : : #define ESCHER_ShpInst_Moon 184
289 : : #define ESCHER_ShpInst_BracketPair 185
290 : : #define ESCHER_ShpInst_BracePair 186
291 : : #define ESCHER_ShpInst_Seal4 187
292 : : #define ESCHER_ShpInst_DoubleWave 188
293 : : #define ESCHER_ShpInst_ActionButtonBlank 189
294 : : #define ESCHER_ShpInst_ActionButtonHome 190
295 : : #define ESCHER_ShpInst_ActionButtonHelp 191
296 : : #define ESCHER_ShpInst_ActionButtonInformation 192
297 : : #define ESCHER_ShpInst_ActionButtonForwardNext 193
298 : : #define ESCHER_ShpInst_ActionButtonBackPrevious 194
299 : : #define ESCHER_ShpInst_ActionButtonEnd 195
300 : : #define ESCHER_ShpInst_ActionButtonBeginning 196
301 : : #define ESCHER_ShpInst_ActionButtonReturn 197
302 : : #define ESCHER_ShpInst_ActionButtonDocument 198
303 : : #define ESCHER_ShpInst_ActionButtonSound 199
304 : : #define ESCHER_ShpInst_ActionButtonMovie 200
305 : : #define ESCHER_ShpInst_HostControl 201
306 : : #define ESCHER_ShpInst_TextBox 202
307 : : #define ESCHER_ShpInst_COUNT 203
308 : : #define ESCHER_ShpInst_Max 0x0FFF
309 : : #define ESCHER_ShpInst_Nil ESCHER_ShpInst_Max
310 : :
311 : : enum ESCHER_BlibType
312 : : { // GEL provided types...
313 : : ERROR = 0, // An error occurred during loading
314 : : UNKNOWN, // An unknown blip type
315 : : EMF, // Windows Enhanced Metafile
316 : : WMF, // Windows Metafile
317 : : PICT, // Macintosh PICT
318 : : PEG, // JFIF
319 : : PNG, // PNG
320 : : DIB, // Windows DIB
321 : : FirstClient = 32, // First client defined blip type
322 : : LastClient = 255 // Last client defined blip type
323 : : };
324 : :
325 : : enum ESCHER_FillStyle
326 : : {
327 : : ESCHER_FillSolid, // Fill with a solid color
328 : : ESCHER_FillPattern, // Fill with a pattern (bitmap)
329 : : ESCHER_FillTexture, // A texture (pattern with its own color map)
330 : : ESCHER_FillPicture, // Center a picture in the shape
331 : : ESCHER_FillShade, // Shade from start to end points
332 : : ESCHER_FillShadeCenter, // Shade from bounding rectangle to end point
333 : : ESCHER_FillShadeShape, // Shade from shape outline to end point
334 : : ESCHER_FillShadeScale,
335 : : ESCHER_FillShadeTitle,
336 : : ESCHER_FillBackground
337 : : };
338 : :
339 : : enum ESCHER_wMode
340 : : {
341 : : ESCHER_wColor, // only used for predefined shades
342 : : ESCHER_wAutomatic, // depends on object type
343 : : ESCHER_wGrayScale, // shades of gray only
344 : : ESCHER_wLightGrayScale, // shades of light gray only
345 : : ESCHER_wInverseGray, // dark gray mapped to light gray, etc.
346 : : ESCHER_wGrayOutline, // pure gray and white
347 : : ESCHER_wBlackTextLine, // black text and lines, all else grayscale
348 : : ESCHER_wHighContrast, // pure black and white mode (no grays)
349 : : ESCHER_wBlack, // solid black msobwWhite, // solid white
350 : : ESCHER_wDontShow, // object not drawn
351 : : ESCHER_wNumModes // number of Black and white modes
352 : : };
353 : :
354 : :
355 : : //
356 : : enum ESCHER_ShapePath
357 : : {
358 : : ESCHER_ShapeLines, // A line of straight segments
359 : : ESCHER_ShapeLinesClosed, // A closed polygonal object
360 : : ESCHER_ShapeCurves, // A line of Bezier curve segments
361 : : ESCHER_ShapeCurvesClosed, // A closed shape with curved edges
362 : : ESCHER_ShapeComplex // pSegmentInfo must be non-empty
363 : : };
364 : :
365 : :
366 : : enum ESCHER_WrapMode
367 : : {
368 : : ESCHER_WrapSquare,
369 : : ESCHER_WrapByPoints,
370 : : ESCHER_WrapNone,
371 : : ESCHER_WrapTopBottom,
372 : : ESCHER_WrapThrough
373 : : };
374 : :
375 : : //
376 : : enum ESCHER_bwMode
377 : : {
378 : : ESCHER_bwColor, // only used for predefined shades
379 : : ESCHER_bwAutomatic, // depends on object type
380 : : ESCHER_bwGrayScale, // shades of gray only
381 : : ESCHER_bwLightGrayScale, // shades of light gray only
382 : : ESCHER_bwInverseGray, // dark gray mapped to light gray, etc.
383 : : ESCHER_bwGrayOutline, // pure gray and white
384 : : ESCHER_bwBlackTextLine, // black text and lines, all else grayscale
385 : : ESCHER_bwHighContrast, // pure black and white mode (no grays)
386 : : ESCHER_bwBlack, // solid black
387 : : ESCHER_bwWhite, // solid white
388 : : ESCHER_bwDontShow, // object not drawn
389 : : ESCHER_bwNumModes // number of Black and white modes
390 : : };
391 : :
392 : :
393 : : enum ESCHER_AnchorText
394 : : {
395 : : ESCHER_AnchorTop,
396 : : ESCHER_AnchorMiddle,
397 : : ESCHER_AnchorBottom,
398 : : ESCHER_AnchorTopCentered,
399 : : ESCHER_AnchorMiddleCentered,
400 : : ESCHER_AnchorBottomCentered,
401 : : ESCHER_AnchorTopBaseline,
402 : : ESCHER_AnchorBottomBaseline,
403 : : ESCHER_AnchorTopCenteredBaseline,
404 : : ESCHER_AnchorBottomCenteredBaseline
405 : : };
406 : :
407 : : enum ESCHER_cDir
408 : : {
409 : : ESCHER_cDir0, // Right
410 : : ESCHER_cDir90, // Down
411 : : ESCHER_cDir180, // Left
412 : : ESCHER_cDir270 // Up
413 : : };
414 : :
415 : : // connector style
416 : : enum ESCHER_cxSTYLE
417 : : {
418 : : ESCHER_cxstyleStraight = 0,
419 : : ESCHER_cxstyleBent,
420 : : ESCHER_cxstyleCurved,
421 : : ESCHER_cxstyleNone
422 : : };
423 : :
424 : : // text flow
425 : : enum ESCHER_txfl
426 : : {
427 : : ESCHER_txflHorzN, // Horizontal non-@
428 : : ESCHER_txflTtoBA, // Top to Bottom @-font
429 : : ESCHER_txflBtoT, // Bottom to Top non-@
430 : : ESCHER_txflTtoBN, // Top to Bottom non-@
431 : : ESCHER_txflHorzA, // Horizontal @-font
432 : : ESCHER_txflVertN // Vertical, non-@
433 : : };
434 : :
435 : : // text direction (needed for Bi-Di support)
436 : : enum ESCHER_txDir
437 : : {
438 : : ESCHER_txdirLTR, // left-to-right text direction
439 : : ESCHER_txdirRTL, // right-to-left text direction
440 : : ESCHER_txdirContext // context text direction
441 : : };
442 : :
443 : : // Callout Type
444 : : enum ESCHER_spcot
445 : : {
446 : : ESCHER_spcotRightAngle = 1,
447 : : ESCHER_spcotOneSegment = 2,
448 : : ESCHER_spcotTwoSegment = 3,
449 : : ESCHER_spcotThreeSegment= 4
450 : : };
451 : :
452 : : // Callout Angle
453 : : enum ESCHER_spcoa
454 : : {
455 : : ESCHER_spcoaAny,
456 : : ESCHER_spcoa30,
457 : : ESCHER_spcoa45,
458 : : ESCHER_spcoa60,
459 : : ESCHER_spcoa90,
460 : : ESCHER_spcoa0
461 : : };
462 : :
463 : : // Callout Drop
464 : : enum ESCHER_spcod
465 : : {
466 : : ESCHER_spcodTop,
467 : : ESCHER_spcodCenter,
468 : : ESCHER_spcodBottom,
469 : : ESCHER_spcodSpecified
470 : : };
471 : :
472 : : // FontWork alignment
473 : : enum ESCHER_GeoTextAlign
474 : : {
475 : : ESCHER_AlignTextStretch, // Stretch each line of text to fit width.
476 : : ESCHER_AlignTextCenter, // Center text on width.
477 : : ESCHER_AlignTextLeft, // Left justify.
478 : : ESCHER_AlignTextRight, // Right justify.
479 : : ESCHER_AlignTextLetterJust, // Spread letters out to fit width.
480 : : ESCHER_AlignTextWordJust, // Spread words out to fit width.
481 : : ESCHER_AlignTextInvalid // Invalid
482 : : };
483 : :
484 : : // flags for pictures
485 : : enum ESCHER_BlipFlags
486 : : {
487 : : ESCHER_BlipFlagDefault = 0,
488 : : ESCHER_BlipFlagComment = 0, // Blip name is a comment
489 : : ESCHER_BlipFlagFile, // Blip name is a file name
490 : : ESCHER_BlipFlagURL, // Blip name is a full URL
491 : : ESCHER_BlipFlagType = 3, // Mask to extract type
492 : : /* Or the following flags with any of the above. */
493 : : ESCHER_BlipFlagDoNotSave = 4,
494 : : ESCHER_BlipFlagLinkToFile = 8
495 : : };
496 : :
497 : : //
498 : : enum ESCHER_3DRenderMode
499 : : {
500 : : ESCHER_FullRender, // Generate a full rendering
501 : : ESCHER_Wireframe, // Generate a wireframe
502 : : ESCHER_BoundingCube // Generate a bounding cube
503 : : };
504 : :
505 : : //
506 : : enum ESCHER_xFormType
507 : : {
508 : : ESCHER_xFormAbsolute, // Apply transform in absolute space centered on shape
509 : : ESCHER_xFormShape, // Apply transform to shape geometry
510 : : ESCHER_xFormDrawing // Apply transform in drawing space
511 : : };
512 : :
513 : : //
514 : : enum ESCHER_ShadowType
515 : : {
516 : : ESCHER_ShadowOffset, // N pixel offset shadow
517 : : ESCHER_ShadowDouble, // Use second offset too
518 : : ESCHER_ShadowRich, // Rich perspective shadow (cast relative to shape)
519 : : ESCHER_ShadowShape, // Rich perspective shadow (cast in shape space)
520 : : ESCHER_ShadowDrawing, // Perspective shadow cast in drawing space
521 : : ESCHER_ShadowEmbossOrEngrave
522 : : };
523 : :
524 : : // - the type of a (length) measurement
525 : : enum ESCHER_dzType
526 : : {
527 : : ESCHER_dzTypeMin = 0,
528 : : ESCHER_dzTypeDefault = 0, // Default size, ignore the values
529 : : ESCHER_dzTypeA = 1, // Values are in EMUs
530 : : ESCHER_dzTypeV = 2, // Values are in pixels
531 : : ESCHER_dzTypeShape = 3, // Values are 16.16 fractions of shape size
532 : : ESCHER_dzTypeFixedAspect = 4, // Aspect ratio is fixed
533 : : ESCHER_dzTypeAFixed = 5, // EMUs, fixed aspect ratio
534 : : ESCHER_dzTypeVFixed = 6, // Pixels, fixed aspect ratio
535 : : ESCHER_dzTypeShapeFixed = 7, // Proportion of shape, fixed aspect ratio
536 : : ESCHER_dzTypeFixedAspectEnlarge= 8, // Aspect ratio is fixed, favor larger size
537 : : ESCHER_dzTypeAFixedBig = 9, // EMUs, fixed aspect ratio
538 : : ESCHER_dzTypeVFixedBig = 10, // Pixels, fixed aspect ratio
539 : : ESCHER_dzTypeShapeFixedBig= 11, // Proportion of shape, fixed aspect ratio
540 : : ESCHER_dzTypeMax = 11
541 : : };
542 : :
543 : : // how to interpret the colors in a shaded fill.
544 : : enum ESCHER_ShadeType
545 : : {
546 : : ESCHER_ShadeNone = 0, // Interpolate without correction between RGBs
547 : : ESCHER_ShadeGamma = 1, // Apply gamma correction to colors
548 : : ESCHER_ShadeSigma = 2, // Apply a sigma transfer function to position
549 : : ESCHER_ShadeBand = 4, // Add a flat band at the start of the shade
550 : : ESCHER_ShadeOneColor = 8, // This is a one color shade
551 : :
552 : : /* A parameter for the band or sigma function can be stored in the top
553 : : 16 bits of the value - this is a proportion of *each* band of the
554 : : shade to make flat (or the approximate equal value for a sigma
555 : : function). NOTE: the parameter is not used for the sigma function,
556 : : instead a built in value is used. This value should not be changed
557 : : from the default! */
558 : : ESCHER_ShadeParameterShift = 16,
559 : : ESCHER_ShadeParameterMask = 0xffff0000,
560 : :
561 : : ESCHER_ShadeDefault = (ESCHER_ShadeGamma|ESCHER_ShadeSigma|
562 : : (16384<<ESCHER_ShadeParameterShift))
563 : : };
564 : :
565 : : // compound line style
566 : : enum ESCHER_LineStyle
567 : : {
568 : : ESCHER_LineSimple, // Single line (of width lineWidth)
569 : : ESCHER_LineDouble, // Double lines of equal width
570 : : ESCHER_LineThickThin, // Double lines, one thick, one thin
571 : : ESCHER_LineThinThick, // Double lines, reverse order
572 : : ESCHER_LineTriple // Three lines, thin, thick, thin
573 : : };
574 : :
575 : : // how to "fill" the line contour
576 : : enum ESCHER_LineType
577 : : {
578 : : ESCHER_lineSolidType, // Fill with a solid color
579 : : ESCHER_linePattern, // Fill with a pattern (bitmap)
580 : : ESCHER_lineTexture, // A texture (pattern with its own color map)
581 : : ESCHER_linePicture // Center a picture in the shape
582 : : };
583 : :
584 : : // dashed line style
585 : : enum ESCHER_LineDashing
586 : : {
587 : : ESCHER_LineSolid, // Solid (continuous) pen
588 : : ESCHER_LineDashSys, // PS_DASH system dash style
589 : : ESCHER_LineDotSys, // PS_DOT system dash style
590 : : ESCHER_LineDashDotSys, // PS_DASHDOT system dash style
591 : : ESCHER_LineDashDotDotSys, // PS_DASHDOTDOT system dash style
592 : : ESCHER_LineDotGEL, // square dot style
593 : : ESCHER_LineDashGEL, // dash style
594 : : ESCHER_LineLongDashGEL, // long dash style
595 : : ESCHER_LineDashDotGEL, // dash short dash
596 : : ESCHER_LineLongDashDotGEL, // long dash short dash
597 : : ESCHER_LineLongDashDotDotGEL // long dash short dash short dash
598 : : };
599 : :
600 : : // line end effect
601 : : enum ESCHER_LineEnd
602 : : {
603 : : ESCHER_LineNoEnd,
604 : : ESCHER_LineArrowEnd,
605 : : ESCHER_LineArrowStealthEnd,
606 : : ESCHER_LineArrowDiamondEnd,
607 : : ESCHER_LineArrowOvalEnd,
608 : : ESCHER_LineArrowOpenEnd
609 : : };
610 : :
611 : : // size of arrowhead
612 : : enum ESCHER_LineWidth
613 : : {
614 : : ESCHER_LineNarrowArrow,
615 : : ESCHER_LineMediumWidthArrow,
616 : : ESCHER_LineWideArrow
617 : : };
618 : :
619 : : // size of arrowhead
620 : : enum ESCHER_LineEndLenght
621 : : {
622 : : ESCHER_LineShortArrow,
623 : : ESCHER_LineMediumLenArrow,
624 : : ESCHER_LineLongArrow
625 : : };
626 : :
627 : : // line join style.
628 : : enum ESCHER_LineJoin
629 : : {
630 : : ESCHER_LineJoinBevel, // Join edges by a straight line
631 : : ESCHER_LineJoinMiter, // Extend edges until they join
632 : : ESCHER_LineJoinRound // Draw an arc between the two edges
633 : : };
634 : :
635 : : // line cap style (applies to ends of dash segments too).
636 : : enum ESCHER_LineCap
637 : : {
638 : : ESCHER_LineEndCapRound, // Rounded ends - the default
639 : : ESCHER_LineEndCapSquare, // Square protrudes by half line width
640 : : ESCHER_LineEndCapFlat // Line ends at end point
641 : : };
642 : :
643 : : // Shape Properties
644 : : // 1pt = 12700 EMU (English Metric Units)
645 : : // 1pt = 20 Twip = 20/1440" = 1/72"
646 : : // 1twip=635 EMU
647 : : // 1" = 12700*72 = 914400 EMU
648 : : // 1" = 25.4mm
649 : : // 1mm = 36000 EMU
650 : : // Transform
651 : : #define ESCHER_Prop_Rotation 4 /* Fixed Point 16.16 degrees */
652 : : // Protection
653 : : #define ESCHER_Prop_LockRotation 119 /* sal_Bool No rotation */
654 : : #define ESCHER_Prop_LockAspectRatio 120 /* sal_Bool Don't allow changes in aspect ratio */
655 : : #define ESCHER_Prop_LockPosition 121 /* sal_Bool Don't allow the shape to be moved */
656 : : #define ESCHER_Prop_LockAgainstSelect 122 /* sal_Bool Shape may not be selected */
657 : : #define ESCHER_Prop_LockCropping 123 /* sal_Bool No cropping this shape */
658 : : #define ESCHER_Prop_LockVertices 124 /* sal_Bool Edit Points not allowed */
659 : : #define ESCHER_Prop_LockText 125 /* sal_Bool Do not edit text */
660 : : #define ESCHER_Prop_LockAdjustHandles 126 /* sal_Bool Do not adjust */
661 : : #define ESCHER_Prop_LockAgainstGrouping 127 /* sal_Bool Do not group this shape */
662 : : // Text
663 : : #define ESCHER_Prop_lTxid 128 /* LONG id for the text, value determined by the host */
664 : : #define ESCHER_Prop_dxTextLeft 129 /* LONG margins relative to shape's inscribed */
665 : : #define ESCHER_Prop_dyTextTop 130 /* LONG text rectangle (in EMUs) */
666 : : #define ESCHER_Prop_dxTextRight 131 /* LONG */
667 : : #define ESCHER_Prop_dyTextBottom 132 /* LONG */
668 : : #define ESCHER_Prop_WrapText 133 /* MSOWRAPMODE Wrap text at shape margins */
669 : : #define ESCHER_Prop_scaleText 134 /* LONG Text zoom/scale (used if fFitTextToShape) */
670 : : #define ESCHER_Prop_AnchorText 135 /* ESCHER_AnchorText How to anchor the text */
671 : : #define ESCHER_Prop_txflTextFlow 136 /* MSOTXFL Text flow */
672 : : #define ESCHER_Prop_cdirFont 137 /* MSOCDIR Font rotation */
673 : : #define ESCHER_Prop_hspNext 138 /* MSOHSP ID of the next shape (used by Word for linked textboxes) */
674 : : #define ESCHER_Prop_txdir 139 /* MSOTXDIR Bi-Di Text direction */
675 : : #define ESCHER_Prop_SelectText 187 /* sal_Bool sal_True if single click selects text, sal_False if two clicks */
676 : : #define ESCHER_Prop_AutoTextMargin 188 /* sal_Bool use host's margin calculations */
677 : : #define ESCHER_Prop_RotateText 189 /* sal_Bool Rotate text with shape */
678 : : #define ESCHER_Prop_FitShapeToText 190 /* sal_Bool Size shape to fit text size */
679 : : #define ESCHER_Prop_FitTextToShape 191 /* sal_Bool Size text to fit shape size */
680 : : // GeoText
681 : : #define ESCHER_Prop_gtextUNICODE 192 /* WCHAR* UNICODE text string */
682 : : #define ESCHER_Prop_gtextRTF 193 /* char* RTF text string */
683 : : #define ESCHER_Prop_gtextAlign 194 /* MSOGEOTEXTALIGN alignment on curve */
684 : : #define ESCHER_Prop_gtextSize 195 /* LONG default point size */
685 : : #define ESCHER_Prop_gtextSpacing 196 /* LONG fixed point 16.16 */
686 : : #define ESCHER_Prop_gtextFont 197 /* WCHAR* font family name */
687 : : #define ESCHER_Prop_gtextFReverseRows 240 /* sal_Bool Reverse row order */
688 : : #define ESCHER_Prop_fGtext 241 /* sal_Bool Has text effect */
689 : : #define ESCHER_Prop_gtextFVertical 242 /* sal_Bool Rotate characters */
690 : : #define ESCHER_Prop_gtextFKern 243 /* sal_Bool Kern characters */
691 : : #define ESCHER_Prop_gtextFTight 244 /* sal_Bool Tightening or tracking */
692 : : #define ESCHER_Prop_gtextFStretch 245 /* sal_Bool Stretch to fit shape */
693 : : #define ESCHER_Prop_gtextFShrinkFit 246 /* sal_Bool Char bounding box */
694 : : #define ESCHER_Prop_gtextFBestFit 247 /* sal_Bool Scale text-on-path */
695 : : #define ESCHER_Prop_gtextFNormalize 248 /* sal_Bool Stretch char height */
696 : : #define ESCHER_Prop_gtextFDxMeasure 249 /* sal_Bool Do not measure along path */
697 : : #define ESCHER_Prop_gtextFBold 250 /* sal_Bool Bold font */
698 : : #define ESCHER_Prop_gtextFItalic 251 /* sal_Bool Italic font */
699 : : #define ESCHER_Prop_gtextFUnderline 252 /* sal_Bool Underline font */
700 : : #define ESCHER_Prop_gtextFShadow 253 /* sal_Bool Shadow font */
701 : : #define ESCHER_Prop_gtextFSmallcaps 254 /* sal_Bool Small caps font */
702 : : #define ESCHER_Prop_gtextFStrikethrough 255 /* sal_Bool Strike through font */
703 : : // Blip
704 : : #define ESCHER_Prop_cropFromTop 256 /* LONG 16.16 fraction times total */
705 : : #define ESCHER_Prop_cropFromBottom 257 /* LONG image width or height, */
706 : : #define ESCHER_Prop_cropFromLeft 258 /* LONG as appropriate. */
707 : : #define ESCHER_Prop_cropFromRight 259 /* LONG */
708 : : #define ESCHER_Prop_pib 260 /* IMsoBlip* Blip to display */
709 : : #define ESCHER_Prop_pibName 261 /* WCHAR* Blip file name */
710 : : #define ESCHER_Prop_pibFlags 262 /* MSOBLIPFLAGS Blip flags */
711 : : #define ESCHER_Prop_pictureTransparent 263 /* LONG transparent color (none if ~0UL) */
712 : : #define ESCHER_Prop_pictureContrast 264 /* LONG contrast setting */
713 : : #define ESCHER_Prop_pictureBrightness 265 /* LONG brightness setting */
714 : : #define ESCHER_Prop_pictureGamma 266 /* LONG 16.16 gamma */
715 : : #define ESCHER_Prop_pictureId 267 /* LONG Host-defined ID for OLE objects (usually a pointer) */
716 : : #define ESCHER_Prop_pictureDblCrMod 268 /* MSOCLR Modification used if shape has double shadow */
717 : : #define ESCHER_Prop_pictureFillCrMod 269 /* MSOCLR */
718 : : #define ESCHER_Prop_pictureLineCrMod 270 /* MSOCLR */
719 : : #define ESCHER_Prop_pibPrint 271 /* IMsoBlip* Blip to display when printing */
720 : : #define ESCHER_Prop_pibPrintName 272 /* WCHAR* Blip file name */
721 : : #define ESCHER_Prop_pibPrintFlags 273 /* MSOBLIPFLAGS Blip flags */
722 : : #define ESCHER_Prop_fNoHitTestPicture 316 /* sal_Bool Do not hit test the picture */
723 : : #define ESCHER_Prop_pictureGray 317 /* sal_Bool grayscale display */
724 : : #define ESCHER_Prop_pictureBiLevel 318 /* sal_Bool bi-level display */
725 : : #define ESCHER_Prop_pictureActive 319 /* sal_Bool Server is active (OLE objects only) */
726 : : // Geometry
727 : : #define ESCHER_Prop_geoLeft 320 /* LONG Defines the G (geometry) coordinate space. */
728 : : #define ESCHER_Prop_geoTop 321 /* LONG */
729 : : #define ESCHER_Prop_geoRight 322 /* LONG */
730 : : #define ESCHER_Prop_geoBottom 323 /* LONG */
731 : : #define ESCHER_Prop_shapePath 324 /* MSOSHAPEPATH */
732 : : #define ESCHER_Prop_pVertices 325 /* IMsoArray An array of points, in G units. */
733 : : #define ESCHER_Prop_pSegmentInfo 326 /* IMsoArray */
734 : : #define ESCHER_Prop_adjustValue 327 /* LONG Adjustment values corresponding to */
735 : : #define ESCHER_Prop_adjust2Value 328 /* LONG the positions of the adjust handles */
736 : : #define ESCHER_Prop_adjust3Value 329 /* LONG of the shape. The number of values */
737 : : #define ESCHER_Prop_adjust4Value 330 /* LONG used and their allowable ranges vary */
738 : : #define ESCHER_Prop_adjust5Value 331 /* LONG from shape type to shape type. */
739 : : #define ESCHER_Prop_adjust6Value 332 /* LONG */
740 : : #define ESCHER_Prop_adjust7Value 333 /* LONG */
741 : : #define ESCHER_Prop_adjust8Value 334 /* LONG */
742 : : #define ESCHER_Prop_adjust9Value 335 /* LONG */
743 : : #define ESCHER_Prop_adjust10Value 336 /* LONG */
744 : : #define ESCHER_Prop_fShadowOK 378 /* sal_Bool Shadow may be set */
745 : : #define ESCHER_Prop_f3DOK 379 /* sal_Bool 3D may be set */
746 : : #define ESCHER_Prop_fLineOK 380 /* sal_Bool Line style may be set */
747 : : #define ESCHER_Prop_fGtextOK 381 /* sal_Bool Text effect (FontWork) supported */
748 : : #define ESCHER_Prop_fFillShadeShapeOK 382 /* sal_Bool */
749 : : #define ESCHER_Prop_fFillOK 383 /* sal_Bool OK to fill the shape through the UI or VBA? */
750 : : // FillStyle
751 : : #define ESCHER_Prop_fillType 384 /* ESCHER_FillStyle Type of fill */
752 : : #define ESCHER_Prop_fillColor 385 /* MSOCLR Foreground color */
753 : : #define ESCHER_Prop_fillOpacity 386 /* LONG Fixed 16.16 */
754 : : #define ESCHER_Prop_fillBackColor 387 /* MSOCLR Background color */
755 : : #define ESCHER_Prop_fillBackOpacity 388 /* LONG Shades only */
756 : : #define ESCHER_Prop_fillCrMod 389 /* MSOCLR Modification for BW views */
757 : : #define ESCHER_Prop_fillBlip 390 /* IMsoBlip* Pattern/texture */
758 : : #define ESCHER_Prop_fillBlipName 391 /* WCHAR* Blip file name */
759 : : #define ESCHER_Prop_fillBlipFlags 392 /* MSOBLIPFLAGS Blip flags */
760 : : #define ESCHER_Prop_fillWidth 393 /* LONG How big (A units) to make a metafile texture. */
761 : : #define ESCHER_Prop_fillHeight 394 /* LONG */
762 : : #define ESCHER_Prop_fillAngle 395 /* LONG Fade angle - degrees in 16.16 */
763 : : #define ESCHER_Prop_fillFocus 396 /* LONG Linear shaded fill focus percent */
764 : : #define ESCHER_Prop_fillToLeft 397 /* LONG Fraction 16.16 */
765 : : #define ESCHER_Prop_fillToTop 398 /* LONG Fraction 16.16 */
766 : : #define ESCHER_Prop_fillToRight 399 /* LONG Fraction 16.16 */
767 : : #define ESCHER_Prop_fillToBottom 400 /* LONG Fraction 16.16 */
768 : : #define ESCHER_Prop_fillRectLeft 401 /* LONG For shaded fills, use the specified rectangle */
769 : : #define ESCHER_Prop_fillRectTop 402 /* LONG instead of the shape's bounding rect to */
770 : : #define ESCHER_Prop_fillRectRight 403 /* LONG define how large the fade is going to be. */
771 : : #define ESCHER_Prop_fillRectBottom 404 /* LONG */
772 : : #define ESCHER_Prop_fillDztype 405 /* MSODZTYPE */
773 : : #define ESCHER_Prop_fillShadePreset 406 /* LONG Special shades */
774 : : #define ESCHER_Prop_fillShadeColors 407 /* IMsoArray a preset array of colors */
775 : : #define ESCHER_Prop_fillOriginX 408 /* LONG */
776 : : #define ESCHER_Prop_fillOriginY 409 /* LONG */
777 : : #define ESCHER_Prop_fillShapeOriginX 410 /* LONG */
778 : : #define ESCHER_Prop_fillShapeOriginY 411 /* LONG */
779 : : #define ESCHER_Prop_fillShadeType 412 /* MSOSHADETYPE Type of shading, if a shaded (gradient) fill. */
780 : : #define ESCHER_Prop_fFilled 443 /* sal_Bool Is shape filled? */
781 : : #define ESCHER_Prop_fHitTestFill 444 /* sal_Bool Should we hit test fill? */
782 : : #define ESCHER_Prop_fillShape 445 /* sal_Bool Register pattern on shape */
783 : : #define ESCHER_Prop_fillUseRect 446 /* sal_Bool Use the large rect? */
784 : : #define ESCHER_Prop_fNoFillHitTest 447 /* sal_Bool Hit test a shape as though filled */
785 : : // LineStyle
786 : : #define ESCHER_Prop_lineColor 448 /* MSOCLR Color of line */
787 : : #define ESCHER_Prop_lineOpacity 449 /* LONG Not implemented */
788 : : #define ESCHER_Prop_lineBackColor 450 /* MSOCLR Background color */
789 : : #define ESCHER_Prop_lineCrMod 451 /* MSOCLR Modification for BW views */
790 : : #define ESCHER_Prop_lineType 452 /* MSOLINETYPE Type of line */
791 : : #define ESCHER_Prop_lineFillBlip 453 /* IMsoBlip* Pattern/texture */
792 : : #define ESCHER_Prop_lineFillBlipName 454 /* WCHAR* Blip file name */
793 : : #define ESCHER_Prop_lineFillBlipFlags 455 /* MSOBLIPFLAGS Blip flags */
794 : : #define ESCHER_Prop_lineFillWidth 456 /* LONG How big (A units) to make */
795 : : #define ESCHER_Prop_lineFillHeight 457 /* LONG a metafile texture. */
796 : : #define ESCHER_Prop_lineFillDztype 458 /* MSODZTYPE How to interpret fillWidth/Height numbers. */
797 : : #define ESCHER_Prop_lineWidth 459 /* LONG A units; 1pt == 12700 EMUs */
798 : : #define ESCHER_Prop_lineMiterLimit 460 /* LONG ratio (16.16) of width */
799 : : #define ESCHER_Prop_lineStyle 461 /* MSOLINESTYLE Draw parallel lines? */
800 : : #define ESCHER_Prop_lineDashing 462 /* MSOLINEDASHING Can be overridden by: */
801 : : #define ESCHER_Prop_lineDashStyle 463 /* IMsoArray As Win32 ExtCreatePen */
802 : : #define ESCHER_Prop_lineStartArrowhead 464 /* MSOLINEEND Arrow at start */
803 : : #define ESCHER_Prop_lineEndArrowhead 465 /* MSOLINEEND Arrow at end */
804 : : #define ESCHER_Prop_lineStartArrowWidth 466 /* MSOLINEENDWIDTH Arrow at start */
805 : : #define ESCHER_Prop_lineStartArrowLength 467 /* MSOLINEENDLENGTH Arrow at end */
806 : : #define ESCHER_Prop_lineEndArrowWidth 468 /* MSOLINEENDWIDTH Arrow at start */
807 : : #define ESCHER_Prop_lineEndArrowLength 469 /* MSOLINEENDLENGTH Arrow at end */
808 : : #define ESCHER_Prop_lineJoinStyle 470 /* MSOLINEJOIN How to join lines */
809 : : #define ESCHER_Prop_lineEndCapStyle 471 /* MSOLINECAP How to end lines */
810 : : #define ESCHER_Prop_fArrowheadsOK 507 /* sal_Bool Allow arrowheads if prop. is set */
811 : : #define ESCHER_Prop_fLine 508 /* sal_Bool Any line? */
812 : : #define ESCHER_Prop_fHitTestLine 509 /* sal_Bool Should we hit test lines? */
813 : : #define ESCHER_Prop_lineFillShape 510 /* sal_Bool Register pattern on shape */
814 : : #define ESCHER_Prop_fNoLineDrawDash 511 /* sal_Bool Draw a dashed line if no line */
815 : : // ShadowStyle
816 : : #define ESCHER_Prop_shadowType 512 /* MSOSHADOWTYPE Type of effect */
817 : : #define ESCHER_Prop_shadowColor 513 /* MSOCLR Foreground color */
818 : : #define ESCHER_Prop_shadowHighlight 514 /* MSOCLR Embossed color */
819 : : #define ESCHER_Prop_shadowCrMod 515 /* MSOCLR Modification for BW views */
820 : : #define ESCHER_Prop_shadowOpacity 516 /* LONG Fixed 16.16 */
821 : : #define ESCHER_Prop_shadowOffsetX 517 /* LONG Offset shadow */
822 : : #define ESCHER_Prop_shadowOffsetY 518 /* LONG Offset shadow */
823 : : #define ESCHER_Prop_shadowSecondOffsetX 519 /* LONG Double offset shadow */
824 : : #define ESCHER_Prop_shadowSecondOffsetY 520 /* LONG Double offset shadow */
825 : : #define ESCHER_Prop_shadowScaleXToX 521 /* LONG 16.16 */
826 : : #define ESCHER_Prop_shadowScaleYToX 522 /* LONG 16.16 */
827 : : #define ESCHER_Prop_shadowScaleXToY 523 /* LONG 16.16 */
828 : : #define ESCHER_Prop_shadowScaleYToY 524 /* LONG 16.16 */
829 : : #define ESCHER_Prop_shadowPerspectiveX 525 /* LONG 16.16 / weight */
830 : : #define ESCHER_Prop_shadowPerspectiveY 526 /* LONG 16.16 / weight */
831 : : #define ESCHER_Prop_shadowWeight 527 /* LONG scaling factor */
832 : : #define ESCHER_Prop_shadowOriginX 528 /* LONG */
833 : : #define ESCHER_Prop_shadowOriginY 529 /* LONG */
834 : : #define ESCHER_Prop_fShadow 574 /* sal_Bool Any shadow? */
835 : : #define ESCHER_Prop_fshadowObscured 575 /* sal_Bool Excel5-style shadow */
836 : : // PerspectiveStyle
837 : : #define ESCHER_Prop_perspectiveType 576 /* MSOXFORMTYPE Where transform applies */
838 : : #define ESCHER_Prop_perspectiveOffsetX 577 /* LONG The LONG values define a */
839 : : #define ESCHER_Prop_perspectiveOffsetY 578 /* LONG transformation matrix, */
840 : : #define ESCHER_Prop_perspectiveScaleXToX 579 /* LONG effectively, each value */
841 : : #define ESCHER_Prop_perspectiveScaleYToX 580 /* LONG is scaled by the */
842 : : #define ESCHER_Prop_perspectiveScaleXToY 581 /* LONG perspectiveWeight parameter. */
843 : : #define ESCHER_Prop_perspectiveScaleYToY 582 /* LONG */
844 : : #define ESCHER_Prop_perspectivePerspectiveX 583 /* LONG */
845 : : #define ESCHER_Prop_perspectivePerspectiveY 584 /* LONG */
846 : : #define ESCHER_Prop_perspectiveWeight 585 /* LONG Scaling factor */
847 : : #define ESCHER_Prop_perspectiveOriginX 586 /* LONG */
848 : : #define ESCHER_Prop_perspectiveOriginY 587 /* LONG */
849 : : #define ESCHER_Prop_fPerspective 639 /* sal_Bool On/off */
850 : : // 3D Object
851 : : #define ESCHER_Prop_c3DSpecularAmt 640 /* LONG Fixed-point 16.16 */
852 : : #define ESCHER_Prop_c3DDiffuseAmt 641 /* LONG Fixed-point 16.16 */
853 : : #define ESCHER_Prop_c3DShininess 642 /* LONG Default gives OK results */
854 : : #define ESCHER_Prop_c3DEdgeThickness 643 /* LONG Specular edge thickness */
855 : : #define ESCHER_Prop_c3DExtrudeForward 644 /* LONG Distance of extrusion in EMUs */
856 : : #define ESCHER_Prop_c3DExtrudeBackward 645 /* LONG */
857 : : #define ESCHER_Prop_c3DExtrudePlane 646 /* LONG Extrusion direction */
858 : : #define ESCHER_Prop_c3DExtrusionColor 647 /* MSOCLR Basic color of extruded part of shape; the lighting model used will determine the exact shades used when rendering. */
859 : : #define ESCHER_Prop_c3DCrMod 648 /* MSOCLR Modification for BW views */
860 : : #define ESCHER_Prop_f3D 700 /* sal_Bool Does this shape have a 3D effect? */
861 : : #define ESCHER_Prop_fc3DMetallic 701 /* sal_Bool Use metallic specularity? */
862 : : #define ESCHER_Prop_fc3DUseExtrusionColor 702 /* sal_Bool */
863 : : #define ESCHER_Prop_fc3DLightFace 703 /* sal_Bool */
864 : : // 3D Style
865 : : #define ESCHER_Prop_c3DYRotationAngle 704 /* LONG degrees (16.16) about y axis */
866 : : #define ESCHER_Prop_c3DXRotationAngle 705 /* LONG degrees (16.16) about x axis */
867 : : #define ESCHER_Prop_c3DRotationAxisX 706 /* LONG These specify the rotation axis; */
868 : : #define ESCHER_Prop_c3DRotationAxisY 707 /* LONG only their relative magnitudes */
869 : : #define ESCHER_Prop_c3DRotationAxisZ 708 /* LONG matter. */
870 : : #define ESCHER_Prop_c3DRotationAngle 709 /* LONG degrees (16.16) about axis */
871 : : #define ESCHER_Prop_c3DRotationCenterX 710 /* LONG rotation center x (16.16 or g-units) */
872 : : #define ESCHER_Prop_c3DRotationCenterY 711 /* LONG rotation center y (16.16 or g-units) */
873 : : #define ESCHER_Prop_c3DRotationCenterZ 712 /* LONG rotation center z (absolute (emus)) */
874 : : #define ESCHER_Prop_c3DRenderMode 713 /* MSO3DRENDERMODE Full,wireframe, or bcube */
875 : : #define ESCHER_Prop_c3DTolerance 714 /* LONG pixels (16.16) */
876 : : #define ESCHER_Prop_c3DXViewpoint 715 /* LONG X view point (emus) */
877 : : #define ESCHER_Prop_c3DYViewpoint 716 /* LONG Y view point (emus) */
878 : : #define ESCHER_Prop_c3DZViewpoint 717 /* LONG Z view distance (emus) */
879 : : #define ESCHER_Prop_c3DOriginX 718 /* LONG */
880 : : #define ESCHER_Prop_c3DOriginY 719 /* LONG */
881 : : #define ESCHER_Prop_c3DSkewAngle 720 /* LONG degree (16.16) skew angle */
882 : : #define ESCHER_Prop_c3DSkewAmount 721 /* LONG Percentage skew amount */
883 : : #define ESCHER_Prop_c3DAmbientIntensity 722 /* LONG Fixed point intensity */
884 : : #define ESCHER_Prop_c3DKeyX 723 /* LONG Key light source direc- */
885 : : #define ESCHER_Prop_c3DKeyY 724 /* LONG tion; only their relative */
886 : : #define ESCHER_Prop_c3DKeyZ 725 /* LONG magnitudes matter */
887 : : #define ESCHER_Prop_c3DKeyIntensity 726 /* LONG Fixed point intensity */
888 : : #define ESCHER_Prop_c3DFillX 727 /* LONG Fill light source direc- */
889 : : #define ESCHER_Prop_c3DFillY 728 /* LONG tion; only their relative */
890 : : #define ESCHER_Prop_c3DFillZ 729 /* LONG magnitudes matter */
891 : : #define ESCHER_Prop_c3DFillIntensity 730 /* LONG Fixed point intensity */
892 : : #define ESCHER_Prop_fc3DConstrainRotation 763 /* sal_Bool */
893 : : #define ESCHER_Prop_fc3DRotationCenterAuto 764 /* sal_Bool */
894 : : #define ESCHER_Prop_fc3DParallel 765 /* sal_Bool Parallel projection? */
895 : : #define ESCHER_Prop_fc3DKeyHarsh 766 /* sal_Bool Is key lighting harsh? */
896 : : #define ESCHER_Prop_fc3DFillHarsh 767 /* sal_Bool Is fill lighting harsh? */
897 : : // Shape
898 : : #define ESCHER_Prop_hspMaster 769 /* MSOHSP master shape */
899 : : #define ESCHER_Prop_cxstyle 771 /* MSOCXSTYLE Type of connector */
900 : : #define ESCHER_Prop_bWMode 772 /* ESCHERwMode Settings for modifications to */
901 : : #define ESCHER_Prop_bWModePureBW 773 /* ESCHERwMode be made when in different */
902 : : #define ESCHER_Prop_bWModeBW 774 /* ESCHERwMode forms of black-and-white mode. */
903 : : #define ESCHER_Prop_fOleIcon 826 /* sal_Bool For OLE objects, whether the object is in icon form */
904 : : #define ESCHER_Prop_fPreferRelativeResize 827 /* sal_Bool For UI only. Prefer relative resizing. */
905 : : #define ESCHER_Prop_fLockShapeType 828 /* sal_Bool Lock the shape type (don't allow Change Shape) */
906 : : #define ESCHER_Prop_fDeleteAttachedObject 830 /* sal_Bool */
907 : : #define ESCHER_Prop_fBackground 831 /* sal_Bool If sal_True, this is the background shape. */
908 : : // Callout
909 : : #define ESCHER_Prop_spcot 832 /* MSOSPCOT Callout type */
910 : : #define ESCHER_Prop_dxyCalloutGap 833 /* LONG Distance from box to first point.(EMUs) */
911 : : #define ESCHER_Prop_spcoa 834 /* MSOSPCOA Callout angle */
912 : : #define ESCHER_Prop_spcod 835 /* MSOSPCOD Callout drop type */
913 : : #define ESCHER_Prop_dxyCalloutDropSpecified 836 /* LONG if msospcodSpecified, the actual drop distance */
914 : : #define ESCHER_Prop_dxyCalloutLengthSpecified 837 /* LONG if fCalloutLengthSpecified, the actual distance */
915 : : #define ESCHER_Prop_fCallout 889 /* sal_Bool Is the shape a callout? */
916 : : #define ESCHER_Prop_fCalloutAccentBar 890 /* sal_Bool does callout have accent bar */
917 : : #define ESCHER_Prop_fCalloutTextBorder 891 /* sal_Bool does callout have a text border */
918 : : #define ESCHER_Prop_fCalloutMinusX 892 /* sal_Bool */
919 : : #define ESCHER_Prop_fCalloutMinusY 893 /* sal_Bool */
920 : : #define ESCHER_Prop_fCalloutDropAuto 894 /* sal_Bool If true, then we occasionally invert the drop distance */
921 : : #define ESCHER_Prop_fCalloutLengthSpecified 895 /* sal_Bool if true, we look at dxyCalloutLengthSpecified */
922 : : // GroupShape
923 : : #define ESCHER_Prop_wzName 896 /* WCHAR* Shape Name (present only if explicitly set) */
924 : : #define ESCHER_Prop_wzDescription 897 /* WCHAR* alternate text */
925 : : #define ESCHER_Prop_pihlShape 898 /* IHlink* The hyperlink in the shape. */
926 : : #define ESCHER_Prop_pWrapPolygonVertices 899 /* IMsoArray The polygon that text will be wrapped around (Word) */
927 : : #define ESCHER_Prop_dxWrapDistLeft 900 /* LONG Left wrapping distance from text (Word) */
928 : : #define ESCHER_Prop_dyWrapDistTop 901 /* LONG Top wrapping distance from text (Word) */
929 : : #define ESCHER_Prop_dxWrapDistRight 902 /* LONG Right wrapping distance from text (Word) */
930 : : #define ESCHER_Prop_dyWrapDistBottom 903 /* LONG Bottom wrapping distance from text (Word) */
931 : : #define ESCHER_Prop_lidRegroup 904 /* LONG Regroup ID */
932 : : #define ESCHER_Prop_tableProperties 927
933 : : #define ESCHER_Prop_tableRowProperties 928
934 : : #define ESCHER_Prop_fEditedWrap 953 /* sal_Bool Has the wrap polygon been edited? */
935 : : #define ESCHER_Prop_fBehindDocument 954 /* sal_Bool Word-only (shape is behind text) */
936 : : #define ESCHER_Prop_fOnDblClickNotify 955 /* sal_Bool Notify client on a double click */
937 : : #define ESCHER_Prop_fIsButton 956 /* sal_Bool A button shape (i.e., clicking performs an action). Set for shapes with attached hyperlinks or macros. */
938 : : #define ESCHER_Prop_fOneD 957 /* sal_Bool 1D adjustment */
939 : : #define ESCHER_Prop_fHidden 958 /* sal_Bool Do not display */
940 : : #define ESCHER_Prop_fPrint 959 /* sal_Bool Print this shape */
941 : :
942 : : #define ESCHER_PERSISTENTRY_PREALLOCATE 64
943 : :
944 : : #define ESCHER_Persist_PrivateEntry 0x80000000
945 : : #define ESCHER_Persist_Dgg 0x00010000
946 : : #define ESCHER_Persist_Dg 0x00020000
947 : : #define ESCHER_Persist_CurrentPosition 0x00040000
948 : : #define ESCHER_Persist_Grouping_Snap 0x00050000
949 : : #define ESCHER_Persist_Grouping_Logic 0x00060000
950 : :
951 : : const sal_uInt32 DFF_DGG_CLUSTER_SIZE = 0x00000400; /// Shape IDs per cluster in DGG atom.
952 : :
953 : : // ---------------------------------------------------------------------------------------------
954 : :
955 : : namespace com { namespace sun { namespace star {
956 : : namespace awt {
957 : : struct Gradient;
958 : : }
959 : : namespace drawing {
960 : : struct EnhancedCustomShapeAdjustmentValue;
961 : : class XShape;
962 : : class XShapes;
963 : : }
964 : : }}}
965 : :
966 : 0 : struct MSFILTER_DLLPUBLIC EscherConnectorListEntry
967 : : {
968 : : ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > mXConnector;
969 : : ::com::sun::star::awt::Point maPointA;
970 : : ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > mXConnectToA;
971 : : ::com::sun::star::awt::Point maPointB;
972 : : ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > mXConnectToB;
973 : :
974 : : sal_uInt32 GetConnectorRule( sal_Bool bFirst );
975 : :
976 : 0 : EscherConnectorListEntry( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rC,
977 : : const ::com::sun::star::awt::Point& rPA,
978 : : ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rSA ,
979 : : const ::com::sun::star::awt::Point& rPB,
980 : : ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rSB ) :
981 : : mXConnector ( rC ),
982 : : maPointA ( rPA ),
983 : : mXConnectToA( rSA ),
984 : : maPointB ( rPB ),
985 : 0 : mXConnectToB( rSB ) {}
986 : :
987 : : sal_uInt32 GetClosestPoint( const Polygon& rPoly, const ::com::sun::star::awt::Point& rP );
988 : : };
989 : :
990 : : struct MSFILTER_DLLPUBLIC EscherExContainer
991 : : {
992 : : sal_uInt32 nContPos;
993 : : SvStream& rStrm;
994 : :
995 : : EscherExContainer( SvStream& rSt, const sal_uInt16 nRecType, const sal_uInt16 nInstance = 0 );
996 : : ~EscherExContainer();
997 : : };
998 : :
999 : : struct MSFILTER_DLLPUBLIC EscherExAtom
1000 : : {
1001 : : sal_uInt32 nContPos;
1002 : : SvStream& rStrm;
1003 : :
1004 : : EscherExAtom( SvStream& rSt, const sal_uInt16 nRecType, const sal_uInt16 nInstance = 0, const sal_uInt8 nVersion = 0 );
1005 : : ~EscherExAtom();
1006 : : };
1007 : :
1008 : : struct EscherPropertyValueHelper
1009 : : {
1010 : : static sal_Bool GetPropertyValue(
1011 : : ::com::sun::star::uno::Any& rAny,
1012 : : const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > &,
1013 : : const String& rPropertyName,
1014 : : sal_Bool bTestPropertyAvailability = sal_False
1015 : : );
1016 : :
1017 : : static ::com::sun::star::beans::PropertyState GetPropertyState(
1018 : : const ::com::sun::star::uno::Reference < ::com::sun::star::beans::XPropertySet > &,
1019 : : const String& rPropertyName
1020 : : );
1021 : : };
1022 : :
1023 : : // ---------------------------------------------------------------------------------------------
1024 : :
1025 : : struct EscherPersistEntry
1026 : : {
1027 : : sal_uInt32 mnID;
1028 : : sal_uInt32 mnOffset;
1029 : :
1030 : 30 : EscherPersistEntry( sal_uInt32 nId, sal_uInt32 nOffset ) { mnID = nId; mnOffset = nOffset; };
1031 : :
1032 : : };
1033 : :
1034 : : // ---------------------------------------------------------------------------------------------
1035 : :
1036 : : class EscherBlibEntry
1037 : : {
1038 : :
1039 : : friend class EscherGraphicProvider;
1040 : : friend class EscherEx;
1041 : :
1042 : : protected:
1043 : :
1044 : : sal_uInt32 mnIdentifier[ 4 ];
1045 : : sal_uInt32 mnPictureOffset; // offset to the graphic im PictureStreams
1046 : : sal_uInt32 mnSize; // size of real graphic
1047 : :
1048 : : sal_uInt32 mnRefCount; // !! reference count
1049 : : sal_uInt32 mnSizeExtra; // !! size of preceding header
1050 : :
1051 : : ESCHER_BlibType meBlibType;
1052 : :
1053 : : Size maPrefSize;
1054 : : MapMode maPrefMapMode;
1055 : :
1056 : : sal_Bool mbIsEmpty;
1057 : : sal_Bool mbIsNativeGraphicPossible;
1058 : :
1059 : : public:
1060 : :
1061 : : EscherBlibEntry(
1062 : : sal_uInt32 nPictureOffset,
1063 : : const GraphicObject& rObj,
1064 : : const rtl::OString& rId,
1065 : : const GraphicAttr* pAttr = NULL
1066 : : );
1067 : :
1068 : : ~EscherBlibEntry();
1069 : :
1070 : : void WriteBlibEntry( SvStream& rSt, sal_Bool bWritePictureOffset, sal_uInt32 nResize = 0 );
1071 : 6 : sal_Bool IsEmpty() const { return mbIsEmpty; };
1072 : :
1073 : : sal_Bool operator==( const EscherBlibEntry& ) const;
1074 : : };
1075 : :
1076 : : // ---------------------------------------------------------------------------------------------
1077 : :
1078 : : #define _E_GRAPH_PROV_USE_INSTANCES 1
1079 : : #define _E_GRAPH_PROV_DO_NOT_ROTATE_METAFILES 2
1080 : :
1081 : : class MSFILTER_DLLPUBLIC EscherGraphicProvider
1082 : : {
1083 : : sal_uInt32 mnFlags;
1084 : :
1085 : : EscherBlibEntry** mpBlibEntrys;
1086 : : sal_uInt32 mnBlibBufSize;
1087 : : sal_uInt32 mnBlibEntrys;
1088 : :
1089 : : rtl::OUString maBaseURI;
1090 : :
1091 : : protected:
1092 : :
1093 : : sal_uInt32 ImplInsertBlib( EscherBlibEntry* p_EscherBlibEntry );
1094 : :
1095 : : public:
1096 : :
1097 : : sal_uInt32 GetBlibStoreContainerSize( SvStream* pMergePicStreamBSE = NULL ) const;
1098 : : void WriteBlibStoreContainer( SvStream& rStrm, SvStream* pMergePicStreamBSE = NULL );
1099 : : sal_Bool WriteBlibStoreEntry(SvStream& rStrm, sal_uInt32 nBlipId,
1100 : : sal_Bool bWritePictureOffset, sal_uInt32 nResize = 0);
1101 : : sal_uInt32 GetBlibID(
1102 : : SvStream& rPicOutStream,
1103 : : const rtl::OString& rGraphicId,
1104 : : const Rectangle& rBoundRect,
1105 : : const com::sun::star::awt::Rectangle* pVisArea = NULL,
1106 : : const GraphicAttr* pGrafikAttr = NULL
1107 : : );
1108 : 6 : sal_Bool HasGraphics() const { return mnBlibEntrys != 0; };
1109 : :
1110 : : void SetNewBlipStreamOffset( sal_Int32 nOffset );
1111 : :
1112 : : sal_Bool GetPrefSize( const sal_uInt32 nBlibId, Size& rSize, MapMode& rMapMode );
1113 : :
1114 : 0 : void SetBaseURI( const rtl::OUString& rBaseURI ) { maBaseURI = rBaseURI; };
1115 : 0 : const rtl::OUString& GetBaseURI() { return maBaseURI; };
1116 : :
1117 : : EscherGraphicProvider( sal_uInt32 nFlags = _E_GRAPH_PROV_DO_NOT_ROTATE_METAFILES );
1118 : : ~EscherGraphicProvider();
1119 : :
1120 : : };
1121 : :
1122 : : struct EscherShapeListEntry;
1123 : : typedef ::std::vector< EscherShapeListEntry* > EscherShapeList_impl;
1124 : : typedef ::std::vector< EscherConnectorListEntry* > EscherConnectorList_impl;
1125 : :
1126 : : class MSFILTER_DLLPUBLIC EscherSolverContainer
1127 : : {
1128 : : EscherShapeList_impl maShapeList;
1129 : : EscherConnectorList_impl maConnectorList;
1130 : :
1131 : : public:
1132 : :
1133 : : sal_uInt32 GetShapeId(
1134 : : const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rShape
1135 : : ) const;
1136 : :
1137 : : void AddShape(
1138 : : const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > &,
1139 : : sal_uInt32 nId
1140 : : );
1141 : :
1142 : : void AddConnector(
1143 : : const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > &,
1144 : : const ::com::sun::star::awt::Point& rA,
1145 : : ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > &,
1146 : : const ::com::sun::star::awt::Point& rB,
1147 : : ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rConB
1148 : : );
1149 : :
1150 : : void WriteSolver( SvStream& );
1151 : :
1152 [ + - ]: 3 : EscherSolverContainer(){};
1153 : : ~EscherSolverContainer();
1154 : : };
1155 : :
1156 : : // ---------------------------------------------------------------------------------------------
1157 : :
1158 : : #define ESCHER_CREATEPOLYGON_LINE 1
1159 : : #define ESCHER_CREATEPOLYGON_POLYLINE 2
1160 : : #define ESCHER_CREATEPOLYGON_POLYPOLYGON 4
1161 : :
1162 : : class GraphicAttr;
1163 : : class SdrObjCustomShape;
1164 : :
1165 : : struct EscherPropSortStruct
1166 : : {
1167 : : sal_uInt8* pBuf;
1168 : : sal_uInt32 nPropSize;
1169 : : sal_uInt32 nPropValue;
1170 : : sal_uInt16 nPropId;
1171 : : };
1172 : :
1173 : : typedef std::vector< EscherPropSortStruct > EscherProperties;
1174 : :
1175 : : class MSFILTER_DLLPUBLIC EscherPropertyContainer
1176 : : {
1177 : : EscherGraphicProvider* pGraphicProvider;
1178 : : SvStream* pPicOutStrm;
1179 : : Rectangle* pShapeBoundRect;
1180 : :
1181 : : EscherPropSortStruct* pSortStruct;
1182 : :
1183 : : sal_uInt32 nSortCount;
1184 : : sal_uInt32 nSortBufSize;
1185 : : sal_uInt32 nCountCount;
1186 : : sal_uInt32 nCountSize;
1187 : :
1188 : : sal_Bool bHasComplexData;
1189 : : sal_Bool bSuppressRotation;
1190 : :
1191 : :
1192 : : sal_uInt32 ImplGetColor( const sal_uInt32 rColor, sal_Bool bSwap = sal_True );
1193 : : void ImplCreateGraphicAttributes(
1194 : : const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSet,
1195 : : sal_uInt32 nBlibId,
1196 : : sal_Bool bCreateCroppingAttributes
1197 : : );
1198 : : sal_Bool ImplCreateEmbeddedBmp( const rtl::OString& rUniqueId );
1199 : : void ImplInit();
1200 : :
1201 : : public:
1202 : :
1203 : : EscherPropertyContainer();
1204 : : EscherPropertyContainer(
1205 : : EscherGraphicProvider& rGraphicProvider, // the PropertyContainer needs to know
1206 : : SvStream* pPicOutStrm, // the GraphicProvider to be able to write
1207 : : Rectangle& rShapeBoundRect // FillBitmaps or GraphicObjects.
1208 : : ); // under some circumstances the ShapeBoundRect
1209 : : // is adjusted this will happen when rotated
1210 : : // GraphicObjects are saved to PowerPoint
1211 : : ~EscherPropertyContainer();
1212 : :
1213 : : void AddOpt( sal_uInt16 nPropertyID, const rtl::OUString& rString );
1214 : :
1215 : : void AddOpt(
1216 : : sal_uInt16 nPropertyID,
1217 : : sal_uInt32 nPropValue,
1218 : : sal_Bool bBlib = sal_False
1219 : : );
1220 : :
1221 : : void AddOpt(
1222 : : sal_uInt16 nPropertyID,
1223 : : sal_Bool bBlib,
1224 : : sal_uInt32 nPropValue,
1225 : : sal_uInt8* pProp,
1226 : : sal_uInt32 nPropSize
1227 : : );
1228 : :
1229 : : sal_Bool GetOpt( sal_uInt16 nPropertyID, sal_uInt32& rPropValue ) const;
1230 : :
1231 : : sal_Bool GetOpt( sal_uInt16 nPropertyID, EscherPropSortStruct& rPropValue ) const;
1232 : :
1233 : : EscherProperties GetOpts() const;
1234 : :
1235 : : void Commit( SvStream& rSt, sal_uInt16 nVersion = 3, sal_uInt16 nRecType = ESCHER_OPT );
1236 : :
1237 : : sal_Bool CreateShapeProperties(
1238 : : const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rXShape
1239 : : );
1240 : : sal_Bool CreateOLEGraphicProperties(
1241 : : const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rXOleObject
1242 : : );
1243 : :
1244 : : /** Creates a complex ESCHER_Prop_fillBlip containing the BLIP directly (for Excel charts). */
1245 : : sal_Bool CreateEmbeddedBitmapProperties(
1246 : : const ::rtl::OUString& rBitmapUrl,
1247 : : ::com::sun::star::drawing::BitmapMode eBitmapMode
1248 : : );
1249 : : /** Creates a complex ESCHER_Prop_fillBlip containing a hatch style (for Excel charts). */
1250 : : sal_Bool CreateEmbeddedHatchProperties(
1251 : : const ::com::sun::star::drawing::Hatch& rHatch,
1252 : : const Color& rBackColor,
1253 : : bool bFillBackground
1254 : : );
1255 : :
1256 : : // the GraphicProperties will only be created if a GraphicProvider and PicOutStrm is known
1257 : : // DR: #99897# if no GraphicProvider is present, a complex ESCHER_Prop_fillBlip
1258 : : // will be created, containing the BLIP directly (e.g. for Excel charts).
1259 : : sal_Bool CreateGraphicProperties(
1260 : : const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSet,
1261 : : const String& rSource,
1262 : : const sal_Bool bCreateFillBitmap,
1263 : : const sal_Bool bCreateCroppingAttributes = sal_False,
1264 : : const sal_Bool bFillBitmapModeAllowed = sal_True
1265 : : );
1266 : :
1267 : : sal_Bool CreatePolygonProperties(
1268 : : const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSet,
1269 : : sal_uInt32 nFlags,
1270 : : sal_Bool bBezier,
1271 : : ::com::sun::star::awt::Rectangle& rGeoRect,
1272 : : Polygon* pPolygon = NULL
1273 : : );
1274 : :
1275 : : static sal_uInt32 GetGradientColor(
1276 : : const ::com::sun::star::awt::Gradient* pGradient,
1277 : : sal_uInt32 nStartColor
1278 : : );
1279 : :
1280 : : void CreateGradientProperties( const ::com::sun::star::awt::Gradient & rGradient );
1281 : : void CreateGradientProperties(
1282 : : const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > &
1283 : : );
1284 : : void CreateLineProperties(
1285 : : const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > &,
1286 : : sal_Bool bEdge
1287 : : );
1288 : : void CreateFillProperties( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > &, sal_Bool bEdge );
1289 : : void CreateTextProperties(
1290 : : const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > &,
1291 : : sal_uInt32 nText,
1292 : : const sal_Bool bIsCustomShape = sal_False,
1293 : : const sal_Bool bIsTextFrame = sal_True
1294 : : );
1295 : :
1296 : : sal_Bool CreateConnectorProperties(
1297 : : const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rXShape,
1298 : : EscherSolverContainer& rSolver,
1299 : : ::com::sun::star::awt::Rectangle& rGeoRect,
1300 : : sal_uInt16& rShapeType,
1301 : : sal_uInt16& rShapeFlags
1302 : : );
1303 : :
1304 : : // Because shadow properties depends to the line and fillstyle, the CreateShadowProperties method should be called at last.
1305 : : // It activ only when at least a FillStyle or LineStyle is set.
1306 : : sal_Bool CreateShadowProperties(
1307 : : const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > &
1308 : : );
1309 : :
1310 : : // creates all necessary CustomShape properties, this includes also Text-, Shadow-, Fill-, and LineProperties
1311 : : void CreateCustomShapeProperties(
1312 : : const MSO_SPT eShapeType,
1313 : : const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > &
1314 : : );
1315 : : sal_Bool IsFontWork() const;
1316 : :
1317 : : // helper functions which are also used by the escher import
1318 : : static PolyPolygon GetPolyPolygon(
1319 : : const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rXShape
1320 : : );
1321 : : static PolyPolygon GetPolyPolygon( const ::com::sun::star::uno::Any& rSource );
1322 : : static MSO_SPT GetCustomShapeType(
1323 : : const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rXShape,
1324 : : sal_uInt32& nMirrorFlags
1325 : : );
1326 : : static MSO_SPT GetCustomShapeType(
1327 : : const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rXShape,
1328 : : sal_uInt32& nMirrorFlags,
1329 : : rtl::OUString& rShapeType
1330 : : );
1331 : :
1332 : : // helper functions which are also used in ooxml export
1333 : : static sal_Bool GetLineArrow(
1334 : : const sal_Bool bLineStart,
1335 : : const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSet,
1336 : : ESCHER_LineEnd& reLineEnd,
1337 : : sal_Int32& rnArrowLength,
1338 : : sal_Int32& rnArrowWidth
1339 : : );
1340 : : static sal_Bool IsDefaultObject( SdrObjCustomShape* pCustoShape );
1341 : : static void LookForPolarHandles(
1342 : : const MSO_SPT eShapeType,
1343 : : sal_Int32& nAdjustmentsWhichNeedsToBeConverted
1344 : : );
1345 : : static sal_Bool GetAdjustmentValue( const com::sun::star::drawing::EnhancedCustomShapeAdjustmentValue & rkProp, sal_Int32 nIndex, sal_Int32 nAdjustmentsWhichNeedsToBeConverted, sal_Int32& nValue );
1346 : : };
1347 : :
1348 : : // ---------------------------------------------------------------------------------------------
1349 : :
1350 : : typedef ::std::vector< EscherPersistEntry* > EscherPersistTable_impl;
1351 : :
1352 : : class MSFILTER_DLLPUBLIC EscherPersistTable
1353 : : {
1354 : :
1355 : : public:
1356 : : EscherPersistTable_impl maPersistTable;
1357 : :
1358 : : sal_Bool PtIsID( sal_uInt32 nID );
1359 : : void PtInsert( sal_uInt32 nID, sal_uInt32 nOfs );
1360 : : sal_uInt32 PtDelete( sal_uInt32 nID );
1361 : : sal_uInt32 PtGetOffsetByID( sal_uInt32 nID );
1362 : : sal_uInt32 PtReplace( sal_uInt32 nID, sal_uInt32 nOfs );
1363 : : sal_uInt32 PtReplaceOrInsert( sal_uInt32 nID, sal_uInt32 nOfs );
1364 : : sal_uInt32 PtGetCount() const { return maPersistTable.size(); };
1365 : :
1366 : : EscherPersistTable();
1367 : : virtual ~EscherPersistTable();
1368 : : };
1369 : :
1370 : : // ---------------------------------------------------------------------------------------------
1371 : :
1372 : : class EscherEx;
1373 : :
1374 : : /// abstract base class for ESCHER_ClientTextbox, ESCHER_ClientData
1375 : : class MSFILTER_DLLPUBLIC EscherExClientRecord_Base
1376 : : {
1377 : : public:
1378 : 6 : EscherExClientRecord_Base() {}
1379 : : virtual ~EscherExClientRecord_Base();
1380 : :
1381 : : /// Application writes the record header
1382 : : /// using rEx.AddAtom(...) followed by
1383 : : /// record data written to rEx.GetStream()
1384 : : virtual void WriteData( EscherEx& rEx ) const = 0;
1385 : : };
1386 : :
1387 : :
1388 : : /// abstract base class for ESCHER_ClientAnchor
1389 : : class MSFILTER_DLLPUBLIC EscherExClientAnchor_Base
1390 : : {
1391 : : public:
1392 : 0 : EscherExClientAnchor_Base() {}
1393 : : virtual ~EscherExClientAnchor_Base();
1394 : :
1395 : : /// Application writes the record header
1396 : : /// using rEx.AddAtom(...) followed by
1397 : : /// record data written to rEx.GetStream()
1398 : : virtual void WriteData( EscherEx& rEx,
1399 : : const Rectangle& rRect ) = 0;
1400 : : };
1401 : :
1402 : 0 : class InteractionInfo
1403 : : {
1404 : : bool mbHasInteraction;
1405 : : SAL_WNODEPRECATED_DECLARATIONS_PUSH
1406 : : std::auto_ptr<SvMemoryStream> mpHyperlinkRecord;
1407 : : SAL_WNODEPRECATED_DECLARATIONS_POP
1408 : : InteractionInfo();
1409 : :
1410 : : public:
1411 : 0 : InteractionInfo( SvMemoryStream* pStream, bool bInteraction ) : mbHasInteraction( bInteraction )
1412 : : {
1413 : 0 : mpHyperlinkRecord.reset( pStream );
1414 : 0 : }
1415 : 0 : bool hasInteraction() { return mbHasInteraction; }
1416 : : SAL_WNODEPRECATED_DECLARATIONS_PUSH
1417 : 0 : const std::auto_ptr< SvMemoryStream >& getHyperlinkRecord() { return mpHyperlinkRecord; }
1418 : : SAL_WNODEPRECATED_DECLARATIONS_POP
1419 : : };
1420 : :
1421 : : class EscherExHostAppData
1422 : : {
1423 : : private:
1424 : : EscherExClientAnchor_Base* pClientAnchor;
1425 : : EscherExClientRecord_Base* pClientData;
1426 : : EscherExClientRecord_Base* pClientTextbox;
1427 : : InteractionInfo* pInteractionInfo;
1428 : : // ignore single shape if entire pages are written
1429 : : sal_Bool bDontWriteShape;
1430 : :
1431 : : public:
1432 : 6 : EscherExHostAppData() : pClientAnchor(0), pClientData(0),
1433 : 6 : pClientTextbox(0), pInteractionInfo(0), bDontWriteShape(sal_False)
1434 : 6 : {}
1435 : :
1436 : 0 : void SetInteractionInfo( InteractionInfo* p )
1437 : 0 : { pInteractionInfo = p; }
1438 : 0 : void SetClientAnchor( EscherExClientAnchor_Base* p )
1439 : 0 : { pClientAnchor = p; }
1440 : 6 : void SetClientData( EscherExClientRecord_Base* p )
1441 : 6 : { pClientData = p; }
1442 : 0 : void SetClientTextbox( EscherExClientRecord_Base* p )
1443 : 0 : { pClientTextbox = p; }
1444 : 0 : void SetDontWriteShape( sal_Bool b )
1445 : 0 : { bDontWriteShape = b; }
1446 : 0 : InteractionInfo* GetInteractionInfo() const
1447 : 0 : { return pInteractionInfo; }
1448 : 0 : EscherExClientAnchor_Base* GetClientAnchor() const
1449 : 0 : { return pClientAnchor; }
1450 : : EscherExClientRecord_Base* GetClientData() const
1451 : : { return pClientData; }
1452 : 0 : EscherExClientRecord_Base* GetClientTextbox() const
1453 : 0 : { return pClientTextbox; }
1454 : :
1455 : 0 : void WriteClientAnchor( EscherEx& rEx, const Rectangle& rRect )
1456 [ # # ]: 0 : { if( pClientAnchor ) pClientAnchor->WriteData( rEx, rRect ); }
1457 : 0 : void WriteClientData( EscherEx& rEx )
1458 [ # # ]: 0 : { if( pClientData ) pClientData->WriteData( rEx ); }
1459 : 0 : void WriteClientTextbox( EscherEx& rEx )
1460 [ # # ]: 0 : { if( pClientTextbox ) pClientTextbox->WriteData( rEx ); }
1461 : :
1462 : 0 : sal_Bool DontWriteShape() const { return bDontWriteShape; }
1463 : : };
1464 : :
1465 : :
1466 : : // ============================================================================
1467 : :
1468 : : /** Instance for global DFF data, shared through various instances of EscherEx. */
1469 : : class MSFILTER_DLLPUBLIC EscherExGlobal : public EscherGraphicProvider
1470 : : {
1471 : : public:
1472 : : explicit EscherExGlobal( sal_uInt32 nGraphicProvFlags = _E_GRAPH_PROV_DO_NOT_ROTATE_METAFILES );
1473 : : virtual ~EscherExGlobal();
1474 : :
1475 : : /** Returns a new drawing ID for a new drawing container (DGCONTAINER). */
1476 : : sal_uInt32 GenerateDrawingId();
1477 : : /** Creates and returns a new shape identifier, updates the internal shape
1478 : : counters and registers the identifier in the DGG cluster table.
1479 : : @param nDrawingId Drawing identifier has to be passed to be able to
1480 : : generate shape identifiers for multiple drawings simultaniously. */
1481 : : sal_uInt32 GenerateShapeId( sal_uInt32 nDrawingId, bool bIsInSpgr );
1482 : : /** Returns the number of shapes in the current drawing, based on number of
1483 : : calls to the GenerateShapeId() function. */
1484 : : sal_uInt32 GetDrawingShapeCount( sal_uInt32 nDrawingId ) const;
1485 : : /** Returns the last shape identifier generated by the GenerateShapeId()
1486 : : function. */
1487 : : sal_uInt32 GetLastShapeId( sal_uInt32 nDrawingId ) const;
1488 : :
1489 : : /** Sets the flag indicating that the DGGCONTAINER exists. */
1490 : 6 : inline void SetDggContainer() { mbHasDggCont = true; }
1491 : : /** Sets the flag indicating that the DGGCONTAINER exists. */
1492 : 15 : inline bool HasDggContainer() const { return mbHasDggCont; }
1493 : : /** Returns the total size of the DGG atom (including header). */
1494 : : sal_uInt32 GetDggAtomSize() const;
1495 : : /** Writes the complete DGG atom to the passed stream (overwrites existing data!). */
1496 : : void WriteDggAtom( SvStream& rStrm ) const;
1497 : :
1498 : : /** Called if a picture shall be written and no picture stream is set at
1499 : : class ImplEscherExSdr.
1500 : :
1501 : : On first invokation, this function calls the virtual member function
1502 : : ImplQueryPictureStream(). The return value will be cached internally
1503 : : for subsequent calls and for the GetPictureStream() function.
1504 : : */
1505 : : SvStream* QueryPictureStream();
1506 : :
1507 : : /** Returns the picture stream if existing (queried), otherwise null. */
1508 : 6 : inline SvStream* GetPictureStream() { return mpPicStrm; }
1509 : :
1510 : : private:
1511 : : /** Derived classes may implement to create a new stream used to store the
1512 : : picture data.
1513 : :
1514 : : The implementation has to take care about lifetime of the returned
1515 : : stream (it will not be destructed automatically). This function is
1516 : : called exactly once. The return value will be cached internally for
1517 : : repeated calls of the public QueryPictureStream() function.
1518 : : */
1519 : : virtual SvStream* ImplQueryPictureStream();
1520 : :
1521 : : private:
1522 : : struct ClusterEntry
1523 : : {
1524 : : sal_uInt32 mnDrawingId; /// Identifier of drawing this cluster belongs to (one-based index into maDrawingInfos).
1525 : : sal_uInt32 mnNextShapeId; /// Next free shape identifier in this cluster.
1526 : 9 : inline explicit ClusterEntry( sal_uInt32 nDrawingId ) : mnDrawingId( nDrawingId ), mnNextShapeId( 0 ) {}
1527 : : };
1528 : : typedef ::std::vector< ClusterEntry > ClusterTable;
1529 : :
1530 : : struct DrawingInfo
1531 : : {
1532 : : sal_uInt32 mnClusterId; /// Currently used cluster (one-based index into maClusterTable).
1533 : : sal_uInt32 mnShapeCount; /// Current number of shapes in this drawing.
1534 : : sal_uInt32 mnLastShapeId; /// Last shape identifier generated for this drawing.
1535 : 9 : inline explicit DrawingInfo( sal_uInt32 nClusterId ) : mnClusterId( nClusterId ), mnShapeCount( 0 ), mnLastShapeId( 0 ) {}
1536 : : };
1537 : : typedef ::std::vector< DrawingInfo > DrawingInfoVector;
1538 : :
1539 : : ClusterTable maClusterTable; /// List with cluster IDs (used object IDs in drawings).
1540 : : DrawingInfoVector maDrawingInfos; /// Data about all used drawings.
1541 : : SvStream* mpPicStrm; /// Cached result of ImplQueryPictureStream().
1542 : : bool mbHasDggCont; /// True = the DGGCONTAINER has been initialized.
1543 : : bool mbPicStrmQueried; /// True = ImplQueryPictureStream() has been called.
1544 : : };
1545 : :
1546 : : typedef ::boost::shared_ptr< EscherExGlobal > EscherExGlobalRef;
1547 : :
1548 : : // ---------------------------------------------------------------------------------------------
1549 : :
1550 : : class SdrObject;
1551 : : class SdrPage;
1552 : : class ImplEscherExSdr;
1553 : :
1554 : : class MSFILTER_DLLPUBLIC EscherEx : public EscherPersistTable
1555 : : {
1556 : : protected:
1557 : : typedef ::std::auto_ptr< ImplEscherExSdr > ImplEscherExSdrPtr;
1558 : :
1559 : : EscherExGlobalRef mxGlobal;
1560 : : ImplEscherExSdrPtr mpImplEscherExSdr;
1561 : : SvStream* mpOutStrm;
1562 : : bool mbOwnsStrm;
1563 : : sal_uInt32 mnStrmStartOfs;
1564 : : std::vector< sal_uInt32 > mOffsets;
1565 : : std::vector< sal_uInt16 > mRecTypes;
1566 : :
1567 : : sal_uInt32 mnCurrentDg;
1568 : : sal_uInt32 mnCountOfs;
1569 : :
1570 : : sal_uInt32 mnGroupLevel;
1571 : : sal_uInt16 mnHellLayerId;
1572 : :
1573 : : sal_Bool mbEscherSpgr;
1574 : : sal_Bool mbEscherDg;
1575 : : sal_Bool mbOleEmf; // OLE is EMF instead of WMF
1576 : :
1577 : :
1578 : : virtual sal_Bool DoSeek( sal_uInt32 nKey );
1579 : :
1580 : : public:
1581 : : explicit EscherEx( const EscherExGlobalRef& rxGlobal, SvStream* pOutStrm );
1582 : : virtual ~EscherEx();
1583 : :
1584 : : /** Creates and returns a new shape identifier, updates the internal shape
1585 : : counters and registers the identifier in the DGG cluster table. */
1586 : 24 : inline sal_uInt32 GenerateShapeId() { return mxGlobal->GenerateShapeId( mnCurrentDg, mbEscherSpgr ); }
1587 : :
1588 : : /** Returns the graphic provider from the global object that has been
1589 : : passed to the constructor.
1590 : : */
1591 : 3 : inline EscherGraphicProvider& GetGraphicProvider() { return *mxGlobal; }
1592 : :
1593 : : /** Called if a picture shall be written and no picture stream is set at
1594 : : class ImplEscherExSdr.
1595 : : */
1596 : 9 : inline SvStream* QueryPictureStream() { return mxGlobal->QueryPictureStream(); }
1597 : :
1598 : : /// Inserts internal data into the EscherStream, this process
1599 : : /// may and has to be executed only once
1600 : : /// If pPicStreamMergeBSE is known, the BLIPs from this stream are being
1601 : : /// merged into the MsofbtBSE Records of the EscherStream like it's
1602 : : /// required for Excel (and maybe Word?)
1603 : : virtual void Flush( SvStream* pPicStreamMergeBSE = NULL );
1604 : :
1605 : : /** Inserts the passed number of bytes at the current position of the
1606 : : output stream.
1607 : :
1608 : : Inserts dummy bytes and moves all following stream data, and updates
1609 : : all internal stream offsets stored in the PersistTable and the affected
1610 : : container sizes, which makes this operation very expensive. (!)
1611 : :
1612 : : @param nBytes The number of bytes to be inserted into the stream.
1613 : :
1614 : : @param bExpandEndOfAtom If set to true, an atom that currently ends
1615 : : exactly at the current stream position will be expanded to include
1616 : : the inserted data. If set to false, an atom that currently ends
1617 : : exactly at the current stream position will not be expanded to
1618 : : include the inserted data (used to insert e.g. a new atom after an
1619 : : existing atom). Note that containers that end exactly at the
1620 : : current stream position are always expanded to include the inserted
1621 : : data.
1622 : : */
1623 : : void InsertAtCurrentPos( sal_uInt32 nBytes, bool bExpandEndOfAtom );
1624 : :
1625 : : void InsertPersistOffset( sal_uInt32 nKey, sal_uInt32 nOffset ); // It is not being checked if this key is already in the PersistantTable
1626 : : void ReplacePersistOffset( sal_uInt32 nKey, sal_uInt32 nOffset );
1627 : : sal_uInt32 GetPersistOffset( sal_uInt32 nKey );
1628 : : sal_Bool SeekToPersistOffset( sal_uInt32 nKey );
1629 : : virtual sal_Bool InsertAtPersistOffset( sal_uInt32 nKey, sal_uInt32 nValue ); // nValue is being inserted into the Stream where it's appropriate (overwrite modus), without that the
1630 : : // current StreamPosition changes
1631 : :
1632 : 39 : SvStream& GetStream() const { return *mpOutStrm; }
1633 : 0 : sal_uLong GetStreamPos() const { return mpOutStrm->Tell(); }
1634 : :
1635 : : virtual sal_Bool SeekBehindRecHeader( sal_uInt16 nRecType ); // the stream has to be in front of a valid Record Headeror Atom
1636 : :
1637 : : // features during the creation of the following Containers:
1638 : : //
1639 : : // ESCHER_DggContainer: a EscherDgg Atom is automatically being created and managed
1640 : : // ESCHER_DgContainer: a EscherDg Atom is automatically being created and managed
1641 : : // ESCHER_SpgrContainer:
1642 : : // ESCHER_SpContainer:
1643 : :
1644 : : virtual void OpenContainer( sal_uInt16 nEscherContainer, int nRecInstance = 0 );
1645 : : virtual void CloseContainer();
1646 : :
1647 : : virtual void BeginAtom();
1648 : : virtual void EndAtom( sal_uInt16 nRecType, int nRecVersion = 0, int nRecInstance = 0 );
1649 : : virtual void AddAtom( sal_uInt32 nAtomSitze, sal_uInt16 nRecType, int nRecVersion = 0, int nRecInstance = 0 );
1650 : : virtual void AddChildAnchor( const Rectangle& rRectangle );
1651 : : virtual void AddClientAnchor( const Rectangle& rRectangle );
1652 : :
1653 : : virtual sal_uInt32 EnterGroup( const String& rShapeName, const Rectangle* pBoundRect = 0 );
1654 : : sal_uInt32 EnterGroup( const Rectangle* pBoundRect = NULL );
1655 : 30 : sal_uInt32 GetGroupLevel() const { return mnGroupLevel; };
1656 : : virtual sal_Bool SetGroupSnapRect( sal_uInt32 nGroupLevel, const Rectangle& rRect );
1657 : : virtual sal_Bool SetGroupLogicRect( sal_uInt32 nGroupLevel, const Rectangle& rRect );
1658 : : virtual void LeaveGroup();
1659 : :
1660 : : // a ESCHER_Sp is being written ( a ESCHER_DgContainer has to be opened for this purpose!)
1661 : : virtual void AddShape( sal_uInt32 nShpInstance, sal_uInt32 nFlagIds, sal_uInt32 nShapeID = 0 );
1662 : :
1663 : : virtual void Commit( EscherPropertyContainer& rProps, const Rectangle& rRect );
1664 : :
1665 : : sal_uInt32 GetColor( const sal_uInt32 nColor, sal_Bool bSwap = sal_True );
1666 : : sal_uInt32 GetColor( const Color& rColor, sal_Bool bSwap = sal_True );
1667 : :
1668 : : // ...Sdr... implemented in eschesdo.cxx
1669 : :
1670 : : void AddSdrPage( const SdrPage& rPage );
1671 : : void AddUnoShapes( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& rxShapes );
1672 : :
1673 : : /// returns the ShapeID
1674 : : sal_uInt32 AddSdrObject( const SdrObject& rObj );
1675 : :
1676 : : /// If objects are written through AddSdrObject the
1677 : : /// SolverContainer has to be written, and maybe some
1678 : : /// maintenance to be done.
1679 : : void EndSdrObjectPage();
1680 : :
1681 : : /// Called before a shape is written, application supplies
1682 : : /// ClientRecords. May set AppData::bDontWriteShape so the
1683 : : /// shape is ignored.
1684 : : virtual EscherExHostAppData* StartShape(
1685 : : const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& rShape,
1686 : : const Rectangle* pChildAnchor );
1687 : :
1688 : : /// Called after a shape is written to inform the application
1689 : : /// of the resulted shape type and ID.
1690 : : virtual void EndShape( sal_uInt16 nShapeType, sal_uInt32 nShapeID );
1691 : :
1692 : : /// Called before an AdditionalText EnterGroup occurs.
1693 : : /// The current shape will be written in three parts:
1694 : : /// a group shape, the shape itself, and an extra textbox shape.
1695 : : /// The complete flow is:
1696 : : /// StartShape sets HostData1.
1697 : : /// EnterAdditionalTextGroup sets HostData2, App may modify
1698 : : /// HostData1 and keep track of the change.
1699 : : /// The group shape is written with HostData2.
1700 : : /// Another StartShape with the same (!) object sets HostData3.
1701 : : /// The current shape is written with HostData3.
1702 : : /// EndShape is called for the current shape.
1703 : : /// Another StartShape with the same (!) object sets HostData4.
1704 : : /// The textbox shape is written with HostData4.
1705 : : /// EndShape is called for the textbox shape.
1706 : : /// EndShape is called for the group shape, this provides
1707 : : /// the same functionality as an ordinary recursive group.
1708 : : virtual EscherExHostAppData* EnterAdditionalTextGroup();
1709 : :
1710 : : /// Called if an ESCHER_Prop_lTxid shall be written
1711 : : virtual sal_uInt32 QueryTextID( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >&, sal_uInt32 nShapeId );
1712 : : // add an dummy rectangle shape into the escher stream
1713 : : sal_uInt32 AddDummyShape();
1714 : :
1715 : : static const SdrObject* GetSdrObject( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& rXShape );
1716 : :
1717 : 6 : void SetHellLayerId( sal_uInt16 nId ) { mnHellLayerId = nId; }
1718 : 9 : sal_uInt16 GetHellLayerId() const { return mnHellLayerId; }
1719 : :
1720 : : private:
1721 : : EscherEx( const EscherEx& );
1722 : : EscherEx& operator=( const EscherEx& );
1723 : :
1724 : : // prevent C-style cast to former base class EscherGraphicProvider
1725 : : operator EscherGraphicProvider&();
1726 : : operator EscherGraphicProvider const&();
1727 : : };
1728 : :
1729 : :
1730 : : #endif
1731 : :
1732 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|