diff options
author | Rohan Kumar <rohankanojia420@gmail.com> | 2017-03-27 01:44:11 +0530 |
---|---|---|
committer | Thorsten Behrens <Thorsten.Behrens@CIB.de> | 2017-04-17 02:41:22 +0200 |
commit | dd239283664e79337d385a63a18eb676d8688314 (patch) | |
tree | 2c238d88d3df3666e8c66cbdb742c370f46d6127 /filter/source/svg/presentation_engine.js | |
parent | 0badc8447f3c608a8807df511f78799f827ccd2b (diff) |
tdf#51358 Add Support for ParallelSnakesWipe transition in SVG Export
Ported the class ParallelSnakesWipePath
Change-Id: Ife99723792d3d3614c7fff6bcf6abaf199568075
Reviewed-on: https://gerrit.libreoffice.org/35723
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
Diffstat (limited to 'filter/source/svg/presentation_engine.js')
-rw-r--r-- | filter/source/svg/presentation_engine.js | 256 |
1 files changed, 232 insertions, 24 deletions
diff --git a/filter/source/svg/presentation_engine.js b/filter/source/svg/presentation_engine.js index 93facf847290..c705af7c2c98 100644 --- a/filter/source/svg/presentation_engine.js +++ b/filter/source/svg/presentation_engine.js @@ -4588,6 +4588,22 @@ function flipOnYAxis( aPath ) return aPolyPath; } +/** flipOnXAxis + * Flips the SVG Path element along x-axis + * + * @param aPath + * An object of type SVGPathElement to be flipped + */ +function flipOnXAxis( aPath ) +{ + var aPolyPath = aPath.cloneNode(true); + var aTransform = document.documentElement.createSVGMatrix(); + aTransform.d = -1; + aTransform.f = 1; + aPolyPath.matrixTransform(aTransform); + return aPolyPath; +} + /** SVGPathElement.matrixTransform * Apply the transformation defined by the passed matrix to the referenced * svg <path> element. @@ -5164,29 +5180,30 @@ aTransitionClassOutMap = ['invalid', 'clip polypolygon', 'special']; */ // Transition Types -BARWIPE_TRANSITION = 1; -BOXWIPE_TRANSITION = 2; -FOURBOXWIPE_TRANSITION = 3; -ELLIPSEWIPE_TRANSITION = 4; // 17 -CLOCKWIPE_TRANSITION = 5; // 22 -PINWHEELWIPE_TRANSITION = 6; // 23 -PUSHWIPE_TRANSITION = 7; // 35 -SLIDEWIPE_TRANSITION = 8; // 36 -FADE_TRANSITION = 9; // 37 -RANDOMBARWIPE_TRANSITION = 10; // 38 -CHECKERBOARDWIPE_TRANSITION = 11; // 39 -DISSOLVE_TRANSITION = 12; // 40 -SNAKEWIPE_TRANSITION = 13; // 30 -IRISWIPE_TRANSITION = 14; // 12 -BARNDOORWIPE_TRANSITION = 15; // 4 -VEEWIPE_TRANSITION = 16; // 8 -ZIGZAGWIPE_TRANSITION = 17; // 10 -BARNZIGZAGWIPE_TRANSITION = 18; // 11 -FANWIPE_TRANSITION = 19; // 25 -SINGLESWEEPWIPE_TRANSITION = 20; // 24 -WATERFALLWIPE_TRANSITION = 21; // 34 -SPIRALWIPE_TRANSITION = 22; // 31 -MISCDIAGONALWIPE_TRANSITION = 23; // 7 +BARWIPE_TRANSITION = 1; +BOXWIPE_TRANSITION = 2; +FOURBOXWIPE_TRANSITION = 3; +ELLIPSEWIPE_TRANSITION = 4; // 17 +CLOCKWIPE_TRANSITION = 5; // 22 +PINWHEELWIPE_TRANSITION = 6; // 23 +PUSHWIPE_TRANSITION = 7; // 35 +SLIDEWIPE_TRANSITION = 8; // 36 +FADE_TRANSITION = 9; // 37 +RANDOMBARWIPE_TRANSITION = 10; // 38 +CHECKERBOARDWIPE_TRANSITION = 11; // 39 +DISSOLVE_TRANSITION = 12; // 40 +SNAKEWIPE_TRANSITION = 13; // 30 +PARALLELSNAKESWIPE_TRANSITION = 14; // 32 +IRISWIPE_TRANSITION = 15; // 12 +BARNDOORWIPE_TRANSITION = 16; // 4 +VEEWIPE_TRANSITION = 17; // 8 +ZIGZAGWIPE_TRANSITION = 18; // 10 +BARNZIGZAGWIPE_TRANSITION = 19; // 11 +FANWIPE_TRANSITION = 20; // 25 +SINGLESWEEPWIPE_TRANSITION = 21; // 24 +WATERFALLWIPE_TRANSITION = 22; // 34 +SPIRALWIPE_TRANSITION = 23; // 31 +MISCDIAGONALWIPE_TRANSITION = 24; // 7 aTransitionTypeInMap = { 'barWipe' : BARWIPE_TRANSITION, @@ -5206,6 +5223,7 @@ aTransitionTypeInMap = { 'dissolve' : DISSOLVE_TRANSITION, 'singleSweepWipe' : SINGLESWEEPWIPE_TRANSITION, 'snakeWipe' : SNAKEWIPE_TRANSITION, + 'parallelSnakesWipe': PARALLELSNAKESWIPE_TRANSITION, 'spiralWipe' : SPIRALWIPE_TRANSITION, 'irisWipe' : IRISWIPE_TRANSITION, 'veeWipe' : VEEWIPE_TRANSITION, @@ -5297,6 +5315,16 @@ BOTTOMRIGHTCOUNTERCLOCKWISE_TRANS_SUBTYPE = 73; // 75 BOTTOMLEFTCOUNTERCLOCKWISE_TRANS_SUBTYPE = 74; // 76 DOUBLEBARNDOOR_TRANS_SUBTYPE = 75; // 17 DOUBLEDIAMOND_TRANS_SUBTYPE = 76; // 18 +VERTICALTOPSAME_TRANS_SUBTYPE = 77; // 77 +VERTICALBOTTOMSAME_TRANS_SUBTYPE = 78; // 78 +VERTICALTOPLEFTOPPOSITE_TRANS_SUBTYPE = 79; // 79 +VERTICALBOTTOMLEFTOPPOSITE_TRANS_SUBTYPE = 80; // 80 +HORIZONTALLEFTSAME_TRANS_SUBTYPE = 81; // 81 +HORIZONTALRIGHTSAME_TRANS_SUBTYPE = 82; // 82 +HORIZONTALTOPLEFTOPPOSITE_TRANS_SUBTYPE = 83; // 83 +HORIZONTALTOPRIGHTOPPOSITE_TRANS_SUBTYPE = 84; // 84 +DIAGONALBOTTOMLEFTOPPOSITE_TRANS_SUBTYPE = 85; // 85 +DIAGONALTOPLEFTOPPOSITE_TRANS_SUBTYPE = 86; // 86 aTransitionSubtypeInMap = { 'default' : DEFAULT_TRANS_SUBTYPE, @@ -5375,7 +5403,17 @@ aTransitionSubtypeInMap = { 'horizontalLeft' : HORIZONTALLEFT_TRANS_SUBTYPE, 'horizontalRight' : HORIZONTALRIGHT_TRANS_SUBTYPE, 'doubleBarnDoor' : DOUBLEBARNDOOR_TRANS_SUBTYPE, - 'doubleDiamond' : DOUBLEDIAMOND_TRANS_SUBTYPE + 'doubleDiamond' : DOUBLEDIAMOND_TRANS_SUBTYPE, + 'verticalTopSame' : VERTICALTOPSAME_TRANS_SUBTYPE, + 'verticalBottomSame' : VERTICALBOTTOMSAME_TRANS_SUBTYPE, + 'verticalTopLeftOpposite' : VERTICALTOPLEFTOPPOSITE_TRANS_SUBTYPE, + 'verticalBottomLeftOpposite' : VERTICALBOTTOMLEFTOPPOSITE_TRANS_SUBTYPE, + 'horizontalLeftSame' : HORIZONTALLEFTSAME_TRANS_SUBTYPE, + 'horizontalRightSame' : HORIZONTALRIGHTSAME_TRANS_SUBTYPE, + 'horizontalTopLeftOpposite' : HORIZONTALTOPLEFTOPPOSITE_TRANS_SUBTYPE, + 'horizontalTopRightOpposite' : HORIZONTALTOPRIGHTOPPOSITE_TRANS_SUBTYPE, + 'diagonalBottomLeftOpposite' : DIAGONALBOTTOMLEFTOPPOSITE_TRANS_SUBTYPE, + 'diagonalTopLeftOpposite' : DIAGONALTOPLEFTOPPOSITE_TRANS_SUBTYPE }; // Transition Modes @@ -5489,6 +5527,108 @@ aTransitionInfoTable[SNAKEWIPE_TRANSITION][BOTTOMLEFTDIAGONAL_TRANS_SUBTYPE] = 'scaleIsotropically' : false } +aTransitionInfoTable[PARALLELSNAKESWIPE_TRANSITION] = {}; +aTransitionInfoTable[PARALLELSNAKESWIPE_TRANSITION][VERTICALTOPSAME_TRANS_SUBTYPE] = +{ + 'class' : TRANSITION_CLIP_POLYPOLYGON, + 'rotationAngle' : 0.0, + 'scaleX' : 1.0, + 'scaleY' : 1.0, + 'reverseMethod' : REVERSEMETHOD_IGNORE, + 'outInvertSweep' : true, + 'scaleIsotropically' : false +}; +aTransitionInfoTable[PARALLELSNAKESWIPE_TRANSITION][VERTICALBOTTOMSAME_TRANS_SUBTYPE] = +{ + 'class' : TRANSITION_CLIP_POLYPOLYGON, + 'rotationAngle' : 180.0, + 'scaleX' : 1.0, + 'scaleY' : 1.0, + 'reverseMethod' : REVERSEMETHOD_IGNORE, + 'outInvertSweep' : true, + 'scaleIsotropically' : false +}; +aTransitionInfoTable[PARALLELSNAKESWIPE_TRANSITION][VERTICALTOPLEFTOPPOSITE_TRANS_SUBTYPE] = +{ + 'class' : TRANSITION_CLIP_POLYPOLYGON, + 'rotationAngle' : 0.0, + 'scaleX' : 1.0, + 'scaleY' : 1.0, + 'reverseMethod' : REVERSEMETHOD_IGNORE, + 'outInvertSweep' : true, + 'scaleIsotropically' : false +}; +aTransitionInfoTable[PARALLELSNAKESWIPE_TRANSITION][VERTICALBOTTOMLEFTOPPOSITE_TRANS_SUBTYPE] = +{ + 'class' : TRANSITION_CLIP_POLYPOLYGON, + 'rotationAngle' : 0.0, + 'scaleX' : 1.0, + 'scaleY' : 1.0, + 'reverseMethod' : REVERSEMETHOD_IGNORE, + 'outInvertSweep' : true, + 'scaleIsotropically' : false +}; +aTransitionInfoTable[PARALLELSNAKESWIPE_TRANSITION][HORIZONTALLEFTSAME_TRANS_SUBTYPE] = +{ + 'class' : TRANSITION_CLIP_POLYPOLYGON, + 'rotationAngle' : -90.0, + 'scaleX' : 1.0, + 'scaleY' : 1.0, + 'reverseMethod' : REVERSEMETHOD_IGNORE, + 'outInvertSweep' : true, + 'scaleIsotropically' : false +}; +aTransitionInfoTable[PARALLELSNAKESWIPE_TRANSITION][HORIZONTALRIGHTSAME_TRANS_SUBTYPE] = +{ + 'class' : TRANSITION_CLIP_POLYPOLYGON, + 'rotationAngle' : 90.0, + 'scaleX' : 1.0, + 'scaleY' : 1.0, + 'reverseMethod' : REVERSEMETHOD_IGNORE, + 'outInvertSweep' : true, + 'scaleIsotropically' : false +}; +aTransitionInfoTable[PARALLELSNAKESWIPE_TRANSITION][HORIZONTALTOPLEFTOPPOSITE_TRANS_SUBTYPE] = +{ + 'class' : TRANSITION_CLIP_POLYPOLYGON, + 'rotationAngle' : -90.0, + 'scaleX' : 1.0, + 'scaleY' : 1.0, + 'reverseMethod' : REVERSEMETHOD_IGNORE, + 'outInvertSweep' : true, + 'scaleIsotropically' : false +}; +aTransitionInfoTable[PARALLELSNAKESWIPE_TRANSITION][HORIZONTALTOPRIGHTOPPOSITE_TRANS_SUBTYPE] = +{ + 'class' : TRANSITION_CLIP_POLYPOLYGON, + 'rotationAngle' : -90.0, + 'scaleX' : 1.0, + 'scaleY' : 1.0, + 'reverseMethod' : REVERSEMETHOD_IGNORE, + 'outInvertSweep' : true, + 'scaleIsotropically' : false +}; +aTransitionInfoTable[PARALLELSNAKESWIPE_TRANSITION][DIAGONALTOPLEFTOPPOSITE_TRANS_SUBTYPE] = +{ + 'class' : TRANSITION_CLIP_POLYPOLYGON, + 'rotationAngle' : 0.0, + 'scaleX' : 1.0, + 'scaleY' : 1.0, + 'reverseMethod' : REVERSEMETHOD_IGNORE, + 'outInvertSweep' : true, + 'scaleIsotropically' : false +}; +aTransitionInfoTable[PARALLELSNAKESWIPE_TRANSITION][DIAGONALBOTTOMLEFTOPPOSITE_TRANS_SUBTYPE] = +{ + 'class' : TRANSITION_CLIP_POLYPOLYGON, + 'rotationAngle' : 0.0, + 'scaleX' : 1.0, + 'scaleY' : 1.0, + 'reverseMethod' : REVERSEMETHOD_IGNORE, + 'outInvertSweep' : true, + 'scaleIsotropically' : false +}; + aTransitionInfoTable[SPIRALWIPE_TRANSITION] = {}; aTransitionInfoTable[SPIRALWIPE_TRANSITION][TOPLEFTCLOCKWISE_TRANS_SUBTYPE] = { @@ -9906,6 +10046,25 @@ function createClipPolyPolygon( nType, nSubtype ) nSubtype == TOPRIGHTDIAGONAL_TRANS_SUBTYPE || nSubtype == BOTTOMLEFTDIAGONAL_TRANS_SUBTYPE ); + case PARALLELSNAKESWIPE_TRANSITION: + return new ParallelSnakesWipePath( + 8 * 8, // elements + // diagonal + nSubtype == DIAGONALBOTTOMLEFTOPPOSITE_TRANS_SUBTYPE || + nSubtype == DIAGONALTOPLEFTOPPOSITE_TRANS_SUBTYPE, + // flipOnYAxis + nSubtype == VERTICALBOTTOMLEFTOPPOSITE_TRANS_SUBTYPE || + nSubtype == HORIZONTALTOPLEFTOPPOSITE_TRANS_SUBTYPE || + nSubtype == DIAGONALTOPLEFTOPPOSITE_TRANS_SUBTYPE, + // opposite + nSubtype == VERTICALTOPLEFTOPPOSITE_TRANS_SUBTYPE || + nSubtype == VERTICALBOTTOMLEFTOPPOSITE_TRANS_SUBTYPE || + nSubtype == HORIZONTALTOPLEFTOPPOSITE_TRANS_SUBTYPE || + nSubtype == HORIZONTALTOPRIGHTOPPOSITE_TRANS_SUBTYPE || + nSubtype == DIAGONALBOTTOMLEFTOPPOSITE_TRANS_SUBTYPE || + nSubtype == DIAGONALTOPLEFTOPPOSITE_TRANS_SUBTYPE + ); + case SPIRALWIPE_TRANSITION: return new SpiralWipePath( 8 * 8, // elements @@ -10760,6 +10919,55 @@ SnakeWipePath.prototype.perform = function(nT) { return this.flipOnYAxis ? flipOnYAxis(res) : res; } +/** Class ParallelSnakesWipePath + * + * @param nElements + * @param bDiagonal + * @param bFlipOnYAxis + * @param bOpposite + */ +function ParallelSnakesWipePath(nElements, bDiagonal, bFlipOnYAxis, bOpposite) { + SnakeWipePath.call(this, nElements, bDiagonal, bFlipOnYAxis); + this.bOpposite = bOpposite; +} + +ParallelSnakesWipePath.prototype = Object.create(SnakeWipePath); + +ParallelSnakesWipePath.prototype.perform = function( nT ) { + var res = createEmptyPath(), half, aTransform; + if(this.diagonal) { + assert(this.bOpposite); + half = SnakeWipePath.prototype.calcHalfDiagonalSnake.call(this, nT, false); + // flip on x axis and rotate 90 degrees: + aTransform = SVGIdentityMatrix.scale(1, -1); + aTransform.translate(-0.5, 0.5); + aTransform.rotate(Math.PI/2); + aTransform.translate(0.5, 0.5); + half.matrixTransform(aTransform); + half.changeOrientation(); + res.appendPath(half); + + // rotate 180 degrees: + aTransform = SVGIdentityMatrix.translate(-0.5, -0.5); + aTransform.rotate(Math.PI); + aTransform.translate(0.5, 0.5); + half.matrixTransform(aTransform); + res.appendPath(half); + } + else { + half = SnakeWipePath.prototype.calcSnake.call(this, nT / 2.0 ); + // rotate 90 degrees + aTransform = SVGIdentityMatrix.translate(-0.5, -0.5); + aTransform.rotate(Math.PI/2); + aTransform.translate(0.5, 0.5); + half.matrixTransform(aTransform); + res.appendPath(flipOnYAxis(half)); + res.appendPath(this.bOpposite ? flipOnXAxis(half) : half); + } + + return this.flipOnYAxis ? flipOnYAxis(res) : res; +} + /** SpiralWipePath * * @param nElements |