xref: /AOO41X/main/filter/source/graphicfilter/icgm/class5.cxx (revision 9e0fc027f109ec4ffcb6033aeec742a099701108)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_filter.hxx"
26 //#define VCL_NEED_BASETSD
27 
28 #include <main.hxx>
29 #include <outact.hxx>
30 
31 
32 // ---------------------------------------------------------------
33 
ImplDoClass5()34 void CGM::ImplDoClass5()
35 {
36     switch ( mnElementID )
37     {
38         case 0x01 : ComOut( CGM_LEVEL1, "Line Bundle Index" )
39             pElement->pLineBundle = (LineBundle*)pElement->GetBundleIndex( ImplGetI( pElement->nIndexPrecision ), pElement->aLineList, pElement->aLineBundle );
40         break;
41         case 0x02 : ComOut( CGM_LEVEL1, "Line Type" )
42         {
43             if ( pElement->nAspectSourceFlags & ASF_LINETYPE )
44                 pElement->pLineBundle->eLineType = (LineType)ImplGetI( pElement->nIndexPrecision );
45             else
46                 pElement->aLineBundle.eLineType = (LineType)ImplGetI( pElement->nIndexPrecision );
47         }
48         break;
49         case 0x03 : ComOut( CGM_LEVEL1, "Line Width" )
50         {
51             double nWidth;
52             if ( pElement->eLineWidthSpecMode == SM_ABSOLUTE )
53             {
54                 if ( pElement->eVDCType == VDC_REAL )
55                     nWidth = ImplGetFloat( pElement->eVDCRealPrecision, pElement->nVDCRealSize );
56                 else
57                     nWidth = (double)ImplGetI( pElement->nVDCIntegerPrecision );
58 
59                 ImplMapDouble( nWidth );
60             }
61             else
62                 nWidth = (sal_uInt32)ImplGetFloat( pElement->eRealPrecision, pElement->nRealSize ) * 25; // scaling in 1/4 mm
63 
64             ( pElement->nAspectSourceFlags & ASF_LINEWIDTH )
65                 ? pElement->aLineBundle.nLineWidth = nWidth
66                     : pElement->aLineBundle.nLineWidth = nWidth;
67         }
68         break;
69         case 0x04 : ComOut( CGM_LEVEL1, "Line Color" )
70         {
71             if ( pElement->nAspectSourceFlags & ASF_LINECOLOR )
72                 pElement->pLineBundle->SetColor( ImplGetBitmapColor() );
73             else
74                 pElement->aLineBundle.SetColor( ImplGetBitmapColor() );
75         }
76         break;
77         case 0x05 : ComOut( CGM_LEVEL1, "Marker Bundle Index" )
78             pElement->pMarkerBundle = (MarkerBundle*)pElement->GetBundleIndex( ImplGetI( pElement->nIndexPrecision ), pElement->aMarkerList, pElement->aMarkerBundle );
79         break;
80         case 0x06 : ComOut( CGM_LEVEL1, "Marker Type" )
81         {
82             if ( pElement->nAspectSourceFlags & ASF_MARKERTYPE )
83                 pElement->pMarkerBundle->eMarkerType = (MarkerType)ImplGetI( pElement->nIndexPrecision );
84             else
85                 pElement->aMarkerBundle.eMarkerType = (MarkerType)ImplGetI( pElement->nIndexPrecision );
86         }
87         break;
88         case 0x07 : ComOut( CGM_LEVEL1, "Marker Size" )
89         {
90             double nWidth;
91             if ( pElement->eMarkerSizeSpecMode == SM_ABSOLUTE )
92             {
93                 if ( pElement->eVDCType == VDC_REAL )
94                     nWidth = ImplGetFloat( pElement->eVDCRealPrecision, pElement->nVDCRealSize );
95                 else
96                     nWidth = (double)ImplGetI( pElement->nVDCIntegerPrecision );
97                 ImplMapDouble( nWidth );
98             }
99             else
100                 nWidth = (sal_uInt32)ImplGetFloat( pElement->eRealPrecision, pElement->nRealSize ) * 25;
101             ( pElement->nAspectSourceFlags & ASF_MARKERSIZE )
102                 ? pElement->aMarkerBundle.nMarkerSize = nWidth
103                     : pElement->aMarkerBundle.nMarkerSize = nWidth;
104         }
105         break;
106         case 0x08 : ComOut( CGM_LEVEL1, "Marker Color" )
107         {
108             if ( pElement->nAspectSourceFlags & ASF_MARKERCOLOR )
109                 pElement->pMarkerBundle->SetColor( ImplGetBitmapColor() );
110             else
111                 pElement->aMarkerBundle.SetColor( ImplGetBitmapColor() );
112         }
113         break;
114         case 0x09 : ComOut( CGM_LEVEL1, "Text Bundle Index" )
115             pElement->pTextBundle = (TextBundle*)pElement->GetBundleIndex( ImplGetI( pElement->nIndexPrecision ), pElement->aTextList, pElement->aTextBundle );
116         break;
117         case 0x0a : ComOut( CGM_LEVEL1, "Text Font Index" )
118         {
119             if ( pElement->nAspectSourceFlags & ASF_TEXTFONTINDEX )
120                 pElement->pTextBundle->nTextFontIndex = ImplGetI( pElement->nIndexPrecision );
121             else
122                 pElement->aTextBundle.nTextFontIndex = ImplGetI( pElement->nIndexPrecision );
123         }
124         break;
125         case 0x0b : ComOut( CGM_LEVEL1, "Text Precision" )
126         {
127             TextBundle* pBundle;
128             if ( pElement->nAspectSourceFlags & ASF_TEXTPRECISION )
129                 pBundle = pElement->pTextBundle;
130             else
131                 pBundle = &pElement->aTextBundle;
132             switch( ImplGetUI16() )
133             {
134                 case 0 : pBundle->eTextPrecision = TPR_STRING; break;
135                 case 1 : pBundle->eTextPrecision = TPR_CHARACTER; break;
136                 case 2 : pBundle->eTextPrecision = TPR_STROKE; break;
137                 default : pBundle->eTextPrecision = TPR_UNDEFINED; break;
138             }
139         }
140         break;
141         case 0x0c : ComOut( CGM_LEVEL1, "Character Expansion Factor" )
142         {
143             if ( pElement->nAspectSourceFlags & ASF_CHARACTEREXPANSION )
144                 pElement->pTextBundle->nCharacterExpansion = ImplGetFloat( pElement->eRealPrecision, pElement->nRealSize );
145             else
146                 pElement->aTextBundle.nCharacterExpansion = ImplGetFloat( pElement->eRealPrecision, pElement->nRealSize );
147         }
148         break;
149         case 0x0d : ComOut( CGM_LEVEL1, "Character Spacing" )
150         {
151             if ( pElement->nAspectSourceFlags & ASF_CHARACTERSPACING )
152                 pElement->pTextBundle->nCharacterSpacing = ImplGetFloat( pElement->eRealPrecision, pElement->nRealSize );
153             else
154                 pElement->aTextBundle.nCharacterSpacing = ImplGetFloat( pElement->eRealPrecision, pElement->nRealSize );
155         }
156         break;
157         case 0x0e : ComOut( CGM_LEVEL1, "Text Color" )
158         {
159             if ( pElement->nAspectSourceFlags & ASF_TEXTCOLOR )
160                 pElement->pTextBundle->SetColor( ImplGetBitmapColor() );
161             else
162                 pElement->aTextBundle.SetColor( ImplGetBitmapColor() );
163         }
164         break;
165         case 0x0f : ComOut( CGM_LEVEL1, "Character Height" )
166         {
167                 if ( pElement->eVDCType == VDC_INTEGER )
168                     pElement->nCharacterHeight = ImplGetI( pElement->nVDCIntegerPrecision );
169                 else // ->floating points
170                     pElement->nCharacterHeight = ImplGetFloat( pElement->eVDCRealPrecision, pElement->nVDCRealSize );
171                 ImplMapDouble( pElement->nCharacterHeight );
172                 pElement->nCharacterHeight /= 18.0;
173         }
174         break;
175         case 0x10 : ComOut( CGM_LEVEL1, "Character Orientation" )
176         {
177             if ( pElement->eVDCType == VDC_INTEGER )
178             {
179                 pElement->nCharacterOrientation[0] = ImplGetI( pElement->nVDCIntegerPrecision );
180                 pElement->nCharacterOrientation[1] = ImplGetI( pElement->nVDCIntegerPrecision );
181                 pElement->nCharacterOrientation[2] = ImplGetI( pElement->nVDCIntegerPrecision );
182                 pElement->nCharacterOrientation[3] = ImplGetI( pElement->nVDCIntegerPrecision );
183             }
184             else // ->floating points
185             {
186                 pElement->nCharacterOrientation[0] = ImplGetFloat( pElement->eVDCRealPrecision, pElement->nVDCRealSize );
187                 pElement->nCharacterOrientation[1] = ImplGetFloat( pElement->eVDCRealPrecision, pElement->nVDCRealSize );
188                 pElement->nCharacterOrientation[2] = ImplGetFloat( pElement->eVDCRealPrecision, pElement->nVDCRealSize );
189                 pElement->nCharacterOrientation[3] = ImplGetFloat( pElement->eVDCRealPrecision, pElement->nVDCRealSize );
190             }
191         }
192         break;
193         case 0x11 : ComOut( CGM_LEVEL1, "Text Path" )
194         {
195             switch( ImplGetUI16() )
196             {
197                 case 0 : pElement->eTextPath = TPR_RIGHT; break;
198                 case 1 : pElement->eTextPath = TPR_LEFT; break;
199                 case 2 : pElement->eTextPath = TPR_UP; break;
200                 case 3 : pElement->eTextPath = TPR_DOWN; break;
201                 default : mbStatus = sal_False; break;
202             }
203         }
204         break;
205         case 0x12 : ComOut( CGM_LEVEL1, "Text Alignment" )
206         {
207             pElement->eTextAlignmentH = (TextAlignmentH)ImplGetUI16();
208             pElement->eTextAlignmentV = (TextAlignmentV)ImplGetUI16( 8 );
209             pElement->nTextAlignmentHCont = ImplGetFloat( pElement->eRealPrecision, pElement->nRealSize );
210             pElement->nTextAlignmentVCont = ImplGetFloat( pElement->eRealPrecision, pElement->nRealSize );
211         }
212         break;
213         case 0x13 : ComOut( CGM_LEVEL1 | CGM_DRAWING_PLUS_CONTROL_SET, "Character Set Index" )
214             pElement->nCharacterSetIndex = ImplGetI( pElement->nIndexPrecision );
215         break;
216         case 0x14 : ComOut( CGM_LEVEL1 | CGM_DRAWING_PLUS_CONTROL_SET, "Alternate Character Set Index" )
217             pElement->nAlternateCharacterSetIndex = ImplGetI( pElement->nIndexPrecision );
218         break;
219         case 0x15 : ComOut( CGM_LEVEL1, "Fill Bundle Index" )
220             pElement->pFillBundle = (FillBundle*)pElement->GetBundleIndex( ImplGetI( pElement->nIndexPrecision ), pElement->aFillList, pElement->aFillBundle );
221         break;
222         case 0x16 : ComOut( CGM_LEVEL1, "Fill Interior Style" )
223         {
224             if ( pElement->nAspectSourceFlags & ASF_FILLINTERIORSTYLE )
225                 pElement->pFillBundle->eFillInteriorStyle = (FillInteriorStyle)ImplGetUI16();
226             else
227                 pElement->aFillBundle.eFillInteriorStyle = (FillInteriorStyle)ImplGetUI16();
228         }
229         break;
230         case 0x17 : ComOut( CGM_LEVEL1, "Fill Color" )
231         {
232             if ( pElement->nAspectSourceFlags & ASF_FILLCOLOR )
233                 pElement->pFillBundle->SetColor( ImplGetBitmapColor() );
234             else
235                 pElement->aFillBundle.SetColor( ImplGetBitmapColor() );
236         }
237         break;
238         case 0x18 : ComOut( CGM_LEVEL1, "Fill Hatch Index" )
239         {
240             if ( pElement->nAspectSourceFlags & ASF_HATCHINDEX )
241                 pElement->pFillBundle->nFillHatchIndex = ImplGetI( pElement->nIndexPrecision );
242             else
243                 pElement->aFillBundle.nFillHatchIndex = ImplGetI( pElement->nIndexPrecision );
244         }
245         break;
246         case 0x19 : ComOut( CGM_LEVEL1, "Fill Pattern Index" )
247         {
248             if ( pElement->nAspectSourceFlags & ASF_PATTERNINDEX )
249                 pElement->pFillBundle->nFillPatternIndex = ImplGetI( pElement->nIndexPrecision );
250             else
251                 pElement->aFillBundle.nFillPatternIndex = ImplGetI( pElement->nIndexPrecision );
252         }
253         break;
254         case 0x1a : ComOut( CGM_LEVEL1, "Edge Bundle Index" )
255             pElement->pEdgeBundle = (EdgeBundle*)pElement->GetBundleIndex( ImplGetI( pElement->nIndexPrecision ), pElement->aEdgeList, pElement->aEdgeBundle );
256         break;
257         case 0x1b : ComOut( CGM_LEVEL1, "Edge Type" )
258         {
259             if ( pElement->nAspectSourceFlags & ASF_EDGETYPE )
260                 pElement->pEdgeBundle->eEdgeType = (EdgeType)ImplGetI( pElement->nIndexPrecision );
261             else
262                 pElement->aEdgeBundle.eEdgeType = (EdgeType)ImplGetI( pElement->nIndexPrecision );
263         }
264         break;
265         case 0x1c : ComOut( CGM_LEVEL1, "Edge Width" )
266         {
267             double nWidth;
268             if ( pElement->eEdgeWidthSpecMode == SM_ABSOLUTE )
269             {
270                 if ( pElement->eVDCType == VDC_REAL )
271                     nWidth = ImplGetFloat( pElement->eVDCRealPrecision, pElement->nVDCRealSize );
272                 else
273                     nWidth = (double)ImplGetI( pElement->nVDCIntegerPrecision );
274 
275                 ImplMapDouble( nWidth );
276             }
277             else
278                 nWidth = (sal_uInt32)ImplGetFloat( pElement->eRealPrecision, pElement->nRealSize ) * 25;
279             ( pElement->nAspectSourceFlags & ASF_EDGEWIDTH )
280                 ? pElement->aEdgeBundle.nEdgeWidth = nWidth
281                     : pElement->aEdgeBundle.nEdgeWidth = nWidth;
282         }
283         break;
284         case 0x1d : ComOut( CGM_LEVEL1, "Edge Color" )
285         {
286             if ( pElement->nAspectSourceFlags & ASF_EDGECOLOR )
287                 pElement->pEdgeBundle->SetColor( ImplGetBitmapColor() );
288             else
289                 pElement->aEdgeBundle.SetColor( ImplGetBitmapColor() );
290         }
291         break;
292         case 0x1e : ComOut( CGM_LEVEL1, "Edge Visibility" )
293         {
294             switch( ImplGetUI16() )
295             {
296                 case 0 : pElement->eEdgeVisibility = EV_OFF; break;
297                 case 1 : pElement->eEdgeVisibility = EV_ON; break;
298                 default : mbStatus = sal_False;
299             }
300         }
301         break;
302         case 0x1f : ComOut( CGM_LEVEL1, "Fill Reference Point" )
303             ImplGetPoint( pElement->aFillRefPoint );
304         break;
305         case 0x20 : ComOut( CGM_LEVEL1, "Pattern Table" ) break;
306         case 0x21 : ComOut( CGM_LEVEL1, "Pattern Size" ) break;
307         case 0x22 : ComOut( CGM_LEVEL1, "Color Table" )
308         {
309             sal_uInt32 nColorStartIndex = ImplGetUI( pElement->nColorIndexPrecision );
310             if ( ( nColorStartIndex > 255 ) ||
311                 ( ( ( mnElementSize - pElement->nColorIndexPrecision ) % ( pElement->nColorPrecision * 3 ) ) != 0 ) )
312             {
313                 mbStatus = sal_False;
314             }
315             else
316             {
317                 sal_uInt32 nColors = ( mnElementSize - pElement->nColorIndexPrecision ) / ( 3 * pElement->nColorPrecision );
318                 if ( nColors )
319                 {
320                     sal_uInt32 nMaxColorIndex = nColorStartIndex + nColors - 1;
321                     sal_uInt32 nIndex;
322                     if ( nMaxColorIndex > 255 )
323                     {
324                         mbStatus = sal_False;
325                     }
326                     else
327                     {
328                         if ( pElement->nLatestColorMaximumIndex < nMaxColorIndex )
329                             pElement->nLatestColorMaximumIndex = nMaxColorIndex;
330 
331                         for (  nIndex = nColorStartIndex; nIndex <= nMaxColorIndex; nIndex++ )
332                         {
333                             pElement->aLatestColorTable[ nIndex ] = ImplGetBitmapColor( sal_True );
334                         }
335                     }
336                     pElement->nColorMaximumIndex = pElement->nLatestColorMaximumIndex;
337                     for ( nIndex = nColorStartIndex; nIndex <= nMaxColorIndex; nIndex++ )
338                     {
339                         if ( !pElement->aColorTableEntryIs[ nIndex ] )
340                         {
341                             pElement->aColorTableEntryIs[ nIndex ] = 1;
342                             pElement->aColorTable[ nIndex ] = pElement->aLatestColorTable[ nIndex ];
343                         }
344                     }
345                 }
346             }
347         }
348         break;
349         case 0x23 : ComOut( CGM_LEVEL1, "Aspect Source Flags" )
350         {
351             int nFlags = mnElementSize >> 2;
352             while ( nFlags-- > 0 )
353             {
354                 sal_uInt32 nFlag = 0;
355                 switch( ImplGetUI16() )
356                 {
357                     case 0 : nFlag = ASF_LINETYPE; break;
358                     case 1 : nFlag = ASF_LINEWIDTH; break;
359                     case 2 : nFlag = ASF_LINECOLOR; break;
360                     case 3 : nFlag = ASF_MARKERTYPE; break;
361                     case 4 : nFlag = ASF_MARKERSIZE; break;
362                     case 5 : nFlag = ASF_MARKERCOLOR; break;
363                     case 6 : nFlag = ASF_FILLINTERIORSTYLE; break;
364                     case 7 : nFlag = ASF_HATCHINDEX; break;
365                     case 8 : nFlag = ASF_PATTERNINDEX; break;
366                     case 9 : nFlag = ASF_BITMAPINDEX; break;
367                     case 10 : nFlag = ASF_FILLCOLOR; break;
368                     case 11 : nFlag = ASF_EDGETYPE; break;
369                     case 12 : nFlag = ASF_EDGEWIDTH; break;
370                     case 13 : nFlag = ASF_EDGECOLOR; break;
371                     case 14 : nFlag = ASF_TEXTFONTINDEX; break;
372                     case 15 : nFlag = ASF_TEXTPRECISION; break;
373                     case 16 : nFlag = ASF_CHARACTEREXPANSION; break;
374                     case 17 : nFlag = ASF_CHARACTERSPACING; break;
375                     case 18 : nFlag = ASF_TEXTCOLOR; break;
376                     default : mbStatus = sal_False; break;
377                 }
378                 sal_uInt32  nASF = ImplGetUI16();
379                 switch ( nASF )
380                 {
381                     case 0 : pElement->nAspectSourceFlags &= ~nFlag; break; // INDIVIDUAL
382                     case 1 : pElement->nAspectSourceFlags |= nFlag; break;  // BUNDLED
383                     default : mbStatus = sal_False; break;
384                 }
385             }
386         }
387         break;
388         case 0x24 : ComOut( CGM_LEVEL2, "Pick Identifier" ) break;
389         case 0x25 : ComOut( CGM_LEVEL3, "Line Cap" )
390         {
391             switch( ImplGetUI16() )
392             {
393                 case 0 : pElement->eLineCapType = LCT_BUTT; break;
394                 case 1 : pElement->eLineCapType = LCT_ROUND; break;
395                 case 2 : pElement->eLineCapType = LCT_SQUARE; break;
396                 case 3 : pElement->eLineCapType = LCT_TRIANGLE; break;
397                 case 4 : pElement->eLineCapType = LCT_ARROW; break;
398                 default : pElement->eLineCapType = LCT_NONE; break;
399             }
400         }
401         break;
402         case 0x26 : ComOut( CGM_LEVEL3, "Line Join" )
403         {
404             switch( ImplGetUI16() )
405             {
406                 case 0 : pElement->eLineJoinType = LJT_MITER; break;
407                 case 1 : pElement->eLineJoinType = LJT_ROUND; break;
408                 case 2 : pElement->eLineJoinType = LJT_BEVEL; break;
409                 default : pElement->eLineJoinType = LJT_NONE; break;
410             }
411         }
412         break;
413         case 0x27 : ComOut( CGM_LEVEL3, "Line Type Continuation" ) break;           // NS
414         case 0x28 : ComOut( CGM_LEVEL3, "Line Type Initial Offset" ) break;         // NS
415         case 0x29 : ComOut( CGM_LEVEL3, "Text Score Type" ) break;
416         case 0x2a : ComOut( CGM_LEVEL3, "Restricted Text Type" ) break;
417         case 0x2b : ComOut( CGM_LEVEL3, "Interpolated interior" ) break;
418         case 0x2c : ComOut( CGM_LEVEL3, "Edge Cap" ) break;                         // NS
419         case 0x2d : ComOut( CGM_LEVEL3, "Edge Join" ) break;
420         case 0x2e : ComOut( CGM_LEVEL3, "Edge Type Continuation" ) break;           // NS
421         case 0x2f : ComOut( CGM_LEVEL3, "Edge Type Initial Offset" ) break;         // NS
422         case 0x30 : ComOut( CGM_LEVEL3, "Symbol Library Index" ) break;             // NS
423         case 0x31 : ComOut( CGM_LEVEL3, "Symbol Color" ) break;                     // NS
424         case 0x32 : ComOut( CGM_LEVEL3, "Symbol Size" ) break;                      // NS
425         case 0x33 : ComOut( CGM_LEVEL3, "Symbol Orientation" ) break;               // NS
426         case 0x50 : ComOut( CGM_UNKNOWN_LEVEL, "Block Text Region Margins" ) break;
427         case 0x51 : ComOut( CGM_UNKNOWN_LEVEL, "Block Text Region Expansion" ) break;
428         case 0x52 : ComOut( CGM_UNKNOWN_LEVEL, "Block Text Region Anchor" ) break;
429         case 0x53 : ComOut( CGM_UNKNOWN_LEVEL, "Block Text Paragraph Horizontal Alignment" ) break;
430         case 0x54 : ComOut( CGM_UNKNOWN_LEVEL, "Block Text Paragraph Vertical Alignment" ) break;
431         case 0x55 : ComOut( CGM_UNKNOWN_LEVEL, "Block Text Line Flow" ) break;
432         case 0x60 : ComOut( CGM_UNKNOWN_LEVEL, "Block Text Paragraph Spacing" ) break;
433         case 0x61 : ComOut( CGM_UNKNOWN_LEVEL, "Block Text Paragraph Indent" ) break;
434         case 0x62 : ComOut( CGM_UNKNOWN_LEVEL, "Block Text Paragraph Tabs" ) break;
435         case 0x63 : ComOut( CGM_UNKNOWN_LEVEL, "Block Text Paragraph Bullets" ) break;
436         case 0x64 : ComOut( CGM_UNKNOWN_LEVEL, "Block Text Paragraph Bullet Level" ) break;
437         case 0x65 : ComOut( CGM_UNKNOWN_LEVEL, "Block Text Paragraph Line Horizontal Alignment" ) break;
438         case 0x66 : ComOut( CGM_UNKNOWN_LEVEL, "Block Text Paragraph Line Vertical Alignment" ) break;
439         case 0x67 : ComOut( CGM_UNKNOWN_LEVEL, "Block Text Paragragh Line Spacing" ) break;
440         case 0x68 : ComOut( CGM_UNKNOWN_LEVEL, "Block Text Paragraph Word Wrap" ) break;
441         case 0x70 : ComOut( CGM_UNKNOWN_LEVEL, "Block Text Forward Advance Distance" ) break;
442         case 0x71 : ComOut( CGM_UNKNOWN_LEVEL, "Word Spacing" ) break;
443         case 0x72 : ComOut( CGM_UNKNOWN_LEVEL, "External Leading" ) break;
444         case 0x7a : ComOut( CGM_UNKNOWN_LEVEL, "set Gradient Offset" )
445         {
446             long nHorzOffset = ImplGetI( pElement->nIndexPrecision );
447             long nVertOffset = ImplGetI( pElement->nIndexPrecision );
448             sal_uInt32 nType = ImplGetUI16();
449             mpOutAct->SetGradientOffset( nHorzOffset, nVertOffset, nType );
450             mnAct4PostReset |= ACT4_GRADIENT_ACTION;
451         }
452         break;
453         case 0x7b : ComOut( CGM_UNKNOWN_LEVEL, "set Gradient Edge" )
454         {
455             mnAct4PostReset |= ACT4_GRADIENT_ACTION;
456         }
457         break;
458         case 0x7c : ComOut( CGM_UNKNOWN_LEVEL, "set Gradient Angle" )
459         {
460             mpOutAct->SetGradientAngle( ImplGetI( pElement->nIndexPrecision ) );
461             mnAct4PostReset |= ACT4_GRADIENT_ACTION;
462         }
463         break;
464         case 0x7d : ComOut( CGM_UNKNOWN_LEVEL, "set Gradient Description" )
465         {
466             ImplGetI( pElement->nIndexPrecision ); // -Wall is this needed?
467             sal_uInt32  nNumberOfStages = ImplGetI( pElement->nIndexPrecision );
468             sal_uInt32  i, nColorFrom = 0;
469             sal_uInt32  nColorTo = 0xffffff;
470 
471             //FIXME,  does this loop actually do anything?
472             for ( i = 0; i < nNumberOfStages; i++ )
473             {
474                 ImplGetFloat( pElement->eRealPrecision, pElement->nRealSize ); // -Wall is this needed
475             }
476 
477             for ( i = 0; i <= nNumberOfStages; i++ )
478             {
479                 sal_uInt32 nPara = mnParaSize + 24;
480                 if ( i == 0 )
481                 {
482                     nColorTo = ImplGetBitmapColor();
483                     nColorFrom = nColorTo ^ 0xffffff;
484                 }
485                 else if ( i == 1 )
486                     nColorFrom = ImplGetBitmapColor();
487                 mnParaSize = nPara;
488             }
489             if ( nNumberOfStages > 1 )
490                 mpOutAct->SetGradientStyle( 0xff, 1 );
491 
492             mpOutAct->SetGradientDescriptor( nColorFrom, nColorTo );
493             mnAct4PostReset |= ACT4_GRADIENT_ACTION;
494         }
495         break;
496         case 0x7e : ComOut( CGM_UNKNOWN_LEVEL, "set Gradient Style" )
497         {
498             sal_uInt32 nStyle = ImplGetUI16( 8 );
499             double fRatio = ImplGetFloat( pElement->eRealPrecision, pElement->nRealSize );
500             mpOutAct->SetGradientStyle( nStyle, fRatio );
501             mnAct4PostReset |= ACT4_GRADIENT_ACTION;
502         }
503         break;
504         case 0xff : ComOut( CGM_GDSF_ONLY, "inquire Font metrics" ) break;
505         case 0xfe : ComOut( CGM_GDSF_ONLY, "inquire character widths" ) break;
506         case 0xfd : ComOut( CGM_GDSF_ONLY, "set Text Font" ) break;
507         case 0xfc : ComOut( CGM_GDSF_ONLY, "set current position" ) break;
508         case 0xfb : ComOut( CGM_GDSF_ONLY, "set current position mode" ) break;
509         case 0xfa : ComOut( CGM_GDSF_ONLY, "set character height mode" ) break;
510         case 0xf9 : ComOut( CGM_GDSF_ONLY, "set Transform matrix 2D" ) break;
511         case 0xf8 : ComOut( CGM_GDSF_ONLY, "set Transform matrix 3D" ) break;
512         case 0xf7 : ComOut( CGM_GDSF_ONLY, "pop transformation state" ) break;
513         case 0xf6 : ComOut( CGM_GDSF_ONLY, "clear transformation state" ) break;
514         case 0xf5 : ComOut( CGM_GDSF_ONLY, "set character widths" ) break;
515         case 0xf4 : ComOut( CGM_GDSF_ONLY, "set color name - for Pantone support" ) break;
516         default: ComOut( CGM_UNKNOWN_COMMAND, "" ) break;
517     }
518 };
519 
520 
521