1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_slideshow.hxx"
30 
31 #include <boost/current_function.hpp>
32 #include <basegfx/numeric/ftools.hxx>
33 #include <com/sun/star/animations/TransitionType.hpp>
34 #include <com/sun/star/animations/TransitionSubType.hpp>
35 
36 #include "transitionfactory.hxx"
37 #include "tools.hxx"
38 
39 #include <algorithm>
40 
41 using namespace ::com::sun::star;
42 
43 namespace slideshow {
44 namespace internal {
45 
46 namespace {
47 
48 static const TransitionInfo lcl_transitionInfo[] =
49 {
50     {
51         0,
52         0,
53         TransitionInfo::TRANSITION_INVALID,
54         0.0,
55         0.0,
56         0.0,
57         TransitionInfo::REVERSEMETHOD_IGNORE,
58         false,
59         false
60     },
61     {
62         // mapped to BarWipePolyPolygon:
63         animations::TransitionType::BARWIPE,
64         animations::TransitionSubType::LEFTTORIGHT, // (1)
65         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
66         0.0, // no rotation
67         1.0, // no scaling
68         1.0, // no scaling
69         TransitionInfo::REVERSEMETHOD_FLIP_X,
70         false, // 'out' by subtraction
71         false // scale isotrophically to target size
72     },
73     {
74         // mapped to BarWipePolyPolygon:
75         animations::TransitionType::BARWIPE,
76         animations::TransitionSubType::TOPTOBOTTOM, // (2)
77         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
78         90.0, // rotation
79         1.0, // no scaling
80         1.0, // no scaling
81         TransitionInfo::REVERSEMETHOD_FLIP_Y,
82         false, // 'out' by subtraction
83         false // scale isotrophically to target size
84     },
85 
86     {
87         // mapped to BarWipePolyPolygon(nBars=5):
88         animations::TransitionType::BLINDSWIPE,
89         animations::TransitionSubType::VERTICAL,
90         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
91         0.0, // no rotation
92         1.0, // no scaling
93         1.0, // no scaling
94         TransitionInfo::REVERSEMETHOD_FLIP_Y,
95         true, // 'out' by parameter sweep inversion
96         false // scale isotrophically to target size
97     },
98     {
99         // mapped to BarWipePolyPolygon(nBars=5):
100         animations::TransitionType::BLINDSWIPE,
101         animations::TransitionSubType::HORIZONTAL,
102         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
103         90.0, // rotation
104         1.0, // no scaling
105         1.0, // no scaling
106         TransitionInfo::REVERSEMETHOD_FLIP_X,
107         true, // 'out' by parameter sweep inversion
108         false // scale isotrophically to target size
109     },
110 
111     {
112         // mapped to BoxWipe:
113         animations::TransitionType::BOXWIPE,
114         animations::TransitionSubType::TOPLEFT, // (3)
115         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
116         0.0, // no rotation
117         1.0, // no scaling
118         1.0, // no scaling
119         TransitionInfo::REVERSEMETHOD_IGNORE, // possible via bottomRight
120         true, // 'out' by parameter sweep inversion
121         false // scale isotrophically to target size
122     },
123     {
124         // mapped to BoxWipe:
125         animations::TransitionType::BOXWIPE,
126         animations::TransitionSubType::TOPRIGHT, // (4)
127         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
128         90.0, // rotation
129         1.0, // no scaling
130         1.0, // no scaling
131         TransitionInfo::REVERSEMETHOD_IGNORE, // possible via bottomLeft
132         true, // 'out' by parameter sweep inversion
133         false // scale isotrophically to target size
134     },
135     {
136         // mapped to BoxWipe:
137         animations::TransitionType::BOXWIPE,
138         animations::TransitionSubType::BOTTOMRIGHT, // (5)
139         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
140         180.0, // rotation
141         1.0, // no scaling
142         1.0, // no scaling
143         TransitionInfo::REVERSEMETHOD_IGNORE, // possible via topLeft
144         true, // 'out' by parameter sweep inversion
145         false // scale isotrophically to target size
146     },
147     {
148         // mapped to BoxWipe:
149         animations::TransitionType::BOXWIPE,
150         animations::TransitionSubType::BOTTOMLEFT, // (6)
151         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
152         -90.0, // rotation
153         1.0, // no scaling
154         1.0, // no scaling
155         TransitionInfo::REVERSEMETHOD_IGNORE, // possible via topRight
156         true, // 'out' by parameter sweep inversion
157         false // scale isotrophically to target size
158     },
159     {
160         // mapped to BoxWipe:
161         animations::TransitionType::BOXWIPE,
162         animations::TransitionSubType::TOPCENTER, // (23)
163         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
164         0.0, // no rotation
165         1.0, // no scaling
166         1.0, // no scaling
167         TransitionInfo::REVERSEMETHOD_FLIP_Y,
168         true, // 'out' by parameter sweep inversion
169         false // scale isotrophically to target size
170     },
171     {
172         // mapped to BoxWipe:
173         animations::TransitionType::BOXWIPE,
174         animations::TransitionSubType::RIGHTCENTER, // (24)
175         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
176         90.0, // rotation
177         1.0, // no scaling
178         1.0, // no scaling
179         TransitionInfo::REVERSEMETHOD_FLIP_X,
180         true, // 'out' by parameter sweep inversion
181         false // scale isotrophically to target size
182     },
183     {
184         // mapped to BoxWipe:
185         animations::TransitionType::BOXWIPE,
186         animations::TransitionSubType::BOTTOMCENTER, // (25)
187         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
188         180.0, // rotation
189         1.0, // no scaling
190         1.0, // no scaling
191         TransitionInfo::REVERSEMETHOD_FLIP_Y,
192         true, // 'out' by parameter sweep inversion
193         false // scale isotrophically to target size
194     },
195     {
196         // mapped to BoxWipe:
197         animations::TransitionType::BOXWIPE,
198         animations::TransitionSubType::LEFTCENTER, // (26)
199         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
200         -90.0, // rotation
201         1.0, // no scaling
202         1.0, // no scaling
203         TransitionInfo::REVERSEMETHOD_FLIP_X,
204         true, // 'out' by parameter sweep inversion
205         false // scale isotrophically to target size
206     },
207 
208     {
209         // mapped to FourBoxWipe:
210         animations::TransitionType::FOURBOXWIPE,
211         animations::TransitionSubType::CORNERSIN, // (7)
212         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
213         0.0, // no rotation
214         1.0, // no scaling
215         1.0, // no scaling
216         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
217         true, // 'out' by parameter sweep inversion
218         false // scale isotrophically to target size
219     },
220     {
221         // mapped to FourBoxWipe:
222         animations::TransitionType::FOURBOXWIPE,
223         animations::TransitionSubType::CORNERSOUT, // (8)
224         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
225         0.0, // no rotation
226         1.0, // no scaling
227         1.0, // no scaling
228         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
229         true, // 'out' by parameter sweep inversion
230         false // scale isotrophically to target size
231     },
232 
233     {
234         // mapped to BarnDoorWipe:
235         animations::TransitionType::BARNDOORWIPE,
236         animations::TransitionSubType::VERTICAL, // (21)
237         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
238         0.0, // no rotation
239         1.0, // no scaling
240         1.0, // no scaling
241         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
242         true, // 'out' by parameter sweep inversion
243         false // scale isotrophically to target size
244     },
245     {
246         // mapped to BarnDoorWipe:
247         animations::TransitionType::BARNDOORWIPE,
248         animations::TransitionSubType::HORIZONTAL, // (22)
249         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
250         90.0, // rotation
251         1.0, // no scaling
252         1.0, // no scaling
253         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
254         true, // 'out' by parameter sweep inversion
255         false // scale isotrophically to target size
256     },
257     {
258         // mapped to BarnDoorWipe:
259         animations::TransitionType::BARNDOORWIPE,
260         animations::TransitionSubType::DIAGONALBOTTOMLEFT, // (45)
261         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
262         45.0, // rotation
263         M_SQRT2, // scaling
264         M_SQRT2, // scaling
265         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
266         true, // 'out' by parameter sweep inversion
267         false // scale isotrophically to target size
268     },
269     {
270         // mapped to BarnDoorWipe:
271         animations::TransitionType::BARNDOORWIPE,
272         animations::TransitionSubType::DIAGONALTOPLEFT, // (46)
273         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
274         -45.0, // rotation
275         M_SQRT2, // scaling
276         M_SQRT2, // scaling
277         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
278         true, // 'out' by parameter sweep inversion
279         false // scale isotrophically to target size
280     },
281 
282     {
283         // mapped to BarWipePolyPolygon:
284         animations::TransitionType::DIAGONALWIPE,
285         animations::TransitionSubType::TOPLEFT, // (41)
286         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
287         45.0, // rotation
288         M_SQRT2, // scaling
289         M_SQRT2, // scaling
290         TransitionInfo::REVERSEMETHOD_IGNORE,
291         true, // 'out' by parameter sweep inversion
292         false // scale isotrophically to target size
293     },
294     {
295         // mapped to BarWipePolyPolygon:
296         animations::TransitionType::DIAGONALWIPE,
297         animations::TransitionSubType::TOPRIGHT, // (42)
298         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
299         135.0, // rotation
300         M_SQRT2, // scaling
301         M_SQRT2, // scaling
302         TransitionInfo::REVERSEMETHOD_IGNORE,
303         true, // 'out' by parameter sweep inversion
304         false // scale isotrophically to target size
305     },
306 
307 
308     {
309         animations::TransitionType::BOWTIEWIPE,
310         animations::TransitionSubType::VERTICAL,
311         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
312         // TODO(F2): Setup parameters
313         0.0,                    // no rotation
314         1.0,                    // no scaling
315         1.0,                    // no scaling
316         TransitionInfo::REVERSEMETHOD_IGNORE,
317         true,                   // 'out' by parameter sweep inversion
318         false                   // scale isotrophically to target size
319     },
320     {
321         animations::TransitionType::BOWTIEWIPE,
322         animations::TransitionSubType::HORIZONTAL,
323         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
324         // TODO(F2): Setup parameters
325         0.0,                    // no rotation
326         1.0,                    // no scaling
327         1.0,                    // no scaling
328         TransitionInfo::REVERSEMETHOD_IGNORE,
329         true,                   // 'out' by parameter sweep inversion
330         false                   // scale isotrophically to target size
331     },
332 
333     {
334         // mapped to BarnDoorWipe (doubled=true):
335         animations::TransitionType::MISCDIAGONALWIPE,
336         animations::TransitionSubType::DOUBLEBARNDOOR, // (47)
337         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
338         45.0, // rotation
339         M_SQRT2, // scaling
340         M_SQRT2, // scaling
341         TransitionInfo::REVERSEMETHOD_IGNORE,
342         true, // 'out' by parameter sweep inversion
343         false // scale isotrophically to target size
344     },
345     {
346         // mapped to DoubleDiamondWipe:
347         animations::TransitionType::MISCDIAGONALWIPE,
348         animations::TransitionSubType::DOUBLEDIAMOND, // (48)
349         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
350         0.0, // no rotation
351         1.0, // no scaling
352         1.0, // no scaling
353         TransitionInfo::REVERSEMETHOD_IGNORE,
354         true, // 'out' by parameter sweep inversion
355         false // scale isotrophically to target size
356     },
357 
358     {
359         // mapped to VeeWipe:
360         animations::TransitionType::VEEWIPE,
361         animations::TransitionSubType::DOWN, // (61)
362         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
363         0.0, // no rotation
364         1.0, // no scaling
365         1.0, // no scaling
366         TransitionInfo::REVERSEMETHOD_FLIP_Y,
367         true, // 'out' by parameter sweep inversion
368         false // scale isotrophically to target size
369     },
370     {
371         // mapped to VeeWipe:
372         animations::TransitionType::VEEWIPE,
373         animations::TransitionSubType::LEFT, // (62)
374         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
375         90.0, // rotation
376         1.0, // no scaling
377         1.0, // no scaling
378         TransitionInfo::REVERSEMETHOD_FLIP_X,
379         true, // 'out' by parameter sweep inversion
380         false // scale isotrophically to target size
381     },
382     {
383         animations::TransitionType::VEEWIPE,
384         animations::TransitionSubType::UP, // (63)
385         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
386         180.0, // rotation
387         1.0, // no scaling
388         1.0, // no scaling
389         TransitionInfo::REVERSEMETHOD_FLIP_Y,
390         true, // 'out' by parameter sweep inversion
391         false // scale isotrophically to target size
392     },
393     {
394         animations::TransitionType::VEEWIPE,
395         animations::TransitionSubType::RIGHT,
396         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
397         -90.0, // rotation
398         1.0, // no scaling
399         1.0, // no scaling
400         TransitionInfo::REVERSEMETHOD_FLIP_X,
401         true, // 'out' by parameter sweep inversion
402         false // scale isotrophically to target size
403     },
404 
405 
406     {
407         animations::TransitionType::BARNVEEWIPE,
408         animations::TransitionSubType::TOP,
409         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
410         // TODO(F2): Setup parameters
411         0.0,                    // no rotation
412         1.0,                    // no scaling
413         1.0,                    // no scaling
414         TransitionInfo::REVERSEMETHOD_IGNORE,
415         true,                   // 'out' by parameter sweep inversion
416         false                   // scale isotrophically to target size
417     },
418     {
419         animations::TransitionType::BARNVEEWIPE,
420         animations::TransitionSubType::LEFT,
421         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
422         // TODO(F2): Setup parameters
423         0.0,                    // no rotation
424         1.0,                    // no scaling
425         1.0,                    // no scaling
426         TransitionInfo::REVERSEMETHOD_IGNORE,
427         true,                   // 'out' by parameter sweep inversion
428         false                   // scale isotrophically to target size
429     },
430     {
431         animations::TransitionType::BARNVEEWIPE,
432         animations::TransitionSubType::UP,
433         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
434         // TODO(F2): Setup parameters
435         0.0,                    // no rotation
436         1.0,                    // no scaling
437         1.0,                    // no scaling
438         TransitionInfo::REVERSEMETHOD_IGNORE,
439         true,                   // 'out' by parameter sweep inversion
440         false                   // scale isotrophically to target size
441     },
442     {
443         animations::TransitionType::BARNVEEWIPE,
444         animations::TransitionSubType::RIGHT,
445         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
446         // TODO(F2): Setup parameters
447         0.0,                    // no rotation
448         1.0,                    // no scaling
449         1.0,                    // no scaling
450         TransitionInfo::REVERSEMETHOD_IGNORE,
451         true,                   // 'out' by parameter sweep inversion
452         false                   // scale isotrophically to target size
453     },
454 
455     {
456         // mapped to ZigZagWipe:
457         animations::TransitionType::ZIGZAGWIPE,
458         animations::TransitionSubType::LEFTTORIGHT, // (71)
459         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
460         0.0, // no rotation
461         1.0, // no scaling
462         1.0, // no scaling
463         TransitionInfo::REVERSEMETHOD_FLIP_X,
464         true, // 'out' by parameter sweep inversion
465         false // scale isotrophically to target size
466     },
467     {
468         // mapped to ZigZagWipe:
469         animations::TransitionType::ZIGZAGWIPE,
470         animations::TransitionSubType::TOPTOBOTTOM, // (72)
471         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
472         90.0, // rotation
473         1.0, // no scaling
474         1.0, // no scaling
475         TransitionInfo::REVERSEMETHOD_FLIP_Y,
476         true, // 'out' by parameter sweep inversion
477         false // scale isotrophically to target size
478     },
479     {
480         // mapped to BarnZigZagWipe:
481         animations::TransitionType::BARNZIGZAGWIPE,
482         animations::TransitionSubType::VERTICAL, // (73)
483         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
484         0.0, // no rotation
485         1.0, // no scaling
486         1.0, // no scaling
487         TransitionInfo::REVERSEMETHOD_IGNORE,
488         true, // 'out' by parameter sweep inversion
489         false // scale isotrophically to target size
490     },
491     {
492         // mapped to BarnZigZagWipe:
493         animations::TransitionType::BARNZIGZAGWIPE,
494         animations::TransitionSubType::HORIZONTAL, // (74)
495         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
496         90.0, // rotation
497         1.0, // no scaling
498         1.0, // no scaling
499         TransitionInfo::REVERSEMETHOD_IGNORE,
500         true, // 'out' by parameter sweep inversion
501         false // scale isotrophically to target size
502     },
503 
504     {
505         // mapped to IrisWipe:
506         animations::TransitionType::IRISWIPE,
507         animations::TransitionSubType::RECTANGLE, // (101)
508         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
509         0.0, // no rotation
510         1.0, // no scaling
511         1.0, // no scaling
512         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
513         true, // 'out' by parameter sweep inversion
514         false // scale isotrophically to target size
515     },
516     {
517         // mapped to IrisWipe:
518         animations::TransitionType::IRISWIPE,
519         animations::TransitionSubType::DIAMOND, // (102)
520         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
521         45.0, // rotation
522         M_SQRT2, // scaling
523         M_SQRT2, // scaling
524         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
525         true, // 'out' by parameter sweep inversion
526         false // scale isotrophically to target size
527     },
528 
529 
530     {
531         // mapped to FigureWipe(triangle):
532         animations::TransitionType::TRIANGLEWIPE,
533         animations::TransitionSubType::UP, // (103)
534         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
535         0.0, // no rotation
536         1.0, // no scaling
537         1.0, // no scaling
538         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
539         true, // 'out' by parameter sweep inversion
540         false // scale isotrophically to target size
541     },
542     {
543         // mapped to FigureWipe(triangle):
544         animations::TransitionType::TRIANGLEWIPE,
545         animations::TransitionSubType::RIGHT, // (104)
546         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
547         90.0, // rotation
548         1.0, // no scaling
549         1.0, // no scaling
550         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
551         true, // 'out' by parameter sweep inversion
552         false // scale isotrophically to target size
553     },
554     {
555         // mapped to FigureWipe(triangle):
556         animations::TransitionType::TRIANGLEWIPE,
557         animations::TransitionSubType::DOWN, // (105)
558         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
559         180.0, // rotation
560         1.0, // no scaling
561         1.0, // no scaling
562         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
563         true, // 'out' by parameter sweep inversion
564         false // scale isotrophically to target size
565     },
566     {
567         // mapped to FigureWipe(triangle):
568         animations::TransitionType::TRIANGLEWIPE,
569         animations::TransitionSubType::LEFT, // (106)
570         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
571         270.0, // rotation
572         1.0, // no scaling
573         1.0, // no scaling
574         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
575         true, // 'out' by parameter sweep inversion
576         false // scale isotrophically to target size
577     },
578 
579     {
580         // mapped to FigureWipe(arrowHead):
581         animations::TransitionType::ARROWHEADWIPE,
582         animations::TransitionSubType::UP, // (107)
583         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
584         0.0, // no rotation
585         1.0, // no scaling
586         1.0, // no scaling
587         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
588         true, // 'out' by parameter sweep inversion
589         false // scale isotrophically to target size
590     },
591     {
592         // mapped to FigureWipe(arrowHead):
593         animations::TransitionType::ARROWHEADWIPE,
594         animations::TransitionSubType::RIGHT, // (108)
595         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
596         90.0, // rotation
597         1.0, // no scaling
598         1.0, // no scaling
599         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
600         true, // 'out' by parameter sweep inversion
601         false // scale isotrophically to target size
602     },
603     {
604         // mapped to FigureWipe(arrowHead):
605         animations::TransitionType::ARROWHEADWIPE,
606         animations::TransitionSubType::DOWN, // (109)
607         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
608         180.0, // rotation
609         1.0, // no scaling
610         1.0, // no scaling
611         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
612         true, // 'out' by parameter sweep inversion
613         false // scale isotrophically to target size
614     },
615     {
616         // mapped to FigureWipe(arrowHead):
617         animations::TransitionType::ARROWHEADWIPE,
618         animations::TransitionSubType::LEFT, // (110)
619         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
620         270.0, // rotation
621         1.0, // no scaling
622         1.0, // no scaling
623         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
624         true, // 'out' by parameter sweep inversion
625         false // scale isotrophically to target size
626     },
627 
628     {
629         // mapped to FigureWipe(pentagon):
630         animations::TransitionType::PENTAGONWIPE,
631         animations::TransitionSubType::UP, // (111)
632         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
633         0.0, // no rotation
634         1.0, // no scaling
635         1.0, // no scaling
636         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
637         true, // 'out' by parameter sweep inversion
638         false // scale isotrophically to target size
639     },
640     {
641         // mapped to FigureWipe(pentagon):
642         animations::TransitionType::PENTAGONWIPE,
643         animations::TransitionSubType::DOWN, // (112)
644         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
645         180.0, // rotation
646         1.0, // no scaling
647         1.0, // no scaling
648         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
649         true, // 'out' by parameter sweep inversion
650         false // scale isotrophically to target size
651     },
652 
653     {
654         // mapped to FigureWipe(hexagon):
655         animations::TransitionType::HEXAGONWIPE,
656         animations::TransitionSubType::HORIZONTAL, // (113)
657         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
658         0.0, // no rotation
659         1.0, // no scaling
660         1.0, // no scaling
661         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
662         true, // 'out' by parameter sweep inversion
663         false // scale isotrophically to target size
664     },
665     {
666         // mapped to FigureWipe(hexagon):
667         animations::TransitionType::HEXAGONWIPE,
668         animations::TransitionSubType::VERTICAL, // (114)
669         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
670         90.0, // rotation
671         1.0, // no scaling
672         1.0, // no scaling
673         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
674         true, // 'out' by parameter sweep inversion
675         false // scale isotrophically to target size
676     },
677 
678     {
679         // mapped to EllipseWipe:
680         animations::TransitionType::ELLIPSEWIPE,
681         animations::TransitionSubType::CIRCLE,
682         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
683         0.0, // no rotation
684         1.0, // no scaling
685         1.0, // no scaling
686         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
687         true, // 'out' by parameter sweep inversion
688         true // scale isotrophically to target size
689     },
690     {
691         // mapped to EllipseWipe:
692         animations::TransitionType::ELLIPSEWIPE,
693         animations::TransitionSubType::HORIZONTAL,
694         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
695         0.0, // no rotation
696         1.0, // no scaling
697         1.0, // no scaling
698         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
699         true, // 'out' by parameter sweep inversion
700         false // scale isotrophically to target size
701     },
702     {
703         // mapped to EllipseWipe:
704         animations::TransitionType::ELLIPSEWIPE,
705         animations::TransitionSubType::VERTICAL,
706         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
707         90.0, // rotation
708         1.0, // no scaling
709         1.0, // no scaling
710         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
711         true, // 'out' by parameter sweep inversion
712         false // scale isotrophically to target size
713     },
714 
715 
716     {
717         animations::TransitionType::EYEWIPE,
718         animations::TransitionSubType::HORIZONTAL,
719         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
720         // TODO(F2): Setup parameters
721         0.0,                    // no rotation
722         1.0,                    // no scaling
723         1.0,                    // no scaling
724         TransitionInfo::REVERSEMETHOD_IGNORE,
725         true,                   // 'out' by parameter sweep inversion
726         false                   // scale isotrophically to target size
727     },
728     {
729         animations::TransitionType::EYEWIPE,
730         animations::TransitionSubType::VERTICAL,
731         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
732         // TODO(F2): Setup parameters
733         0.0,                    // no rotation
734         1.0,                    // no scaling
735         1.0,                    // no scaling
736         TransitionInfo::REVERSEMETHOD_IGNORE,
737         true,                   // 'out' by parameter sweep inversion
738         false                   // scale isotrophically to target size
739     },
740     {
741         animations::TransitionType::ROUNDRECTWIPE,
742         animations::TransitionSubType::HORIZONTAL,
743         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
744         // TODO(F2): Setup parameters
745         0.0,                    // no rotation
746         1.0,                    // no scaling
747         1.0,                    // no scaling
748         TransitionInfo::REVERSEMETHOD_IGNORE,
749         true,                   // 'out' by parameter sweep inversion
750         false                   // scale isotrophically to target size
751     },
752     {
753         animations::TransitionType::ROUNDRECTWIPE,
754         animations::TransitionSubType::VERTICAL,
755         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
756         // TODO(F2): Setup parameters
757         0.0,                    // no rotation
758         1.0,                    // no scaling
759         1.0,                    // no scaling
760         TransitionInfo::REVERSEMETHOD_IGNORE,
761         true,                   // 'out' by parameter sweep inversion
762         false                   // scale isotrophically to target size
763     },
764 
765     {
766         // mapped to FigureWipe(star, points=4):
767         animations::TransitionType::STARWIPE,
768         animations::TransitionSubType::FOURPOINT, // (127)
769         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
770         0.0, // no rotation
771         1.0, // no scaling
772         1.0, // no scaling
773         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
774         true, // 'out' by parameter sweep inversion
775         false // scale isotrophically to target size
776     },
777     {
778         // mapped to FigureWipe(star, points=5):
779         animations::TransitionType::STARWIPE,
780         animations::TransitionSubType::FIVEPOINT, // (128)
781         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
782         0.0, // no rotation
783         1.0, // no scaling
784         1.0, // no scaling
785         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
786         true, // 'out' by parameter sweep inversion
787         false // scale isotrophically to target size
788     },
789     {
790         // mapped to FigureWipe(star, points=6):
791         animations::TransitionType::STARWIPE,
792         animations::TransitionSubType::SIXPOINT, // (129)
793         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
794         0.0, // no rotation
795         1.0, // no scaling
796         1.0, // no scaling
797         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
798         true, // 'out' by parameter sweep inversion
799         false // scale isotrophically to target size
800     },
801 
802     {
803         animations::TransitionType::MISCSHAPEWIPE,
804         animations::TransitionSubType::HEART,
805         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
806         // TODO(F2): Setup parameters
807         0.0,                    // no rotation
808         1.0,                    // no scaling
809         1.0,                    // no scaling
810         TransitionInfo::REVERSEMETHOD_IGNORE,
811         true,                   // 'out' by parameter sweep inversion
812         false                   // scale isotrophically to target size
813     },
814     {
815         animations::TransitionType::MISCSHAPEWIPE,
816         animations::TransitionSubType::KEYHOLE,
817         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
818         // TODO(F2): Setup parameters
819         0.0,                    // no rotation
820         1.0,                    // no scaling
821         1.0,                    // no scaling
822         TransitionInfo::REVERSEMETHOD_IGNORE,
823         true,                   // 'out' by parameter sweep inversion
824         false                   // scale isotrophically to target size
825     },
826 
827     {
828         // mapped to ClockWipe:
829         animations::TransitionType::CLOCKWIPE,
830         animations::TransitionSubType::CLOCKWISETWELVE, // (201)
831         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
832         0.0, // no rotation
833         1.0, // no scaling
834         1.0, // no scaling
835         TransitionInfo::REVERSEMETHOD_FLIP_X,
836         true, // 'out' by parameter sweep inversion
837         false // scale isotrophically to target size
838     },
839     {
840         // mapped to ClockWipe:
841         animations::TransitionType::CLOCKWIPE,
842         animations::TransitionSubType::CLOCKWISETHREE, // (202)
843         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
844         90.0, // rotation
845         1.0, // no scaling
846         1.0, // no scaling
847         TransitionInfo::REVERSEMETHOD_ROTATE_180,
848         true, // 'out' by parameter sweep inversion
849         false // scale isotrophically to target size
850     },
851     {
852         // mapped to ClockWipe:
853         animations::TransitionType::CLOCKWIPE,
854         animations::TransitionSubType::CLOCKWISESIX, // (203)
855         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
856         180.0, // rotation
857         1.0, // no scaling
858         1.0, // no scaling
859         TransitionInfo::REVERSEMETHOD_ROTATE_180,
860         true, // 'out' by parameter sweep inversion
861         false // scale isotrophically to target size
862     },
863     {
864         // mapped to ClockWipe:
865         animations::TransitionType::CLOCKWIPE,
866         animations::TransitionSubType::CLOCKWISENINE, // (204)
867         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
868         270.0, // rotation
869         1.0, // no scaling
870         1.0, // no scaling
871         TransitionInfo::REVERSEMETHOD_ROTATE_180,
872         true, // 'out' by parameter sweep inversion
873         false // scale isotrophically to target size
874     },
875 
876     {
877         // mapped to PinWheelWipe:
878         animations::TransitionType::PINWHEELWIPE,
879         animations::TransitionSubType::ONEBLADE,
880         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
881         0.0, // no rotation
882         1.0, // no scaling
883         1.0, // no scaling
884         TransitionInfo::REVERSEMETHOD_FLIP_X,
885         true, // 'out' by parameter sweep inversion
886         true // scale isotrophically to target size, like ppt
887     },
888     {
889         // mapped to PinWheelWipe:
890         animations::TransitionType::PINWHEELWIPE,
891         animations::TransitionSubType::TWOBLADEVERTICAL, // (205)
892         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
893         0.0, // no rotation
894         1.0, // no scaling
895         1.0, // no scaling
896         TransitionInfo::REVERSEMETHOD_FLIP_X,
897         true, // 'out' by parameter sweep inversion
898         true // scale isotrophically to target size, like ppt
899     },
900     {
901         // mapped to PinWheelWipe:
902         animations::TransitionType::PINWHEELWIPE,
903         animations::TransitionSubType::TWOBLADEHORIZONTAL, // (206)
904         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
905         -90.0, // rotation
906         1.0, // no scaling
907         1.0, // no scaling
908         TransitionInfo::REVERSEMETHOD_FLIP_Y,
909         true, // 'out' by parameter sweep inversion
910         true // scale isotrophically to target size, like ppt
911     },
912     {
913         // mapped to PinWheelWipe:
914         animations::TransitionType::PINWHEELWIPE,
915         animations::TransitionSubType::THREEBLADE,
916         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
917         0.0, // no rotation
918         1.0, // no scaling
919         1.0, // no scaling
920         TransitionInfo::REVERSEMETHOD_FLIP_X,
921         true, // 'out' by parameter sweep inversion
922         true // scale isotrophically to target size, like ppt
923     },
924     {
925         // mapped to PinWheelWipe:
926         animations::TransitionType::PINWHEELWIPE,
927         animations::TransitionSubType::FOURBLADE, // (207)
928         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
929         0.0, // no rotation
930         1.0, // no scaling
931         1.0, // no scaling
932         TransitionInfo::REVERSEMETHOD_FLIP_X,
933         true, // 'out' by parameter sweep inversion
934         true // scale isotrophically to target size, like ppt
935     },
936     {
937         // mapped to PinWheelWipe:
938         animations::TransitionType::PINWHEELWIPE,
939         animations::TransitionSubType::EIGHTBLADE,
940         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
941         0.0, // no rotation
942         1.0, // no scaling
943         1.0, // no scaling
944         TransitionInfo::REVERSEMETHOD_FLIP_X,
945         true, // 'out' by parameter sweep inversion
946         true // scale isotrophically to target size, like ppt
947     },
948 
949     {
950         // mapped to SweepWipe (center=true, single=true):
951         animations::TransitionType::SINGLESWEEPWIPE,
952         animations::TransitionSubType::CLOCKWISETOP, // (221)
953         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
954         0.0, // no rotation
955         1.0, // no scaling
956         1.0, // no scaling
957         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
958         true, // 'out' by parameter sweep inversion
959         false // scale isotrophically to target size
960     },
961     {
962         // mapped to SweepWipe (center=true, single=true):
963         animations::TransitionType::SINGLESWEEPWIPE,
964         animations::TransitionSubType::CLOCKWISERIGHT, // (222)
965         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
966         90.0, // rotation
967         1.0, // no scaling
968         1.0, // no scaling
969         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
970         true, // 'out' by parameter sweep inversion
971         false // scale isotrophically to target size
972     },
973     {
974         // mapped to SweepWipe (center=true, single=true):
975         animations::TransitionType::SINGLESWEEPWIPE,
976         animations::TransitionSubType::CLOCKWISEBOTTOM, // (223)
977         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
978         180.0, // rotation
979         1.0, // no scaling
980         1.0, // no scaling
981         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
982         true, // 'out' by parameter sweep inversion
983         false // scale isotrophically to target size
984     },
985     {
986         // mapped to SweepWipe (center=true, single=true):
987         animations::TransitionType::SINGLESWEEPWIPE,
988         animations::TransitionSubType::CLOCKWISELEFT, // (224)
989         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
990         270.0, // rotation
991         1.0, // no scaling
992         1.0, // no scaling
993         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
994         true, // 'out' by parameter sweep inversion
995         false // scale isotrophically to target size
996     },
997     {
998         // mapped to SweepWipe (center=false, single=true):
999         animations::TransitionType::SINGLESWEEPWIPE,
1000         animations::TransitionSubType::CLOCKWISETOPLEFT, // (241)
1001         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1002         0.0, // no rotation
1003         1.0, // no scaling
1004         1.0, // no scaling
1005         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
1006         true, // 'out' by parameter sweep inversion
1007         false // scale isotrophically to target size
1008     },
1009     {
1010         // mapped to SweepWipe (center=false, single=true, flipOnYAxis=true):
1011         animations::TransitionType::SINGLESWEEPWIPE,
1012         animations::TransitionSubType::COUNTERCLOCKWISEBOTTOMLEFT, // (242)
1013         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1014         180.0, // rotation
1015         1.0, // no scaling
1016         1.0, // no scaling
1017         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
1018         true, // 'out' by parameter sweep inversion
1019         false // scale isotrophically to target size
1020     },
1021     {
1022         // mapped to SweepWipe (center=false, single=true):
1023         animations::TransitionType::SINGLESWEEPWIPE,
1024         animations::TransitionSubType::CLOCKWISEBOTTOMRIGHT, // (243)
1025         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1026         180.0, // rotation
1027         1.0, // no scaling
1028         1.0, // no scaling
1029         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
1030         true, // 'out' by parameter sweep inversion
1031         false // scale isotrophically to target size
1032     },
1033     {
1034         // mapped to SweepWipe (center=false, single=true, flipOnYAxis=true):
1035         animations::TransitionType::SINGLESWEEPWIPE,
1036         animations::TransitionSubType::COUNTERCLOCKWISETOPRIGHT, // (244)
1037         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1038         0.0, // no rotation
1039         1.0, // no scaling
1040         1.0, // no scaling
1041         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
1042         true, // 'out' by parameter sweep inversion
1043         false // scale isotrophically to target size
1044     },
1045 
1046     {
1047         // mapped to FanWipe(center=true):
1048         animations::TransitionType::FANWIPE,
1049         animations::TransitionSubType::CENTERTOP, // (211)
1050         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1051         0.0, // no rotation
1052         1.0, // no scaling
1053         1.0, // no scaling
1054         TransitionInfo::REVERSEMETHOD_FLIP_Y,
1055         true, // 'out' by parameter sweep inversion
1056         false // scale isotrophically to target size
1057     },
1058     {
1059         // mapped to FanWipe(center=true):
1060         animations::TransitionType::FANWIPE,
1061         animations::TransitionSubType::CENTERRIGHT, // (212)
1062         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1063         90.0, // rotation
1064         1.0, // no scaling
1065         1.0, // no scaling
1066         TransitionInfo::REVERSEMETHOD_FLIP_X,
1067         true, // 'out' by parameter sweep inversion
1068         false // scale isotrophically to target size
1069     },
1070     {
1071         // mapped to FanWipe:
1072         animations::TransitionType::FANWIPE,
1073         animations::TransitionSubType::TOP, // (231)
1074         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1075         180.0, // rotation
1076         1.0, // no scaling
1077         1.0, // no scaling
1078         TransitionInfo::REVERSEMETHOD_FLIP_Y,
1079         true, // 'out' by parameter sweep inversion
1080         false // scale isotrophically to target size
1081     },
1082     {
1083         // mapped to FanWipe:
1084         animations::TransitionType::FANWIPE,
1085         animations::TransitionSubType::RIGHT, // (232)
1086         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1087         -90.0, // rotation
1088         1.0, // no scaling
1089         1.0, // no scaling
1090         TransitionInfo::REVERSEMETHOD_FLIP_X,
1091         true, // 'out' by parameter sweep inversion
1092         false // scale isotrophically to target size
1093     },
1094     {
1095         // mapped to FanWipe:
1096         animations::TransitionType::FANWIPE,
1097         animations::TransitionSubType::BOTTOM, // (233)
1098         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1099         0.0, // no rotation
1100         1.0, // no scaling
1101         1.0, // no scaling
1102         TransitionInfo::REVERSEMETHOD_FLIP_Y,
1103         true, // 'out' by parameter sweep inversion
1104         false // scale isotrophically to target size
1105     },
1106     {
1107         // mapped to FanWipe:
1108         animations::TransitionType::FANWIPE,
1109         animations::TransitionSubType::LEFT, // (234)
1110         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1111         90.0, // rotation
1112         1.0, // no scaling
1113         1.0, // no scaling
1114         TransitionInfo::REVERSEMETHOD_FLIP_X,
1115         true, // 'out' by parameter sweep inversion
1116         false // scale isotrophically to target size
1117     },
1118 
1119     {
1120         // mapped to FanWipe(center=true, single=false, fanIn=false):
1121         animations::TransitionType::DOUBLEFANWIPE,
1122         animations::TransitionSubType::FANOUTVERTICAL, // (213)
1123         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1124         0.0, // no rotation
1125         1.0, // no scaling
1126         1.0, // no scaling
1127         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
1128         true, // 'out' by parameter sweep inversion
1129         false // scale isotrophically to target size
1130     },
1131     {
1132         // mapped to FanWipe(center=true, single=false, fanIn=false):
1133         animations::TransitionType::DOUBLEFANWIPE,
1134         animations::TransitionSubType::FANOUTHORIZONTAL, // (214)
1135         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1136         90.0, // rotation
1137         1.0, // no scaling
1138         1.0, // no scaling
1139         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
1140         true, // 'out' by parameter sweep inversion
1141         false // scale isotrophically to target size
1142     },
1143     {
1144         // mapped to FanWipe(center=true, single=false, fanIn=true):
1145         animations::TransitionType::DOUBLEFANWIPE,
1146         animations::TransitionSubType::FANINVERTICAL, // (235)
1147         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1148         0.0, // no rotation
1149         1.0, // no scaling
1150         1.0, // no scaling
1151         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
1152         true, // 'out' by parameter sweep inversion
1153         false // scale isotrophically to target size
1154     },
1155     {
1156         // mapped to FanWipe(center=true, single=false, fanIn=true):
1157         animations::TransitionType::DOUBLEFANWIPE,
1158         animations::TransitionSubType::FANINHORIZONTAL, // (236)
1159         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1160         90.0, // rotation
1161         1.0, // no scaling
1162         1.0, // no scaling
1163         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
1164         true, // 'out' by parameter sweep inversion
1165         false // scale isotrophically to target size
1166     },
1167 
1168     {
1169         // mapped to SweepWipe (center=true, single=false):
1170         animations::TransitionType::DOUBLESWEEPWIPE,
1171         animations::TransitionSubType::PARALLELVERTICAL, // (225)
1172         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1173         0.0, // no rotation
1174         1.0, // no scaling
1175         1.0, // no scaling
1176         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
1177         true, // 'out' by parameter sweep inversion
1178         false // scale isotrophically to target size
1179     },
1180     {
1181         // mapped to SweepWipe (center=true, single=false):
1182         animations::TransitionType::DOUBLESWEEPWIPE,
1183         animations::TransitionSubType::PARALLELDIAGONAL, // (226)
1184         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1185         -90.0, // rotation
1186         1.0, // no scaling
1187         1.0, // no scaling
1188         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
1189         true, // 'out' by parameter sweep inversion
1190         false // scale isotrophically to target size
1191     },
1192     {
1193         // mapped to SweepWipe (center=true, single=false,
1194         //                      oppositeVertical=true):
1195         animations::TransitionType::DOUBLESWEEPWIPE,
1196         animations::TransitionSubType::OPPOSITEVERTICAL, // (227)
1197         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1198         0.0, // no rotation
1199         1.0, // no scaling
1200         1.0, // no scaling
1201         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
1202         true, // 'out' by parameter sweep inversion
1203         false // scale isotrophically to target size
1204     },
1205     {
1206         // mapped to SweepWipe (center=true, single=false,
1207         //                      oppositeVertical=true):
1208         animations::TransitionType::DOUBLESWEEPWIPE,
1209         animations::TransitionSubType::OPPOSITEHORIZONTAL,
1210         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1211         -90.0, // rotation
1212         1.0, // no scaling
1213         1.0, // no scaling
1214         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
1215         true, // 'out' by parameter sweep inversion
1216         false // scale isotrophically to target size
1217     },
1218     {
1219         // mapped to SweepWipe (center=false, single=false):
1220         animations::TransitionType::DOUBLESWEEPWIPE,
1221         animations::TransitionSubType::PARALLELDIAGONALTOPLEFT,
1222         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1223         0.0, // no rotation
1224         1.0, // no scaling
1225         1.0, // no scaling
1226         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
1227         true, // 'out' by parameter sweep inversion
1228         false // scale isotrophically to target size
1229     },
1230     {
1231         // mapped to SweepWipe (center=false, single=false):
1232         animations::TransitionType::DOUBLESWEEPWIPE,
1233         animations::TransitionSubType::PARALLELDIAGONALBOTTOMLEFT,
1234         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1235         -90.0, // rotation
1236         1.0, // no scaling
1237         1.0, // no scaling
1238         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
1239         true, // 'out' by parameter sweep inversion
1240         false // scale isotrophically to target size
1241     },
1242 
1243     {
1244         animations::TransitionType::SALOONDOORWIPE,
1245         animations::TransitionSubType::TOP, // (251)
1246         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1247         // TODO(F2): Setup parameters
1248         0.0,                    // no rotation
1249         1.0,                    // no scaling
1250         1.0,                    // no scaling
1251         TransitionInfo::REVERSEMETHOD_FLIP_Y,
1252         true,                   // 'out' by parameter sweep inversion
1253         false                   // scale isotrophically to target size
1254     },
1255     {
1256         animations::TransitionType::SALOONDOORWIPE,
1257         animations::TransitionSubType::LEFT, // (252)
1258         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1259         // TODO(F2): Setup parameters
1260         0.0,                    // no rotation
1261         1.0,                    // no scaling
1262         1.0,                    // no scaling
1263         TransitionInfo::REVERSEMETHOD_FLIP_X,
1264         true,                   // 'out' by parameter sweep inversion
1265         false                   // scale isotrophically to target size
1266     },
1267     {
1268         animations::TransitionType::SALOONDOORWIPE,
1269         animations::TransitionSubType::BOTTOM, // (253)
1270         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1271         // TODO(F2): Setup parameters
1272         0.0,                    // no rotation
1273         1.0,                    // no scaling
1274         1.0,                    // no scaling
1275         TransitionInfo::REVERSEMETHOD_FLIP_Y,
1276         true,                   // 'out' by parameter sweep inversion
1277         false                   // scale isotrophically to target size
1278     },
1279     {
1280         animations::TransitionType::SALOONDOORWIPE,
1281         animations::TransitionSubType::RIGHT, // (254)
1282         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1283         // TODO(F2): Setup parameters
1284         0.0,                    // no rotation
1285         1.0,                    // no scaling
1286         1.0,                    // no scaling
1287         TransitionInfo::REVERSEMETHOD_FLIP_X,
1288         true,                   // 'out' by parameter sweep inversion
1289         false                   // scale isotrophically to target size
1290     },
1291     {
1292         animations::TransitionType::WINDSHIELDWIPE,
1293         animations::TransitionSubType::RIGHT,
1294         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1295         // TODO(F2): Setup parameters
1296         0.0,                    // no rotation
1297         1.0,                    // no scaling
1298         1.0,                    // no scaling
1299         TransitionInfo::REVERSEMETHOD_FLIP_X,
1300         true,                   // 'out' by parameter sweep inversion
1301         false                   // scale isotrophically to target size
1302     },
1303     {
1304         animations::TransitionType::WINDSHIELDWIPE,
1305         animations::TransitionSubType::UP,
1306         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1307         // TODO(F2): Setup parameters
1308         0.0,                    // no rotation
1309         1.0,                    // no scaling
1310         1.0,                    // no scaling
1311         TransitionInfo::REVERSEMETHOD_FLIP_Y,
1312         true,                   // 'out' by parameter sweep inversion
1313         false                   // scale isotrophically to target size
1314     },
1315     {
1316         animations::TransitionType::WINDSHIELDWIPE,
1317         animations::TransitionSubType::VERTICAL,
1318         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1319         // TODO(F2): Setup parameters
1320         0.0,                    // no rotation
1321         1.0,                    // no scaling
1322         1.0,                    // no scaling
1323         TransitionInfo::REVERSEMETHOD_IGNORE,
1324         true,                   // 'out' by parameter sweep inversion
1325         false                   // scale isotrophically to target size
1326     },
1327     {
1328         animations::TransitionType::WINDSHIELDWIPE,
1329         animations::TransitionSubType::HORIZONTAL,
1330         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1331         // TODO(F2): Setup parameters
1332         0.0,                    // no rotation
1333         1.0,                    // no scaling
1334         1.0,                    // no scaling
1335         TransitionInfo::REVERSEMETHOD_IGNORE,
1336         true,                   // 'out' by parameter sweep inversion
1337         false                   // scale isotrophically to target size
1338     },
1339 
1340     {
1341         // mapped to SnakeWipe:
1342         animations::TransitionType::SNAKEWIPE,
1343         animations::TransitionSubType::TOPLEFTHORIZONTAL, // (301)
1344         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1345         0.0, // no rotation
1346         1.0, // no scaling
1347         1.0, // no scaling
1348         TransitionInfo::REVERSEMETHOD_ROTATE_180,
1349         true, // 'out' by parameter sweep inversion
1350         false // scale isotrophically to target size
1351     },
1352     {
1353         // mapped to SnakeWipe(flipOnYAxis=true):
1354         animations::TransitionType::SNAKEWIPE,
1355         animations::TransitionSubType::TOPLEFTVERTICAL, // (302)
1356         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1357         -90.0, // rotation
1358         1.0, // no scaling
1359         1.0, // no scaling
1360         TransitionInfo::REVERSEMETHOD_ROTATE_180,
1361         true, // 'out' by parameter sweep inversion
1362         false // scale isotrophically to target size
1363     },
1364     {
1365         // mapped to SnakeWipe(diagonal=true):
1366         animations::TransitionType::SNAKEWIPE,
1367         animations::TransitionSubType::TOPLEFTDIAGONAL, // (303)
1368         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1369         0.0, // no rotation
1370         1.0, // no scaling
1371         1.0, // no scaling
1372         TransitionInfo::REVERSEMETHOD_ROTATE_180,
1373         true, // 'out' by parameter sweep inversion
1374         false // scale isotrophically to target size
1375     },
1376     {
1377         // mapped to SnakeWipe(diagonal=true, flipOnYAxis=true):
1378         animations::TransitionType::SNAKEWIPE,
1379         animations::TransitionSubType::TOPRIGHTDIAGONAL, // (304)
1380         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1381         0.0, // no rotation
1382         1.0, // no scaling
1383         1.0, // no scaling
1384         TransitionInfo::REVERSEMETHOD_ROTATE_180,
1385         true, // 'out' by parameter sweep inversion
1386         false // scale isotrophically to target size
1387     },
1388     {
1389         // mapped to SnakeWipe(diagonal=true):
1390         animations::TransitionType::SNAKEWIPE,
1391         animations::TransitionSubType::BOTTOMRIGHTDIAGONAL, // (305)
1392         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1393         180.0, // rotation
1394         1.0, // no scaling
1395         1.0, // no scaling
1396         TransitionInfo::REVERSEMETHOD_ROTATE_180,
1397         true, // 'out' by parameter sweep inversion
1398         false // scale isotrophically to target size
1399     },
1400     {
1401         // mapped to SnakeWipe(diagonal=true, flipOnYAxis=true):
1402         animations::TransitionType::SNAKEWIPE,
1403         animations::TransitionSubType::BOTTOMLEFTDIAGONAL, // (306)
1404         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1405         180.0, // rotation
1406         1.0, // no scaling
1407         1.0, // no scaling
1408         TransitionInfo::REVERSEMETHOD_ROTATE_180,
1409         true, // 'out' by parameter sweep inversion
1410         false // scale isotrophically to target size
1411     },
1412 
1413     {
1414         // mapped to SpiralWipe:
1415         animations::TransitionType::SPIRALWIPE,
1416         animations::TransitionSubType::TOPLEFTCLOCKWISE, // (310)
1417         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1418         0.0, // no rotation
1419         1.0, // no scaling
1420         1.0, // no scaling
1421         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
1422         true, // 'out' by parameter sweep inversion
1423         false // scale isotrophically to target size
1424     },
1425     {
1426         // mapped to SpiralWipe:
1427         animations::TransitionType::SPIRALWIPE,
1428         animations::TransitionSubType::TOPRIGHTCLOCKWISE, // (311)
1429         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1430         90.0, // rotation
1431         1.0, // no scaling
1432         1.0, // no scaling
1433         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
1434         true, // 'out' by parameter sweep inversion
1435         false // scale isotrophically to target size
1436     },
1437     {
1438         // mapped to SpiralWipe:
1439         animations::TransitionType::SPIRALWIPE,
1440         animations::TransitionSubType::BOTTOMRIGHTCLOCKWISE, // (312)
1441         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1442         180.0, // rotation
1443         1.0, // no scaling
1444         1.0, // no scaling
1445         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
1446         true, // 'out' by parameter sweep inversion
1447         false // scale isotrophically to target size
1448     },
1449     {
1450         // mapped to SpiralWipe:
1451         animations::TransitionType::SPIRALWIPE,
1452         animations::TransitionSubType::BOTTOMLEFTCLOCKWISE, // (313)
1453         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1454         270.0, // rotation
1455         1.0, // no scaling
1456         1.0, // no scaling
1457         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
1458         true, // 'out' by parameter sweep inversion
1459         false // scale isotrophically to target size
1460     },
1461     {
1462         // mapped to SpiralWipe(flipOnYAxis=true):
1463         animations::TransitionType::SPIRALWIPE,
1464         animations::TransitionSubType::TOPLEFTCOUNTERCLOCKWISE, // (314)
1465         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1466         90.0, // rotation
1467         1.0, // no scaling
1468         1.0, // no scaling
1469         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
1470         true, // 'out' by parameter sweep inversion
1471         false // scale isotrophically to target size
1472     },
1473     {
1474         // mapped to SpiralWipe(flipOnYAxis=true):
1475         animations::TransitionType::SPIRALWIPE,
1476         animations::TransitionSubType::TOPRIGHTCOUNTERCLOCKWISE, // (315)
1477         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1478         180.0, // rotation
1479         1.0, // no scaling
1480         1.0, // no scaling
1481         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
1482         true, // 'out' by parameter sweep inversion
1483         false // scale isotrophically to target size
1484     },
1485     {
1486         // mapped to SpiralWipe(flipOnYAxis=true):
1487         animations::TransitionType::SPIRALWIPE,
1488         animations::TransitionSubType::BOTTOMRIGHTCOUNTERCLOCKWISE, // (316)
1489         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1490         270.0, // rotation
1491         1.0, // no scaling
1492         1.0, // no scaling
1493         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
1494         true, // 'out' by parameter sweep inversion
1495         false // scale isotrophically to target size
1496     },
1497     {
1498         // mapped to SpiralWipe(flipOnYAxis=true):
1499         animations::TransitionType::SPIRALWIPE,
1500         animations::TransitionSubType::BOTTOMLEFTCOUNTERCLOCKWISE, // (317)
1501         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1502         0.0, // no rotation
1503         1.0, // no scaling
1504         1.0, // no scaling
1505         TransitionInfo::REVERSEMETHOD_SUBTRACT_AND_INVERT,
1506         true, // 'out' by parameter sweep inversion
1507         false // scale isotrophically to target size
1508     },
1509 
1510     {
1511         // mapped to ParallelSnakesWipe:
1512         animations::TransitionType::PARALLELSNAKESWIPE,
1513         animations::TransitionSubType::VERTICALTOPSAME,
1514         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1515         0.0, // no rotation
1516         1.0, // no scaling
1517         1.0, // no scaling
1518         TransitionInfo::REVERSEMETHOD_IGNORE,
1519         true, // 'out' by parameter sweep inversion
1520         false // scale isotrophically to target size
1521     },
1522     {
1523         // mapped to ParallelSnakesWipe:
1524         animations::TransitionType::PARALLELSNAKESWIPE,
1525         animations::TransitionSubType::VERTICALBOTTOMSAME,
1526         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1527         180.0, // rotation
1528         1.0, // no scaling
1529         1.0, // no scaling
1530         TransitionInfo::REVERSEMETHOD_IGNORE,
1531         true, // 'out' by parameter sweep inversion
1532         false // scale isotrophically to target size
1533     },
1534     {
1535         // mapped to ParallelSnakesWipe (opposite=true):
1536         animations::TransitionType::PARALLELSNAKESWIPE,
1537         animations::TransitionSubType::VERTICALTOPLEFTOPPOSITE,
1538         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1539         0.0, // no rotation
1540         1.0, // no scaling
1541         1.0, // no scaling
1542         TransitionInfo::REVERSEMETHOD_IGNORE,
1543         true, // 'out' by parameter sweep inversion
1544         false // scale isotrophically to target size
1545     },
1546     {
1547         // mapped to ParallelSnakesWipe (flipOnYAxis=true, opposite=true):
1548         animations::TransitionType::PARALLELSNAKESWIPE,
1549         animations::TransitionSubType::VERTICALBOTTOMLEFTOPPOSITE,
1550         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1551         0.0, // no rotation
1552         1.0, // no scaling
1553         1.0, // no scaling
1554         TransitionInfo::REVERSEMETHOD_IGNORE,
1555         true, // 'out' by parameter sweep inversion
1556         false // scale isotrophically to target size
1557     },
1558     {
1559         // mapped to ParallelSnakesWipe:
1560         animations::TransitionType::PARALLELSNAKESWIPE,
1561         animations::TransitionSubType::HORIZONTALLEFTSAME,
1562         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1563         -90.0, // rotation
1564         1.0, // no scaling
1565         1.0, // no scaling
1566         TransitionInfo::REVERSEMETHOD_IGNORE,
1567         true, // 'out' by parameter sweep inversion
1568         false // scale isotrophically to target size
1569     },
1570     {
1571         // mapped to ParallelSnakesWipe:
1572         animations::TransitionType::PARALLELSNAKESWIPE,
1573         animations::TransitionSubType::HORIZONTALRIGHTSAME,
1574         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1575         90.0, // rotation
1576         1.0, // no scaling
1577         1.0, // no scaling
1578         TransitionInfo::REVERSEMETHOD_IGNORE,
1579         true, // 'out' by parameter sweep inversion
1580         false // scale isotrophically to target size
1581     },
1582     {
1583         // mapped to ParallelSnakesWipe (flipOnYAxis=true, opposite=true):
1584         animations::TransitionType::PARALLELSNAKESWIPE,
1585         animations::TransitionSubType::HORIZONTALTOPLEFTOPPOSITE,
1586         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1587         -90.0, // rotation
1588         1.0, // no scaling
1589         1.0, // no scaling
1590         TransitionInfo::REVERSEMETHOD_IGNORE,
1591         true, // 'out' by parameter sweep inversion
1592         false // scale isotrophically to target size
1593     },
1594     {
1595         // mapped to ParallelSnakesWipe (opposite=true):
1596         animations::TransitionType::PARALLELSNAKESWIPE,
1597         animations::TransitionSubType::HORIZONTALTOPRIGHTOPPOSITE,
1598         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1599         -90.0, // rotation
1600         1.0, // no scaling
1601         1.0, // no scaling
1602         TransitionInfo::REVERSEMETHOD_IGNORE,
1603         true, // 'out' by parameter sweep inversion
1604         false // scale isotrophically to target size
1605     },
1606     {
1607         // mapped to ParallelSnakesWipe (diagonal=true, opposite=true):
1608         animations::TransitionType::PARALLELSNAKESWIPE,
1609         animations::TransitionSubType::DIAGONALBOTTOMLEFTOPPOSITE,
1610         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1611         0.0, // no rotation
1612         1.0, // no scaling
1613         1.0, // no scaling
1614         TransitionInfo::REVERSEMETHOD_IGNORE,
1615         true, // 'out' by parameter sweep inversion
1616         false // scale isotrophically to target size
1617     },
1618     {
1619         // mapped to ParallelSnakesWipe (diagonal=true, opposite=true,
1620         //                               flipOnYAxis=true):
1621         animations::TransitionType::PARALLELSNAKESWIPE,
1622         animations::TransitionSubType::DIAGONALTOPLEFTOPPOSITE,
1623         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1624         0.0, // no rotation
1625         1.0, // no scaling
1626         1.0, // no scaling
1627         TransitionInfo::REVERSEMETHOD_IGNORE,
1628         true, // 'out' by parameter sweep inversion
1629         false // scale isotrophically to target size
1630     },
1631 
1632     {
1633         // mapped to BoxSnakesWipe:
1634         animations::TransitionType::BOXSNAKESWIPE,
1635         animations::TransitionSubType::TWOBOXTOP, // (340)
1636         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1637         90.0, // rotation
1638         1.0, // no scaling
1639         1.0, // no scaling
1640         TransitionInfo::REVERSEMETHOD_IGNORE,
1641         true, // 'out' by parameter sweep inversion
1642         false // scale isotrophically to target size
1643     },
1644     {
1645         // mapped to BoxSnakesWipe:
1646         animations::TransitionType::BOXSNAKESWIPE,
1647         animations::TransitionSubType::TWOBOXBOTTOM, // (341)
1648         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1649         -90.0, // rotation
1650         1.0, // no scaling
1651         1.0, // no scaling
1652         TransitionInfo::REVERSEMETHOD_IGNORE,
1653         true, // 'out' by parameter sweep inversion
1654         false // scale isotrophically to target size
1655     },
1656     {
1657         // mapped to BoxSnakesWipe:
1658         animations::TransitionType::BOXSNAKESWIPE,
1659         animations::TransitionSubType::TWOBOXLEFT, // (342)
1660         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1661         0.0, // no rotation
1662         1.0, // no scaling
1663         1.0, // no scaling
1664         TransitionInfo::REVERSEMETHOD_IGNORE,
1665         true, // 'out' by parameter sweep inversion
1666         false // scale isotrophically to target size
1667     },
1668     {
1669         // mapped to BoxSnakesWipe:
1670         animations::TransitionType::BOXSNAKESWIPE,
1671         animations::TransitionSubType::TWOBOXRIGHT, // (343)
1672         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1673         180.0, // rotation
1674         1.0, // no scaling
1675         1.0, // no scaling
1676         TransitionInfo::REVERSEMETHOD_IGNORE,
1677         true, // 'out' by parameter sweep inversion
1678         false // scale isotrophically to target size
1679     },
1680     {
1681         // mapped to BoxSnakesWipe(fourBox=true):
1682         animations::TransitionType::BOXSNAKESWIPE,
1683         animations::TransitionSubType::FOURBOXVERTICAL, // (344)
1684         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1685         90.0, // rotation
1686         1.0, // no scaling
1687         1.0, // no scaling
1688         TransitionInfo::REVERSEMETHOD_IGNORE,
1689         true, // 'out' by parameter sweep inversion
1690         false // scale isotrophically to target size
1691     },
1692     {
1693         // mapped to BoxSnakesWipe(fourBox=true):
1694         animations::TransitionType::BOXSNAKESWIPE,
1695         animations::TransitionSubType::FOURBOXHORIZONTAL, // (345)
1696         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1697         0.0, // no rotation
1698         1.0, // no scaling
1699         1.0, // no scaling
1700         TransitionInfo::REVERSEMETHOD_IGNORE,
1701         true, // 'out' by parameter sweep inversion
1702         false // scale isotrophically to target size
1703     },
1704 
1705     {
1706         // mapped to WaterfallWipe:
1707         animations::TransitionType::WATERFALLWIPE,
1708         animations::TransitionSubType::VERTICALLEFT, // (350)
1709         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1710         0.0, // no rotation
1711         1.0, // no scaling
1712         1.0, // no scaling
1713         TransitionInfo::REVERSEMETHOD_ROTATE_180,
1714         true, // 'out' by parameter sweep inversion
1715         false // scale isotrophically to target size
1716     },
1717     {
1718         // mapped to WaterfallWipe (flipOnYAxis=true):
1719         animations::TransitionType::WATERFALLWIPE,
1720         animations::TransitionSubType::VERTICALRIGHT, // (351)
1721         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1722         0.0, // no rotation
1723         1.0, // no scaling
1724         1.0, // no scaling
1725         TransitionInfo::REVERSEMETHOD_ROTATE_180,
1726         true, // 'out' by parameter sweep inversion
1727         false // scale isotrophically to target size
1728     },
1729     {
1730         // mapped to WaterfallWipe (flipOnYAxis=true):
1731         animations::TransitionType::WATERFALLWIPE,
1732         animations::TransitionSubType::HORIZONTALLEFT, // (352)
1733         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1734         -90.0, // rotation
1735         1.0, // no scaling
1736         1.0, // no scaling
1737         TransitionInfo::REVERSEMETHOD_ROTATE_180,
1738         true, // 'out' by parameter sweep inversion
1739         false // scale isotrophically to target size
1740     },
1741     {
1742         // mapped to WaterfallWipe, flipOnYAxis=false:
1743         animations::TransitionType::WATERFALLWIPE,
1744         animations::TransitionSubType::HORIZONTALRIGHT, // (353)
1745         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
1746         90.0, // rotation
1747         1.0, // no scaling
1748         1.0, // no scaling
1749         TransitionInfo::REVERSEMETHOD_ROTATE_180,
1750         true, // 'out' by parameter sweep inversion
1751         false // scale isotrophically to target size
1752     },
1753 
1754     {
1755         animations::TransitionType::PUSHWIPE,
1756         animations::TransitionSubType::FROMLEFT,
1757         TransitionInfo::TRANSITION_SPECIAL,
1758         // TODO(F2): Setup parameters
1759         0.0,                    // no rotation
1760         1.0,                    // no scaling
1761         1.0,                    // no scaling
1762         TransitionInfo::REVERSEMETHOD_IGNORE,
1763         true,                   // 'out' by parameter sweep inversion
1764         false                   // scale isotrophically to target size
1765     },
1766     {
1767         animations::TransitionType::PUSHWIPE,
1768         animations::TransitionSubType::FROMTOP,
1769         TransitionInfo::TRANSITION_SPECIAL,
1770         // TODO(F2): Setup parameters
1771         0.0,                    // no rotation
1772         1.0,                    // no scaling
1773         1.0,                    // no scaling
1774         TransitionInfo::REVERSEMETHOD_IGNORE,
1775         true,                   // 'out' by parameter sweep inversion
1776         false                   // scale isotrophically to target size
1777     },
1778     {
1779         animations::TransitionType::PUSHWIPE,
1780         animations::TransitionSubType::FROMRIGHT,
1781         TransitionInfo::TRANSITION_SPECIAL,
1782         // TODO(F2): Setup parameters
1783         0.0,                    // no rotation
1784         1.0,                    // no scaling
1785         1.0,                    // no scaling
1786         TransitionInfo::REVERSEMETHOD_IGNORE,
1787         true,                   // 'out' by parameter sweep inversion
1788         false                   // scale isotrophically to target size
1789     },
1790     {
1791         animations::TransitionType::PUSHWIPE,
1792         animations::TransitionSubType::FROMBOTTOM,
1793         TransitionInfo::TRANSITION_SPECIAL,
1794         // TODO(F2): Setup parameters
1795         0.0,                    // no rotation
1796         1.0,                    // no scaling
1797         1.0,                    // no scaling
1798         TransitionInfo::REVERSEMETHOD_IGNORE,
1799         true,                   // 'out' by parameter sweep inversion
1800         false                   // scale isotrophically to target size
1801     },
1802     {
1803         animations::TransitionType::PUSHWIPE,
1804         animations::TransitionSubType::FROMBOTTOMRIGHT,
1805         TransitionInfo::TRANSITION_SPECIAL,
1806         // TODO(F2): Setup parameters
1807         0.0,                    // no rotation
1808         1.0,                    // no scaling
1809         1.0,                    // no scaling
1810         TransitionInfo::REVERSEMETHOD_IGNORE,
1811         true,                   // 'out' by parameter sweep inversion
1812         false                   // scale isotrophically to target size
1813     },
1814     {
1815         animations::TransitionType::PUSHWIPE,
1816         animations::TransitionSubType::FROMBOTTOMLEFT,
1817         TransitionInfo::TRANSITION_SPECIAL,
1818         // TODO(F2): Setup parameters
1819         0.0,                    // no rotation
1820         1.0,                    // no scaling
1821         1.0,                    // no scaling
1822         TransitionInfo::REVERSEMETHOD_IGNORE,
1823         true,                   // 'out' by parameter sweep inversion
1824         false                   // scale isotrophically to target size
1825     },
1826     {
1827         animations::TransitionType::PUSHWIPE,
1828         animations::TransitionSubType::FROMTOPRIGHT,
1829         TransitionInfo::TRANSITION_SPECIAL,
1830         // TODO(F2): Setup parameters
1831         0.0,                    // no rotation
1832         1.0,                    // no scaling
1833         1.0,                    // no scaling
1834         TransitionInfo::REVERSEMETHOD_IGNORE,
1835         true,                   // 'out' by parameter sweep inversion
1836         false                   // scale isotrophically to target size
1837     },
1838     {
1839         animations::TransitionType::PUSHWIPE,
1840         animations::TransitionSubType::FROMTOPLEFT,
1841         TransitionInfo::TRANSITION_SPECIAL,
1842         // TODO(F2): Setup parameters
1843         0.0,                    // no rotation
1844         1.0,                    // no scaling
1845         1.0,                    // no scaling
1846         TransitionInfo::REVERSEMETHOD_IGNORE,
1847         true,                   // 'out' by parameter sweep inversion
1848         false                   // scale isotrophically to target size
1849     },
1850     {
1851         animations::TransitionType::PUSHWIPE,
1852         animations::TransitionSubType::COMBHORIZONTAL,
1853         TransitionInfo::TRANSITION_SPECIAL,
1854         // TODO(F2): Setup parameters
1855         0.0,                    // no rotation
1856         1.0,                    // no scaling
1857         1.0,                    // no scaling
1858         TransitionInfo::REVERSEMETHOD_FLIP_X,
1859         true,                   // 'out' by parameter sweep inversion
1860         false                   // scale isotrophically to target size
1861     },
1862     {
1863         animations::TransitionType::PUSHWIPE,
1864         animations::TransitionSubType::COMBVERTICAL,
1865         TransitionInfo::TRANSITION_SPECIAL,
1866         // TODO(F2): Setup parameters
1867         0.0,                    // no rotation
1868         1.0,                    // no scaling
1869         1.0,                    // no scaling
1870         TransitionInfo::REVERSEMETHOD_FLIP_X,
1871         true,                   // 'out' by parameter sweep inversion
1872         false                   // scale isotrophically to target size
1873     },
1874     {
1875         animations::TransitionType::SLIDEWIPE,
1876         animations::TransitionSubType::FROMLEFT,
1877         TransitionInfo::TRANSITION_SPECIAL,
1878         // TODO(F2): Setup parameters
1879         0.0,                    // no rotation
1880         1.0,                    // no scaling
1881         1.0,                    // no scaling
1882         TransitionInfo::REVERSEMETHOD_IGNORE, // special code for this transition
1883         true,                   // 'out' by parameter sweep inversion
1884         false                   // scale isotrophically to target size
1885     },
1886     {
1887         animations::TransitionType::SLIDEWIPE,
1888         animations::TransitionSubType::FROMTOP,
1889         TransitionInfo::TRANSITION_SPECIAL,
1890         // TODO(F2): Setup parameters
1891         0.0,                    // no rotation
1892         1.0,                    // no scaling
1893         1.0,                    // no scaling
1894         TransitionInfo::REVERSEMETHOD_IGNORE, // special code for this transition
1895         true,                   // 'out' by parameter sweep inversion
1896         false                   // scale isotrophically to target size
1897     },
1898     {
1899         animations::TransitionType::SLIDEWIPE,
1900         animations::TransitionSubType::FROMRIGHT,
1901         TransitionInfo::TRANSITION_SPECIAL,
1902         // TODO(F2): Setup parameters
1903         0.0,                    // no rotation
1904         1.0,                    // no scaling
1905         1.0,                    // no scaling
1906         TransitionInfo::REVERSEMETHOD_IGNORE, // special code for this transition
1907         true,                   // 'out' by parameter sweep inversion
1908         false                   // scale isotrophically to target size
1909     },
1910     {
1911         animations::TransitionType::SLIDEWIPE,
1912         animations::TransitionSubType::FROMBOTTOM,
1913         TransitionInfo::TRANSITION_SPECIAL,
1914         // TODO(F2): Setup parameters
1915         0.0,                    // no rotation
1916         1.0,                    // no scaling
1917         1.0,                    // no scaling
1918         TransitionInfo::REVERSEMETHOD_IGNORE, // special code for this transition
1919         true,                   // 'out' by parameter sweep inversion
1920         false                   // scale isotrophically to target size
1921     },
1922     {
1923         animations::TransitionType::SLIDEWIPE,
1924         animations::TransitionSubType::FROMBOTTOMRIGHT,
1925         TransitionInfo::TRANSITION_SPECIAL,
1926         // TODO(F2): Setup parameters
1927         0.0,                    // no rotation
1928         1.0,                    // no scaling
1929         1.0,                    // no scaling
1930         TransitionInfo::REVERSEMETHOD_IGNORE, // special code for this transition
1931         true,                   // 'out' by parameter sweep inversion
1932         false                   // scale isotrophically to target size
1933     },
1934     {
1935         animations::TransitionType::SLIDEWIPE,
1936         animations::TransitionSubType::FROMTOPRIGHT,
1937         TransitionInfo::TRANSITION_SPECIAL,
1938         // TODO(F2): Setup parameters
1939         0.0,                    // no rotation
1940         1.0,                    // no scaling
1941         1.0,                    // no scaling
1942         TransitionInfo::REVERSEMETHOD_IGNORE, // special code for this transition
1943         true,                   // 'out' by parameter sweep inversion
1944         false                   // scale isotrophically to target size
1945     },
1946     {
1947         animations::TransitionType::SLIDEWIPE,
1948         animations::TransitionSubType::FROMTOPLEFT,
1949         TransitionInfo::TRANSITION_SPECIAL,
1950         // TODO(F2): Setup parameters
1951         0.0,                    // no rotation
1952         1.0,                    // no scaling
1953         1.0,                    // no scaling
1954         TransitionInfo::REVERSEMETHOD_IGNORE, // special code for this transition
1955         true,                   // 'out' by parameter sweep inversion
1956         false                   // scale isotrophically to target size
1957     },
1958     {
1959         animations::TransitionType::SLIDEWIPE,
1960         animations::TransitionSubType::FROMBOTTOMLEFT,
1961         TransitionInfo::TRANSITION_SPECIAL,
1962         // TODO(F2): Setup parameters
1963         0.0,                    // no rotation
1964         1.0,                    // no scaling
1965         1.0,                    // no scaling
1966         TransitionInfo::REVERSEMETHOD_IGNORE, // special code for this transition
1967         true,                   // 'out' by parameter sweep inversion
1968         false                   // scale isotrophically to target size
1969     },
1970     {
1971         animations::TransitionType::FADE,
1972         animations::TransitionSubType::CROSSFADE,
1973         TransitionInfo::TRANSITION_SPECIAL,
1974         // TODO(F2): Setup parameters
1975         0.0,                    // no rotation
1976         1.0,                    // no scaling
1977         1.0,                    // no scaling
1978         TransitionInfo::REVERSEMETHOD_IGNORE,
1979         true,                   // 'out' by parameter sweep inversion
1980         false                   // scale isotrophically to target size
1981     },
1982     {
1983         animations::TransitionType::FADE,
1984         animations::TransitionSubType::FADETOCOLOR,
1985         TransitionInfo::TRANSITION_SPECIAL,
1986         // TODO(F2): Setup parameters
1987         0.0,                    // no rotation
1988         1.0,                    // no scaling
1989         1.0,                    // no scaling
1990         TransitionInfo::REVERSEMETHOD_IGNORE,
1991         true,                   // 'out' by parameter sweep inversion
1992         false                   // scale isotrophically to target size
1993     },
1994     {
1995         animations::TransitionType::FADE,
1996         animations::TransitionSubType::FADEFROMCOLOR,
1997         TransitionInfo::TRANSITION_SPECIAL,
1998         // TODO(F2): Setup parameters
1999         0.0,                    // no rotation
2000         1.0,                    // no scaling
2001         1.0,                    // no scaling
2002         TransitionInfo::REVERSEMETHOD_IGNORE,
2003         true,                   // 'out' by parameter sweep inversion
2004         false                   // scale isotrophically to target size
2005     },
2006     {
2007         animations::TransitionType::FADE,
2008         animations::TransitionSubType::FADEOVERCOLOR,
2009         TransitionInfo::TRANSITION_SPECIAL,
2010         // TODO(F2): Setup parameters
2011         0.0,                    // no rotation
2012         1.0,                    // no scaling
2013         1.0,                    // no scaling
2014         TransitionInfo::REVERSEMETHOD_IGNORE,
2015         true,                   // 'out' by parameter sweep inversion
2016         false                   // scale isotrophically to target size
2017     },
2018 
2019     {
2020         // mapped to RandomWipe:
2021         animations::TransitionType::RANDOMBARWIPE,
2022         animations::TransitionSubType::VERTICAL,
2023         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
2024         90.0, // rotation
2025         1.0, // no scaling
2026         1.0, // no scaling
2027         TransitionInfo::REVERSEMETHOD_IGNORE,
2028         true, // 'out' by parameter sweep inversion
2029         false // scale isotrophically to target size
2030     },
2031     {
2032         // mapped to RandomWipe:
2033         animations::TransitionType::RANDOMBARWIPE,
2034         animations::TransitionSubType::HORIZONTAL,
2035         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
2036         0.0, // no rotation
2037         1.0, // no scaling
2038         1.0, // no scaling
2039         TransitionInfo::REVERSEMETHOD_IGNORE,
2040         true, // 'out' by parameter sweep inversion
2041         false // scale isotrophically to target size
2042     },
2043 
2044     {
2045         // mapped to CheckerBoard:
2046         animations::TransitionType::CHECKERBOARDWIPE,
2047         animations::TransitionSubType::DOWN,
2048         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
2049         90.0, // rotation
2050         1.0, // no scaling
2051         1.0, // no scaling
2052         TransitionInfo::REVERSEMETHOD_FLIP_Y,
2053         true, // 'out' by parameter sweep inversion
2054         false // scale isotrophically to target size
2055     },
2056     {
2057         // mapped to CheckerBoard:
2058         animations::TransitionType::CHECKERBOARDWIPE,
2059         animations::TransitionSubType::ACROSS, // (default)
2060         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
2061         0.0, // no rotation
2062         1.0, // no scaling
2063         1.0, // no scaling
2064         TransitionInfo::REVERSEMETHOD_FLIP_X,
2065         true, // 'out' by parameter sweep inversion
2066         false // scale isotrophically to target size
2067     },
2068 
2069     {
2070         // mapped to RandomWipe:
2071         animations::TransitionType::DISSOLVE,
2072         animations::TransitionSubType::DEFAULT,
2073         TransitionInfo::TRANSITION_CLIP_POLYPOLYGON,
2074         0.0, // no rotation
2075         1.0, // no scaling
2076         1.0, // no scaling
2077         TransitionInfo::REVERSEMETHOD_IGNORE,
2078         true, // 'out' by parameter sweep inversion
2079         true // scale isotrophically to target size
2080     },
2081 
2082     /////////////////////////////////////////////////////////
2083     // NOTE: This entry MUST be the last, to keep
2084     // createSlideTransition() from infinite recursion. Because
2085     // getRandomTransitionInfo() below will exclude the last entry of
2086     // the table from the random number generation.
2087     /////////////////////////////////////////////////////////
2088     {
2089         // specially handled
2090         animations::TransitionType::RANDOM,
2091         animations::TransitionSubType::DEFAULT,
2092         TransitionInfo::TRANSITION_SPECIAL,
2093         0.0, // no rotation
2094         1.0, // no scaling
2095         1.0, // no scaling
2096         TransitionInfo::REVERSEMETHOD_IGNORE,
2097         true, // 'out' by parameter sweep inversion
2098         true // scale isotrophically to target size
2099     }
2100     /////////////////////////////////////////////////////////
2101     // NOTE: DON'T add after this entry! See comment above!
2102     /////////////////////////////////////////////////////////
2103 };
2104 
2105 } // anon namespace
2106 
2107 const TransitionInfo* TransitionFactory::getTransitionInfo(
2108     sal_Int16 nTransitionType, sal_Int16 nTransitionSubType )
2109 {
2110     static const ::std::size_t lcl_tableSize(
2111         sizeof(lcl_transitionInfo)/sizeof(TransitionInfo) );
2112     static const TransitionInfo* pTableEnd = lcl_transitionInfo+lcl_tableSize;
2113 
2114     const TransitionInfo* pRes = ::std::find_if(
2115         lcl_transitionInfo, pTableEnd,
2116         TransitionInfo::Comparator( nTransitionType,
2117                                     nTransitionSubType ) );
2118     if (pRes != pTableEnd)
2119         return pRes;
2120     else
2121         return NULL;
2122 }
2123 
2124 const TransitionInfo* TransitionFactory::getRandomTransitionInfo()
2125 {
2126     return lcl_transitionInfo + getRandomOrdinal(
2127         sizeof(lcl_transitionInfo) / sizeof(TransitionInfo)
2128         - 1 /* exclude random transition at end of table */ );
2129 }
2130 
2131 } // namespace internal
2132 } // namespace presentation
2133