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