8622 lines
326 KiB
Plaintext
8622 lines
326 KiB
Plaintext
(* ImageEn Build 7.0.0.06.2637 @ 7-4-17 14:58:42.679 *)
|
|
(*
|
|
Copyright (c) 1998-2017 by Carlotta Calandra. All rights reserved.
|
|
Copyright (c) 2011-2017 by Xequte Software.
|
|
|
|
This software comes without express or implied warranty.
|
|
In no case shall the author be liable for any damage or unwanted behavior of any
|
|
computer hardware and/or software.
|
|
|
|
Author grants you the right to include the component
|
|
in your application, whether COMMERCIAL, SHAREWARE, or FREEWARE.
|
|
|
|
ImageEn, IEvolution and ImageEn ActiveX may not be included in any
|
|
commercial, shareware or freeware libraries or components.
|
|
|
|
www.ImageEn.com
|
|
*)
|
|
|
|
|
|
{------------------------------------------------------------------------------}
|
|
{ }
|
|
{ Some transitions based on TCustomPicShow v4.10 (PSEffect.pas) by: }
|
|
{ }
|
|
{ Kambiz R. Khojasteh }
|
|
{ kambiz@delphiarea.com }
|
|
{ http://www.delphiarea.com }
|
|
{ }
|
|
{------------------------------------------------------------------------------}
|
|
|
|
(*
|
|
File version 1014
|
|
*)
|
|
|
|
{$I ie.inc}
|
|
|
|
{$R-}
|
|
|
|
unit iexTransitions;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, ExtCtrls, hyiedefs, Controls;
|
|
|
|
type
|
|
|
|
|
|
{!!
|
|
<FS>TIETransitionType
|
|
|
|
<FM>Declaration<FC>
|
|
}
|
|
TIETransitionType = (iettNone,
|
|
iettCrossDissolve, // Cross Fade
|
|
iettFadeOut, // Fade Out
|
|
iettFadeIn, // Fade In
|
|
iettFadeOutIn, // Fade Out then In
|
|
iettLeftRight1, // Wipe Left to Right
|
|
iettLeftRight2, // Wipe Left to Right 2
|
|
iettRightLeft1, // Wipe Right to Left
|
|
iettRightLeft2, // Wipe Right to Left 2
|
|
iettUpDown1, // Wipe Top to Bottom
|
|
iettUpDown2, // Wipe Top to Bottom 2
|
|
iettDownUp1, // Wipe Bottom to Top
|
|
iettDownUp2, // Wipe Bottom to Top 2
|
|
iettFromUpLeft, // Slide from Top Left
|
|
iettFromUpRight, // Slide from Top Right
|
|
iettFromBottomLeft, // Slide from Bottom Left
|
|
iettFromBottomRight, // Slide from Bottom Right
|
|
iettMoveLeftRight1, // Push Left to Right
|
|
iettMoveLeftRight2, // Slide Out Left to Right
|
|
iettMoveRightLeft1, // Push Right to Left
|
|
iettMoveRightLeft2, // Slide Out Right to Left
|
|
iettMoveUpDown1, // Push Top to Bottom
|
|
iettMoveUpDown2, // Slide Out Top to Bottom
|
|
iettMoveDownUp1, // Push Bottom to Top
|
|
iettMoveDownUp2, // Slide Out Bottom to Top
|
|
iettRandomPoints, // Random Points
|
|
iettRandomBoxes, // Random Boxes
|
|
iettCenter1, // Wipe Out from Center
|
|
iettCenter2, // Wipe In to Center
|
|
iettCenterZoom1, // Expand Out from Center
|
|
iettCenterZoom2 // Expand In to Center
|
|
|
|
{$ifdef IEINCLUDEEXTRATRANSITIONS}
|
|
,iettExpandFromLeft, // Expand from Left
|
|
iettExpandFromRight, // Expand from Right
|
|
iettExpandFromTop, // Expand from Top
|
|
iettExpandFromBottom, // Expand from Bottom
|
|
iettExpandFromTopLeft, // Expand from Top Left
|
|
iettExpandFromTopRight, // Expand from Top Right
|
|
iettExpandFromBottomLeft, // Expand from Bottom Left
|
|
iettExpandFromBottomRight, // Expand from Bottom Right
|
|
iettExpandInFromLeft, // Expand in from Left
|
|
iettExpandInFromRight, // Expand in from Right
|
|
iettExpandInFromTop, // Expand in from Top
|
|
iettExpandInFromBottom, // Expand in from Bottom
|
|
iettExpandInToVerticalCenter, // Expand in to Vertical Center
|
|
iettExpandInToHorizon, // Expand in to Horizon
|
|
iettExpandInFromSides, // Expand in from Sides
|
|
iettExpandInFromTopAndBottom, // Expand in from Top and Bottom
|
|
iettExpandOutFromHorizon, // Expand out from Horizon
|
|
iettExpandOutFromVerticalCenter, // Expand out from Vertical Center
|
|
iettWipeFromTopLeft, // Wipe from Top Left
|
|
iettWipeFromTopRight, // Wipe from Top Right
|
|
iettWipeFromBottomLeft, // Wipe from Bottom Left
|
|
iettWipeFromBottomRight, // Wipe from Bottom Right
|
|
iettWipeInFromTopAndBottom, // Wipe in from Top and Bottom
|
|
iettWipeFromHorizon, // Wipe from Horizon
|
|
iettWipeInFromSides, // Wipe in from Sides
|
|
iettWipeOutFromVerticalCenter, // Wipe out from Vertical Center
|
|
iettBuildUpFromLeft, // Build up from Left
|
|
iettBuildUpFromRight, // Build up from Right
|
|
iettBuildUpFromTop, // Build up from Top
|
|
iettBuildUpFromBottom, // Build up from Bottom
|
|
iettUnrollFromLeft, // Unroll from Left
|
|
iettUnrollFromRight, // Unroll from Right
|
|
iettUnrollFromTop, // Unroll from Top
|
|
iettUnrollFromBottom, // Unroll from Bottom
|
|
iettSlideInFromLeft, // Slide in from Left
|
|
iettSlideInFromRight, // Slide in from Right
|
|
iettSlideInFromTop, // Slide in from Top
|
|
iettSlideInFromBottom, // Slide in from Bottom
|
|
iettShrinkToTopLeft, // Shrink to Top Left
|
|
iettShrinkToTopRight, // Shrink to Top Right
|
|
iettShrinkToBottomLeft, // Shrink to Bottom Left
|
|
iettShrinkToBottomRight, // Shrink to Bottom Right
|
|
iettShrinkToCenter, // Shrink to Center
|
|
iettQuartersWipeInToCenter, // Quarters Wipe in to Center
|
|
iettQuartersExpandToCenter, // Quarters Expand to Center
|
|
iettQuartersSlideInToCenter, // Quarters Slide in to Center
|
|
iettCurvedWipeFromLeft, // Curved Wipe from Left
|
|
iettCurvedWipeFromRight, // Curved Wipe from Right
|
|
iettCurvedWipeFromTop, // Curved Wipe from Top
|
|
iettCurvedWipeFromBottom, // Curved Wipe from Bottom
|
|
iettCurvedWipeFromTopLeft, // Curved Wipe from Top Left
|
|
iettCurvedWipeFromTopRight, // Curved Wipe from Top Right
|
|
iettCurvedWipeFromBottomLeft, // Curved Wipe from Bottom Left
|
|
iettCurvedWipeFromBottomRight, // Curved Wipe from Bottom Right
|
|
iettBarsInFromLeft, // Bars in from Left
|
|
iettBarsInFromRight, // Bars in from Right
|
|
iettBarsFromTop, // Bars from Top
|
|
iettBarsFromBottom, // Bars from Bottom
|
|
iettBarsLeftThenRight, // Bars Left then Right
|
|
iettBarsRightThenLeft, // Bars Right then Left
|
|
iettBarsTopThenBottom, // Bars Top then Bottom
|
|
iettBarsBottomThenTop, // Bars Bottom then Top
|
|
iettBarsFromBothSides, // Bars from both Sides
|
|
iettBarsFromTopAndBottom, // Bars from Top and Bottom
|
|
iettShreddedFromLeft, // Shredded from Left
|
|
iettShreddedFromRight, // Shredded from Right
|
|
iettShreddedFromTop, // Shredded from Top
|
|
iettShreddedFromBottom, // Shredded from Bottom
|
|
iettShreddedFromTopAndLeft, // Shredded from Top and Left
|
|
iettShreddedFromTopAndRight, // Shredded from Top and Right
|
|
iettShreddedFromBottomAndLeft, // Shredded from Bottom and Left
|
|
iettShreddedFromBottomAndRight, // Shredded from Bottom and Right
|
|
iettShreddedFromHorizonAndLeft, // Shredded from Horizon and Left
|
|
iettShreddedFromHorizonAndRight, // Shredded from Horizon and Right
|
|
iettShreddedFromTopAndVerticalCenter, // Shredded from Top and Vertical Center
|
|
iettShreddedFromBottomAndVerticalCenter, // Shredded from Bottom and Vertical Center
|
|
iettShreddedFromCenter, // Shredded from Center
|
|
iettShreddedToCenter, // Shredded to Center
|
|
iettShreddedInToHorizon, // Shredded in to Horizon
|
|
iettShreddedInToVerticalCenter, // Shredded in to Vertical Center
|
|
iettShreddedOutFromHorizon, // Shredded out from Horizon
|
|
iettShreddedOutFromVerticalCenter, // Shredded out from Vertical Center
|
|
iettExpandingRectangles, // Expanding Rectangles
|
|
iettExpandingTriangles, // Expanding Triangles
|
|
iettExpandingCircles, // Expanding Circles
|
|
iettExpandingDiamonds, // Expanding Diamonds
|
|
iettCircularWipeFromCenter, // Circular Wipe from Center
|
|
iettCircularWipeToCenter, // Circular Wipe to Center
|
|
iettCrisscrossWipeFromTopLeft, // Crisscross Wipe from Top Left
|
|
iettCrisscrossWipeFromTopRight, // Crisscross Wipe from Top Right
|
|
iettCrisscrossWipeFromBottomLeft, // Crisscross Wipe from Bottom Left
|
|
iettCrisscrossWipeFromBottomRight, // Crisscross Wipe from Bottom Right
|
|
iettCrisscrossWipeBounceFromTopLeft, // Crisscross Wipe Bounce from Top Left
|
|
iettCrisscrossWipeBounceFromTopRight, // Crisscross Wipe Bounce from Top Right
|
|
iettCrisscrossWipeBounceFromBottomLeft, // Crisscross Wipe Bounce from Bottom Left
|
|
iettCrisscrossWipeBounceFromBottomRight, // Crisscross Wipe Bounce from Bottom Right
|
|
iettCrisscrossWipeFromLeftRightAndTop, // Crisscross Wipe from Left Right and Top
|
|
iettCrisscrossWipeFromLeftRightAndBottom, // Crisscross Wipe from Left Right and Bottom
|
|
iettCrisscrossWipeFromLeftTopAndBottom, // Crisscross Wipe from Left Top and Bottom
|
|
iettCrisscrossWipeFromTopLeftRightAndBottom,// Crisscross Wipe from Top Left Right and Bottom
|
|
iettCrisscrossWipeFromRightTopAndBottom, // Crisscross Wipe from Right Top and Bottom
|
|
iettCrisscrossWipeFromBottomLeftTopRight, // Crisscross Wipe from Bottom Left Top Right
|
|
iettWipeDiagonalFromTopLeft, // Wipe diagonal from Top Left
|
|
iettWipeDiagonalFromTopRight, // Wipe diagonal from Top Right
|
|
iettWipeDiagonalFromBottomLeft, // Wipe diagonal from Bottom Left
|
|
iettWipeDiagonalFromBottomRight, // Wipe diagonal from Bottom Right
|
|
iettDiagonalSweepClockwise, // Diagonal Sweep Clockwise
|
|
iettDiagonalSweepCounterClockwise, // Diagonal Sweep Counter-Clockwise
|
|
iettSweepClockwise, // Half Sweep Clockwise
|
|
iettSweepCounterClockwise, // Half Sweep Counter-Clockwise
|
|
iettStarburstClockwiseFromCenter, // Starburst Clockwise from Center
|
|
iettStarburstCounterClockwiseFromCenter, // Starburst Clockwise from Center
|
|
iettRotationalRectangle, // Rotational Rectangle - Clockwise
|
|
iettRotationalRectangleCounterClockwise, // Rotational Rectangle - Counter Clockwise
|
|
iettRotationalStar, // Rotational Star - Clockwise
|
|
iettRotationalStarCounterClockwise, // Rotational Star - Counter Clockwise
|
|
iettSpeckledWipeFromLeft, // Speckled Wipe from Left
|
|
iettSpeckledWipeFromRight, // Speckled Wipe from Right
|
|
iettSpeckledWipeFromTop, // Speckled Wipe from Top
|
|
iettSpeckledWipeFromBottom, // Speckled Wipe from Bottom
|
|
iettPushLeftAndSlideOut, // Push Left and Slide out
|
|
iettPushRightAndSlideOut, // Push Right and Slide out
|
|
iettPushUpAndSlideOut, // Push up and Slide out
|
|
iettPushDownAndSlideOut, // Push down and Slide out
|
|
iettPushAndSqueezeLeft, // Push and Squeeze Left
|
|
iettPushAndSqueezeRight, // Push and Squeeze Right
|
|
iettPushAndSqueezeUp, // Push and Squeeze up
|
|
iettPushAndSqueezeDown, // Push and Squeeze down
|
|
iettHorizontalBlinds, // Horizontal Blinds
|
|
iettVerticalBlinds, // Vertical Blinds
|
|
iettUnevenBlindsFromLeft, // Uneven Blinds from Left
|
|
iettUnevenBlindsFromRight, // Uneven Blinds from Right
|
|
iettUnevenBlindsFromTop, // Uneven Blinds from Top
|
|
iettUnevenBlindsFromBottom, // Uneven Blinds from Bottom
|
|
iettRectanglesFromTheLeft, // Random Bars from the Left
|
|
iettRectanglesFromTheRight, // Random Bars from the Right
|
|
iettRectanglesFromTheTop, // Random Bars from the Top
|
|
iettRectanglesFromTheBottom, // Random Bars from the Bottom
|
|
iettSpirallingRectangleClockwise, // Spiralling Rectangle Clockwise
|
|
iettSpirallingRectangleCounterClockwise, // Spiralling Rectangle Counter-Clockwise
|
|
iettArrowWipeFromLeft, // Arrow Wipe from Left
|
|
iettArrowWipeFromRight, // Arrow Wipe from Right
|
|
iettArrowWipeFromTop, // Arrow Wipe from Top
|
|
iettArrowWipeFromBottom, // Arrow Wipe from Bottom
|
|
iettHorizontalBowTieWipe, // Horizontal Bow Tie Wipe
|
|
iettVerticalBowTieWipe, // Vertical Bow Tie Wipe
|
|
iettDiagonalCrossFromCenter, // Diagonal Cross from Center
|
|
iettDiagonalCrossToCenter, // Diagonal Cross to Center
|
|
iettZigzagWipeFromHorizon, // Zigzag Wipe from Horizon
|
|
iettZigzagWipeFromVerticalCenter, // Zigzag Wipe from Vertical Center
|
|
iettDiamondWipeFromCenter, // Diamond Wipe from Center
|
|
iettDiamondWipeToCenter, // Diamond Wipe to Center
|
|
iettDiagonalBoxWipe, // Diagonal Box Wipe
|
|
iettTriangularWipe, // Rotational Triangular Wipe
|
|
iettRandomBigBoxes, // Random Big Boxes
|
|
iettPageFlip, // Page Flip
|
|
iettPageFlip2, // Page Flip 2
|
|
iettReversePageFlip, // Page Flip
|
|
iettReversePageFlip2, // Page Flip 2
|
|
iettZigzagWipeToHorizon, // Zigzag Wipe To Horizon
|
|
iettZigzagWipeToVerticalCenter, // Zigzag Wipe To Vertical Center
|
|
iettRandomHearts, // Random Hearts
|
|
iettRandomStar5s, // Random 5 Pointed Stars
|
|
iettRandomStar6s, // Random 6 Pointed Stars
|
|
iettRandomExplosions, // Random Explosions
|
|
iettExpandingHearts, // Expanding Hearts
|
|
iettExpandingStar5, // Expanding 5 Pointed Stars
|
|
iettExpandingStar6, // Expanding 6 Pointed Stars
|
|
iettExpandingExplosions, // Expanding Explosions
|
|
iettExpandingLightningBolts, // Expanding Lightning Bolts
|
|
iettHeartWipeOut, // Heart Wipe from Center
|
|
iettHeartWipeIn, // Heart Wipe to Center
|
|
iettStar5WipeOut, // 5 Pointed Star Wipe from Center
|
|
iettStar5WipeIn, // 5 Pointed Star Wipe to Center
|
|
iettStar6WipeOut, // 6 Pointed Star Wipe from Center
|
|
iettStar6WipeIn, // 6 Pointed Star Wipe to Center
|
|
iettExplosionWipeOut, // Explosion Wipe from Center
|
|
iettExplosionWipeIn, // Explosion Wipe to Center
|
|
iettCrossWipeOut, // Cross Wipe from Center
|
|
iettCrossWipeIn, // Cross Wipe to Center
|
|
iettHeartWipeInAndOut, // Heart Wipe In and Out
|
|
iettStar5WipeInAndOut, // 5 Pointed Star Wipe In and Out
|
|
iettStar6WipeInAndOut, // 6 Pointed Star Wipe In and Out
|
|
iettExplosionWipeInAndOut, // Explosion Wipe In and Out
|
|
iettCubeRotateFromLeft, // Cube Rotate from Left
|
|
iettCubeRotateFromRight, // Cube Rotate from Right
|
|
iettCubeRotateFromTop, // Cube Rotate from Top
|
|
iettCubeRotateFromBottom, // Cube Rotate from Bottom
|
|
iettSoftWipeFromLeft, // Soft Wipe from Left
|
|
iettSoftWipeFromRight, // Soft Wipe from Right
|
|
iettSoftWipeFromTop, // Soft Wipe from Top
|
|
iettSoftWipeFromBottom, // Soft Wipe from Bottom
|
|
iettAngledTwistIn, // Twist In
|
|
iettAngledTwistOut, // Twist Out
|
|
iettMultipleAngledTwistIn, // Multiple Twist In
|
|
iettMultipleAngledTwistOut, // Multiple Twist Out
|
|
iettRandomPuzzlePieces, // Random Puzzle Pieces
|
|
iettPacmanFromLeft , // Pacman Devours from Left
|
|
iettPacmanFromRight , // Pacman Devours from Right
|
|
iettPacman3Row , // Pacman Devours Three Rows
|
|
iettPacman4Row , // Pacman Devours Four Rows
|
|
iettPacman2SimRow , // Two Simultaneous Rows of Pacman
|
|
iettPacman4SimRow , // Four Simultaneous Rows of Pacman
|
|
iettPacman6SimRow , // Six Simultaneous Rows of Pacman
|
|
iettFullSweepClockwise, // Full Sweep Clockwise
|
|
iettExpandingSweepClockwise, // Expanding Sweep Clockwise
|
|
iettCubeRotateFromLeft2, // 3D Cube Rotate from Left
|
|
iettCubeRotateFromRight2, // 3D Cube Rotate from Right
|
|
iettCubeRotateFromTop2, // 3D Cube Rotate from Top
|
|
iettCubeRotateFromBottom2, // 3D Cube Rotate from Bottom
|
|
iettRandomBoxesWithWord, // Random Boxes with Word
|
|
iettRandomWord, // Random Letters of Word
|
|
iettExpandingWord, // Expanding Letters of Word
|
|
iettWordWipeOut, // Word Wipe from Center
|
|
iettWordWipeIn, // Word Wipe to Center
|
|
iettWordWipeInAndOut, // Word Wipe In and Out
|
|
iettWordHalfSweep, // Half Sweep with Word
|
|
iettWordFullSweep, // Full Sweep with Word
|
|
iettWordFullExpandingSweep // Expanding Sweep with Word
|
|
{$endif}
|
|
|
|
,iettPanZoom // Pan Zoom/Effects
|
|
);
|
|
|
|
|
|
{//}
|
|
const
|
|
// All transitions that can display a word, using the global setting, IEGlobalSettings().WordTransitionParams
|
|
Transitions_Supporting_Word =
|
|
[ {$ifdef IEINCLUDEEXTRATRANSITIONS}
|
|
iettRandomBoxesWithWord,
|
|
iettRandomWord,
|
|
iettExpandingWord,
|
|
iettWordWipeOut,
|
|
iettWordWipeIn,
|
|
iettWordWipeInAndOut,
|
|
iettWordHalfSweep,
|
|
iettWordFullSweep,
|
|
iettWordFullExpandingSweep
|
|
{$endif}
|
|
];
|
|
|
|
// All transitions for which the global setting, IEGlobalSettings().TransitionsDrawAlternative, will modify the transition
|
|
Transitions_Supporting_TransitionsDrawAlternative =
|
|
[ iettLeftRight2 ,
|
|
iettRightLeft2 ,
|
|
iettUpDown2 ,
|
|
iettDownUp2 ,
|
|
iettRandomPoints ,
|
|
iettRandomBoxes
|
|
{$ifdef IEINCLUDEEXTRATRANSITIONS} ,
|
|
iettExpandFromLeft ,
|
|
iettExpandFromRight ,
|
|
iettExpandFromTop ,
|
|
iettExpandFromBottom ,
|
|
iettPacmanFromLeft ,
|
|
iettPacmanFromRight ,
|
|
iettPacman3Row ,
|
|
iettPacman4Row ,
|
|
iettPacman2SimRow ,
|
|
iettPacman4SimRow ,
|
|
iettPacman6SimRow ,
|
|
iettCubeRotateFromLeft ,
|
|
iettCubeRotateFromRight ,
|
|
iettCubeRotateFromTop ,
|
|
iettCubeRotateFromBottom ,
|
|
iettCubeRotateFromLeft2 ,
|
|
iettCubeRotateFromRight2 ,
|
|
iettCubeRotateFromTop2 ,
|
|
iettCubeRotateFromBottom2 ,
|
|
iettPageFlip ,
|
|
iettReversePageFlip ,
|
|
iettPageFlip2 ,
|
|
iettReversePageFlip2 ,
|
|
iettSoftWipeFromLeft ,
|
|
iettSoftWipeFromRight ,
|
|
iettSoftWipeFromTop ,
|
|
iettSoftWipeFromBottom ,
|
|
iettSweepClockwise ,
|
|
iettSweepCounterClockwise ,
|
|
iettFullSweepClockwise ,
|
|
iettExpandingSweepClockwise ,
|
|
iettRandomPuzzlePieces ,
|
|
iettRandomBoxesWithWord ,
|
|
iettRandomBigBoxes ,
|
|
iettTriangularWipe ,
|
|
iettShreddedFromLeft ,
|
|
iettShreddedFromRight ,
|
|
iettShreddedFromTop ,
|
|
iettShreddedFromBottom ,
|
|
iettShreddedFromTopAndLeft ,
|
|
iettShreddedFromTopAndRight ,
|
|
iettShreddedFromBottomAndLeft ,
|
|
iettShreddedFromBottomAndRight ,
|
|
iettShreddedFromHorizonAndLeft ,
|
|
iettShreddedFromHorizonAndRight ,
|
|
iettShreddedFromTopAndVerticalCenter ,
|
|
iettShreddedFromBottomAndVerticalCenter ,
|
|
iettShreddedFromCenter ,
|
|
iettShreddedToCenter ,
|
|
iettShreddedInToHorizon ,
|
|
iettShreddedInToVerticalCenter ,
|
|
iettShreddedOutFromHorizon ,
|
|
iettShreddedOutFromVerticalCenter ,
|
|
iettBarsInFromLeft ,
|
|
iettBarsInFromRight ,
|
|
iettBarsFromTop ,
|
|
iettBarsFromBottom ,
|
|
iettBarsLeftThenRight ,
|
|
iettBarsRightThenLeft ,
|
|
iettBarsTopThenBottom ,
|
|
iettBarsBottomThenTop ,
|
|
iettBarsFrombothSides ,
|
|
iettBarsFromTopAndBottom ,
|
|
iettCrisscrossWipeFromTopLeft ,
|
|
iettCrisscrossWipeFromTopRight ,
|
|
iettCrisscrossWipeFromBottomLeft ,
|
|
iettCrisscrossWipeFromBottomRight ,
|
|
iettCrisscrossWipeBounceFromTopLeft ,
|
|
iettCrisscrossWipeBounceFromTopRight ,
|
|
iettCrisscrossWipeBounceFromBottomLeft ,
|
|
iettCrisscrossWipeBounceFromBottomRight ,
|
|
iettCrisscrossWipeFromLeftRightAndTop ,
|
|
iettCrisscrossWipeFromLeftRightAndBottom ,
|
|
iettCrisscrossWipeFromLeftTopAndBottom ,
|
|
iettCrisscrossWipeFromTopLeftRightAndBottom ,
|
|
iettCrisscrossWipeFromRightTopAndBottom ,
|
|
iettCrisscrossWipeFromBottomLeftTopRight ,
|
|
iettSpeckledWipeFromLeft ,
|
|
iettSpeckledWipeFromRight ,
|
|
iettSpeckledWipeFromTop ,
|
|
iettSpeckledWipeFromBottom ,
|
|
iettExpandingExplosions ,
|
|
iettExpandingLightningBolts ,
|
|
iettExplosionWipeOut ,
|
|
iettExplosionWipeIn ,
|
|
iettExplosionWipeInAndOut ,
|
|
iettHeartWipeInAndOut ,
|
|
iettRandomHearts ,
|
|
iettExpandingHearts ,
|
|
iettHeartWipeOut ,
|
|
iettHeartWipeIn ,
|
|
iettExpandingTriangles ,
|
|
iettRectanglesFromTheLeft ,
|
|
iettRectanglesFromTheRight ,
|
|
iettRectanglesFromTheTop ,
|
|
iettRectanglesFromTheBottom ,
|
|
iettRandomWord ,
|
|
iettExpandingWord ,
|
|
iettWordWipeOut ,
|
|
iettWordWipeIn ,
|
|
iettWordWipeInAndOut ,
|
|
iettZigzagWipeFromHorizon ,
|
|
iettZigzagWipeFromVerticalCenter ,
|
|
iettZigzagWipeToHorizon ,
|
|
iettZigzagWipeToVerticalCenter ,
|
|
iettWordHalfSweep ,
|
|
iettWordFullSweep ,
|
|
iettRandomStar6s ,
|
|
iettExpandingStar6 ,
|
|
iettStar6WipeIn ,
|
|
iettStar6WipeOut ,
|
|
iettStar6WipeInAndOut
|
|
{$endif}
|
|
];
|
|
{//}
|
|
|
|
{
|
|
<FM>Description<FN>
|
|
The effects that ImageEn offers that allow you to smoothly transition from one image to another.
|
|
|
|
Notes:
|
|
- The style of many transition effects can be modified using <A TIEImageEnGlobalSettings.TransitionsDrawAlternative>
|
|
- The shape <L TIEImageEnGlobalSettings.TransitionsDrawShape>can be modified</L> for the following effects: iettRandomStar6s, iettExpandingStar6, iettStar6WipeIn, iettStar6WipeOut, iettStar6WipeInAndOut
|
|
- iettPanZoom is a special effect that does not transition to another image, but rather zooms in/out or pans to a position within the current image
|
|
|
|
<FM>iettShreddedFromLeft<FN>
|
|
<IMG help_images\Transition.jpg>
|
|
|
|
<FM>iettCubeRotateFromTop2<FN>
|
|
<IMG help_images\CubeTransition.jpg>
|
|
|
|
|
|
<TABLE>
|
|
<R> <H>Category</H> <H>Transition</H> <H>Description</H> <H>Notes</H></R>
|
|
<R> <C><FM>General<FN></C> <C>iettCrossDissolve</C> <C>Cross Fade</C> <C></C> </R>
|
|
<R> <C></C> <C>iettFadeOutIn</C> <C>Fade Out then In</C> <C></C> </R>
|
|
<R> <C></C> <C>iettPageFlip</C> <C>Page Flip</C> <C></C> </R>
|
|
<R> <C></C> <C>iettPageFlip2</C> <C>3D Page Flip</C> <C>May be CPU intensive</C> </R>
|
|
<R> <C></C> <C>iettReversePageFlip</C> <C>Reverse Page Flip</C> <C></C> </R>
|
|
<R> <C></C> <C>iettReversePageFlip2</C> <C>3D Reverse Page Flip</C> <C>May be CPU intensive</C> </R>
|
|
<R> <C></C> <C>iettCubeRotateFromLeft</C> <C>Cube Rotate from Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCubeRotateFromRight</C> <C>Cube Rotate from Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCubeRotateFromTop</C> <C>Cube Rotate from Top</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCubeRotateFromBottom</C> <C>Cube Rotate from Bottom</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCubeRotateFromLeft2</C> <C>3D Cube Rotate from Left</C> <C>May be CPU intensive</C> </R>
|
|
<R> <C></C> <C>iettCubeRotateFromRight2</C> <C>3D Cube Rotate from Right</C> <C>May be CPU intensive</C> </R>
|
|
<R> <C></C> <C>iettCubeRotateFromTop2</C> <C>3D Cube Rotate from Top</C> <C>May be CPU intensive</C> </R>
|
|
<R> <C></C> <C>iettCubeRotateFromBottom2</C> <C>3D Cube Rotate from Bottom</C> <C>May be CPU intensive</C> </R>
|
|
<R> <C><FM>Wipes<FN></C> <C>iettLeftRight1</C> <C>Wipe Left to Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettLeftRight2</C> <C>Wipe Left to Right 2</C> <C></C> </R>
|
|
<R> <C></C> <C>iettRightLeft1</C> <C>Wipe Right to Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettRightLeft2</C> <C>Wipe Right to Left 2</C> <C></C> </R>
|
|
<R> <C></C> <C>iettUpDown1</C> <C>Wipe Top to Bottom</C> <C></C> </R>
|
|
<R> <C></C> <C>iettUpDown2</C> <C>Wipe Top to Bottom 2</C> <C></C> </R>
|
|
<R> <C></C> <C>iettDownUp1</C> <C>Wipe Bottom to Top</C> <C></C> </R>
|
|
<R> <C></C> <C>iettDownUp2</C> <C>Wipe Bottom to Top 2</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCenter1</C> <C>Wipe Out from Center</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCenter2</C> <C>Wipe In to Center</C> <C></C> </R>
|
|
<R> <C></C> <C>iettWipeFromTopLeft</C> <C>Wipe from Top Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettWipeFromTopRight</C> <C>Wipe from Top Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettWipeFromBottomLeft</C> <C>Wipe from Bottom Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettWipeFromBottomRight</C> <C>Wipe from Bottom Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettWipeInFromTopAndBottom</C> <C>Wipe in from Top and Bottom</C> <C></C> </R>
|
|
<R> <C></C> <C>iettWipeFromHorizon</C> <C>Wipe from Horizon</C> <C></C> </R>
|
|
<R> <C></C> <C>iettWipeInFromSides</C> <C>Wipe in from Sides</C> <C></C> </R>
|
|
<R> <C></C> <C>iettWipeOutFromVerticalCenter</C> <C>Wipe out from Vertical Center</C> <C></C> </R>
|
|
<R> <C></C> <C>iettQuartersWipeInToCenter</C> <C>Quarters Wipe in to Center</C> <C></C> </R>
|
|
<R> <C><FM>Special Wipes<FN></C> <C>iettUnrollFromLeft</C> <C>Unroll from Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettUnrollFromRight</C> <C>Unroll from Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettUnrollFromTop</C> <C>Unroll from Top</C> <C></C> </R>
|
|
<R> <C></C> <C>iettUnrollFromBottom</C> <C>Unroll from Bottom</C> <C></C> </R>
|
|
<R> <C></C> <C>iettSpeckledWipeFromLeft</C> <C>Speckled Wipe from Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettSpeckledWipeFromRight</C> <C>Speckled Wipe from Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettSpeckledWipeFromTop</C> <C>Speckled Wipe from Top</C> <C></C> </R>
|
|
<R> <C></C> <C>iettSpeckledWipeFromBottom</C> <C>Speckled Wipe from Bottom</C> <C></C> </R>
|
|
<R> <C></C> <C>iettSoftWipeFromLeft</C> <C>Soft Wipe from Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettSoftWipeFromRight</C> <C>Soft Wipe from Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettSoftWipeFromTop</C> <C>Soft Wipe from Top</C> <C></C> </R>
|
|
<R> <C></C> <C>iettSoftWipeFromBottom</C> <C>Soft Wipe from Bottom</C> <C></C> </R>
|
|
<R> <C></C> <C>iettPacmanFromLeft</C> <C>Pacman Devours from Left/C> <C></C> </R>
|
|
<R> <C></C> <C>iettPacmanFromRight</C> <C>Pacman Devours from Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettPacman3Row</C> <C>Pacman Devours Three Rows</C> <C></C> </R>
|
|
<R> <C></C> <C>iettPacman4Row</C> <C>Pacman Devours Four Rows</C> <C></C> </R>
|
|
<R> <C></C> <C>iettPacman2SimRow</C> <C>Two Simultaneous Rows of Pacman</C> <C></C> </R>
|
|
<R> <C></C> <C>iettPacman4SimRow</C> <C>Four Simultaneous Rows of Pacman</C> <C></C> </R>
|
|
<R> <C></C> <C>iettPacman6SimRow</C> <C>Six Simultaneous Rows of Pacman</C> <C></C> </R>
|
|
<R> <C><FM>Curved Wipes<FN></C> <C>iettCurvedWipeFromLeft</C> <C>Curved Wipe from Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCurvedWipeFromRight</C> <C>Curved Wipe from Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCurvedWipeFromTop</C> <C>Curved Wipe from Top</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCurvedWipeFromBottom</C> <C>Curved Wipe from Bottom</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCurvedWipeFromTopLeft</C> <C>Curved Wipe from Top Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCurvedWipeFromTopRight</C> <C>Curved Wipe from Top Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCurvedWipeFromBottomLeft</C> <C>Curved Wipe from Bottom Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCurvedWipeFromBottomRight</C> <C>Curved Wipe from Bottom Right</C> <C></C> </R>
|
|
<R> <C><FM>Angled Wipes<FN></C> <C>iettWipeDiagonalFromTopLeft</C> <C>Wipe diagonal from Top Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettWipeDiagonalFromTopRight</C> <C>Wipe diagonal from Top Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettWipeDiagonalFromBottomLeft</C> <C>Wipe diagonal from Bottom Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettWipeDiagonalFromBottomRight</C> <C>Wipe diagonal from Bottom Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettArrowWipeFromLeft</C> <C>Arrow Wipe from Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettArrowWipeFromRight</C> <C>Arrow Wipe from Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettArrowWipeFromTop</C> <C>Arrow Wipe from Top</C> <C></C> </R>
|
|
<R> <C></C> <C>iettArrowWipeFromBottom</C> <C>Arrow Wipe from Bottom</C> <C></C> </R>
|
|
<R> <C></C> <C>iettHorizontalBowTieWipe</C> <C>Horizontal Bow Tie Wipe</C> <C></C> </R>
|
|
<R> <C></C> <C>iettVerticalBowTieWipe</C> <C>Vertical Bow Tie Wipe</C> <C></C> </R>
|
|
<R> <C></C> <C>iettZigzagWipeFromHorizon</C> <C>Zigzag Wipe from Horizon</C> <C></C> </R>
|
|
<R> <C></C> <C>iettZigzagWipeFromVerticalCenter</C> <C>Zigzag Wipe from Vertical Center</C> <C></C> </R>
|
|
<R> <C></C> <C>iettTriangularWipe</C> <C>Triangular Wipe</C> <C></C> </R>
|
|
<R> <C></C> <C>iettZigzagWipeToHorizon</C> <C>Zigzag Wipe To Horizon</C> <C></C> </R>
|
|
<R> <C></C> <C>iettZigzagWipeToVerticalCenter</C> <C>Zigzag Wipe To Vertical Center</C> <C></C> </R>
|
|
<R> <C></C> <C>iettAngledTwistIn</C> <C>Twist In</C> <C></C> </R>
|
|
<R> <C></C> <C>iettAngledTwistOut</C> <C>Twist Out</C> <C></C> </R>
|
|
<R> <C></C> <C>iettMultipleAngledTwistIn</C> <C>Multiple Twist In</C> <C></C> </R>
|
|
<R> <C></C> <C>iettMultipleAngledTwistOut</C> <C>Multiple Twist Out</C> <C></C> </R>
|
|
<R> <C><FM>Center Wipes<FN></C> <C>iettCircularWipeFromCenter</C> <C>Circular Wipe from Center</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCircularWipeToCenter</C> <C>Circular Wipe to Center</C> <C></C> </R>
|
|
<R> <C></C> <C>iettDiagonalCrossFromCenter</C> <C>Diagonal Cross from Center</C> <C></C> </R>
|
|
<R> <C></C> <C>iettDiagonalCrossToCenter</C> <C>Diagonal Cross to Center</C> <C></C> </R>
|
|
<R> <C></C> <C>iettDiamondWipeFromCenter</C> <C>Diamond Wipe from Center</C> <C></C> </R>
|
|
<R> <C></C> <C>iettDiamondWipeToCenter</C> <C>Diamond Wipe to Center</C> <C></C> </R>
|
|
<R> <C></C> <C>iettHeartWipeOut</C> <C>Heart Wipe from Center</C> <C></C> </R>
|
|
<R> <C></C> <C>iettHeartWipeIn</C> <C>Heart Wipe to Center</C> <C></C> </R>
|
|
<R> <C></C> <C>iettStar5WipeOut</C> <C>5 Pointed Star Wipe from Center</C> <C></C> </R>
|
|
<R> <C></C> <C>iettStar5WipeIn</C> <C>5 Pointed Star Wipe to Center</C> <C></C> </R>
|
|
<R> <C></C> <C>iettStar6WipeOut</C> <C>6 Pointed Star Wipe from Center (or <L TIEImageEnGlobalSettings.TransitionsDrawShape>alternative shape</L>)</C> <C></C> </R>
|
|
<R> <C></C> <C>iettStar6WipeIn</C> <C>6 Pointed Star Wipe to Center (or <L TIEImageEnGlobalSettings.TransitionsDrawShape>alternative shape</L>)</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExplosionWipeOut</C> <C>Explosion Wipe from Center</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExplosionWipeIn</C> <C>Explosion Wipe to Center</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCrossWipeOut</C> <C>Cross Wipe from Center</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCrossWipeIn</C> <C>Cross Wipe to Center</C> <C></C> </R>
|
|
<R> <C><FM>In and Outs<FN></C> <C>iettDiagonalBoxWipe</C> <C>Diamond Wipe In and Out</C> <C></C> </R>
|
|
<R> <C></C> <C>iettHeartWipeInAndOut</C> <C>Heart Wipe In and Out</C> <C></C> </R>
|
|
<R> <C></C> <C>iettStar5WipeInAndOut</C> <C>5 Pointed Star Wipe In and Out</C> <C></C> </R>
|
|
<R> <C></C> <C>iettStar6WipeInAndOut</C> <C>6 Pointed Star Wipe In and Out (or <L TIEImageEnGlobalSettings.TransitionsDrawShape>alternative shape</L>)</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExplosionWipeInAndOut</C> <C>Explosion Wipe In and Out</C> <C></C> </R>
|
|
<R> <C><FM>Shreds<FN></C> <C>iettShreddedFromLeft</C> <C>Shredded from Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettShreddedFromRight</C> <C>Shredded from Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettShreddedFromTop</C> <C>Shredded from Top</C> <C></C> </R>
|
|
<R> <C></C> <C>iettShreddedFromBottom</C> <C>Shredded from Bottom</C> <C></C> </R>
|
|
<R> <C></C> <C>iettShreddedFromTopAndLeft</C> <C>Shredded from Top and Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettShreddedFromTopAndRight</C> <C>Shredded from Top and Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettShreddedFromBottomAndLeft</C> <C>Shredded from Bottom and Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettShreddedFromBottomAndRight</C> <C>Shredded from Bottom and Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettShreddedFromHorizonAndLeft</C> <C>Shredded from Horizon and Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettShreddedFromHorizonAndRight</C> <C>Shredded from Horizon and Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettShreddedFromTopAndVerticalCenter</C> <C>Shredded from Top and Vertical Center</C> <C></C> </R>
|
|
<R> <C></C> <C>iettShreddedFromBottomAndVerticalCenter</C> <C>Shredded from Bottom and Vertical Center</C> <C></C> </R>
|
|
<R> <C></C> <C>iettShreddedFromCenter</C> <C>Shredded from Center</C> <C></C> </R>
|
|
<R> <C></C> <C>iettShreddedToCenter</C> <C>Shredded to Center</C> <C></C> </R>
|
|
<R> <C></C> <C>iettShreddedInToHorizon</C> <C>Shredded in to Horizon</C> <C></C> </R>
|
|
<R> <C></C> <C>iettShreddedInToVerticalCenter</C> <C>Shredded in to Vertical Center</C> <C></C> </R>
|
|
<R> <C></C> <C>iettShreddedOutFromHorizon</C> <C>Shredded out from Horizon</C> <C></C> </R>
|
|
<R> <C></C> <C>iettShreddedOutFromVerticalCenter</C> <C>Shredded out from Vertical Center</C> <C></C> </R>
|
|
<R> <C><FM>Bars<FN></C> <C>iettBarsInFromLeft</C> <C>Bars in from Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettBarsInFromRight</C> <C>Bars in from Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettBarsFromTop</C> <C>Bars from Top</C> <C></C> </R>
|
|
<R> <C></C> <C>iettBarsFromBottom</C> <C>Bars from Bottom</C> <C></C> </R>
|
|
<R> <C></C> <C>iettBarsLeftThenRight</C> <C>Bars Left then Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettBarsRightThenLeft</C> <C>Bars Right then Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettBarsTopThenBottom</C> <C>Bars Top then Bottom</C> <C></C> </R>
|
|
<R> <C></C> <C>iettBarsBottomThenTop</C> <C>Bars Bottom then Top</C> <C></C> </R>
|
|
<R> <C></C> <C>iettBarsFromBothSides</C> <C>Bars from both Sides</C> <C></C> </R>
|
|
<R> <C></C> <C>iettBarsFromTopAndBottom</C> <C>Bars from Top and Bottom</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCrisscrossWipeFromTopLeft</C> <C>Crisscross Wipe from Top Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCrisscrossWipeFromTopRight</C> <C>Crisscross Wipe from Top Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCrisscrossWipeFromBottomLeft</C> <C>Crisscross Wipe from Bottom Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCrisscrossWipeFromBottomRight</C> <C>Crisscross Wipe from Bottom Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCrisscrossWipeBounceFromTopLeft</C> <C>Crisscross Wipe Bounce from Top Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCrisscrossWipeBounceFromTopRight</C> <C>Crisscross Wipe Bounce from Top Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCrisscrossWipeBounceFromBottomLeft</C> <C>Crisscross Wipe Bounce from Bottom Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCrisscrossWipeBounceFromBottomRight</C> <C>Crisscross Wipe Bounce from Bottom Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCrisscrossWipeFromLeftRightAndTop</C> <C>Crisscross Wipe from Left Right and Top</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCrisscrossWipeFromLeftRightAndBottom</C> <C>Crisscross Wipe from Left Right and Bottom</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCrisscrossWipeFromLeftTopAndBottom</C> <C>Crisscross Wipe from Left Top and Bottom</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCrisscrossWipeFromTopLeftRightAndBottom</C> <C>Crisscross Wipe from Top Left Right and Bottom</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCrisscrossWipeFromRightTopAndBottom</C> <C>Crisscross Wipe from Right Top and Bottom</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCrisscrossWipeFromBottomLeftTopRight</C> <C>Crisscross Wipe from Bottom Left Top Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettRectanglesFromTheLeft</C> <C>Random Bars from the Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettRectanglesFromTheRight</C> <C>Random Bars from the Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettRectanglesFromTheTop</C> <C>Random Bars from the Top</C> <C></C> </R>
|
|
<R> <C></C> <C>iettRectanglesFromTheBottom</C> <C>Random Bars from the Bottom</C> <C></C> </R>
|
|
<R> <C><FM>Pushes<FN></C> <C>iettMoveLeftRight1</C> <C>Push Left to Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettMoveRightLeft1</C> <C>Push Right to Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettMoveUpDown1</C> <C>Push Top to Bottom</C> <C></C> </R>
|
|
<R> <C></C> <C>iettMoveDownUp1</C> <C>Push Bottom to Top</C> <C></C> </R>
|
|
<R> <C></C> <C>iettPushLeftAndSlideOut</C> <C>Push Left and Slide out</C> <C></C> </R>
|
|
<R> <C></C> <C>iettPushRightAndSlideOut</C> <C>Push Right and Slide out</C> <C></C> </R>
|
|
<R> <C></C> <C>iettPushUpAndSlideOut</C> <C>Push up and Slide out</C> <C></C> </R>
|
|
<R> <C></C> <C>iettPushDownAndSlideOut</C> <C>Push down and Slide out</C> <C></C> </R>
|
|
<R> <C></C> <C>iettPushAndSqueezeLeft</C> <C>Push and Squeeze Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettPushAndSqueezeRight</C> <C>Push and Squeeze Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettPushAndSqueezeUp</C> <C>Push and Squeeze up</C> <C></C> </R>
|
|
<R> <C></C> <C>iettPushAndSqueezeDown</C> <C>Push and Squeeze down</C> <C></C> </R>
|
|
<R> <C><FM>Slides<FN></C> <C>iettFromUpLeft</C> <C>Slide from Top Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettFromUpRight</C> <C>Slide from Top Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettFromBottomLeft</C> <C>Slide from Bottom Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettFromBottomRight</C> <C>Slide from Bottom Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettMoveLeftRight2</C> <C>Slide Out Left to Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettMoveRightLeft2</C> <C>Slide Out Right to Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettMoveUpDown2</C> <C>Slide Out Top to Bottom</C> <C></C> </R>
|
|
<R> <C></C> <C>iettMoveDownUp2</C> <C>Slide Out Bottom to Top</C> <C></C> </R>
|
|
<R> <C></C> <C>iettSlideInFromLeft</C> <C>Slide in from Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettSlideInFromRight</C> <C>Slide in from Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettSlideInFromTop</C> <C>Slide in from Top</C> <C></C> </R>
|
|
<R> <C></C> <C>iettSlideInFromBottom</C> <C>Slide in from Bottom</C> <C></C> </R>
|
|
<R> <C></C> <C>iettQuartersSlideInToCenter</C> <C>Quarters Slide in to Center</C> <C></C> </R>
|
|
<R> <C><FM>Shrinks<FN></C> <C>iettShrinkToTopLeft</C> <C>Shrink to Top Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettShrinkToTopRight</C> <C>Shrink to Top Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettShrinkToBottomLeft</C> <C>Shrink to Bottom Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettShrinkToBottomRight</C> <C>Shrink to Bottom Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettShrinkToCenter</C> <C>Shrink to Center</C> <C></C> </R>
|
|
<R> <C><FM>Expands<FN></C> <C>iettCenterZoom1</C> <C>Expand Out from Center</C> <C></C> </R>
|
|
<R> <C></C> <C>iettCenterZoom2</C> <C>Expand In to Center</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExpandFromLeft</C> <C>Expand from Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExpandFromRight</C> <C>Expand from Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExpandFromTop</C> <C>Expand from Top</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExpandFromBottom</C> <C>Expand from Bottom</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExpandFromTopLeft</C> <C>Expand from Top Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExpandFromTopRight</C> <C>Expand from Top Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExpandFromBottomLeft</C> <C>Expand from Bottom Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExpandFromBottomRight</C> <C>Expand from Bottom Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExpandInFromLeft</C> <C>Expand in from Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExpandInFromRight</C> <C>Expand in from Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExpandInFromTop</C> <C>Expand in from Top</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExpandInFromBottom</C> <C>Expand in from Bottom</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExpandInToVerticalCenter</C> <C>Expand in to Vertical Center</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExpandInToHorizon</C> <C>Expand in to Horizon</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExpandInFromSides</C> <C>Expand in from Sides</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExpandInFromTopAndBottom</C> <C>Expand in from Top and Bottom</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExpandOutFromHorizon</C> <C>Expand out from Horizon</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExpandOutFromVerticalCenter</C> <C>Expand out from Vertical Center</C> <C></C> </R>
|
|
<R> <C></C> <C>iettQuartersExpandToCenter</C> <C>Quarters Expand to Center</C> <C></C> </R>
|
|
<R> <C><FM>Multi-Expanders<FN></C> <C>iettExpandingRectangles</C> <C>Expanding Rectangles</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExpandingTriangles</C> <C>Expanding Triangles</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExpandingCircles</C> <C>Expanding Circles</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExpandingDiamonds</C> <C>Expanding Diamonds</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExpandingHearts</C> <C>Expanding Hearts</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExpandingStar5</C> <C>Expanding 5 Pointed Stars</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExpandingStar6</C> <C>Expanding 6 Pointed Stars (or <L TIEImageEnGlobalSettings.TransitionsDrawShape>alternative shape</L>)</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExpandingExplosions</C> <C>Expanding Explosions</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExpandingLightningBolts</C> <C>Expanding Lightning Bolts</C> <C></C> </R>
|
|
<R> <C><FM>Randoms<FN></C> <C>iettRandomPoints</C> <C>Random Points</C> <C></C> </R>
|
|
<R> <C></C> <C>iettRandomBoxes</C> <C>Random Boxes</C> <C></C> </R>
|
|
<R> <C></C> <C>iettRandomBigBoxes</C> <C>Random Big Boxes</C> <C></C> </R>
|
|
<R> <C></C> <C>iettRandomHearts</C> <C>Random Hearts</C> <C></C> </R>
|
|
<R> <C></C> <C>iettRandomStar5s</C> <C>Random 5 Pointed Stars</C> <C></C> </R>
|
|
<R> <C></C> <C>iettRandomStar6s</C> <C>Random 6 Pointed Stars (or <L TIEImageEnGlobalSettings.TransitionsDrawShape>alternative shape</L>)</C> <C></C> </R>
|
|
<R> <C></C> <C>iettRandomExplosions</C> <C>Random Explosions</C> <C></C> </R>
|
|
<R> <C></C> <C>iettRandomPuzzlePieces</C> <C>Random Puzzle Pieces</C> <C></C> </R>
|
|
<R> <C><FM>Rotates<FN></C> <C>iettDiagonalSweepClockwise</C> <C>Diagonal Sweep Clockwise</C> <C></C> </R>
|
|
<R> <C></C> <C>iettDiagonalSweepCounterClockwise</C> <C>Diagonal Sweep Counter-Clockwise</C> <C></C> </R>
|
|
<R> <C></C> <C>iettSweepClockwise</C> <C>Sweep Clockwise</C> <C></C> </R>
|
|
<R> <C></C> <C>iettSweepCounterClockwise</C> <C>Sweep Counter-Clockwise</C> <C></C> </R>
|
|
<R> <C></C> <C>iettFullSweepClockwise</C> <C> Full Sweep Clockwise</C> <C></C> </R>
|
|
<R> <C></C> <C>iettExpandingSweepClockwise</C> <C>Expanding Sweep Clockwise</C> <C></C> </R>
|
|
<R> <C></C> <C>iettStarburstClockwiseFromCenter</C> <C>Starburst Clockwise</C> <C></C> </R>
|
|
<R> <C></C> <C>iettStarburstCounterClockwiseFromCenter</C> <C>Starburst Counter-Clockwise</C> <C></C> </R>
|
|
<R> <C></C> <C>iettRotationalRectangle</C> <C>Rotational Rectangle Clockwise</C> <C></C> </R>
|
|
<R> <C></C> <C>iettRotationalRectangleCounterClockwise</C> <C>Rotational Rectangle Counter-Clockwise</C> <C></C> </R>
|
|
<R> <C></C> <C>iettRotationalStar</C> <C>Rotational Star Clockwise</C> <C></C> </R>
|
|
<R> <C></C> <C>iettRotationalStarCounterClockwise</C> <C>Rotational Star Counter-Clockwise</C> <C></C> </R>
|
|
<R> <C></C> <C>iettSpirallingRectangleClockwise</C> <C>Spiralling Rectangle Clockwise</C> <C></C> </R>
|
|
<R> <C></C> <C>iettSpirallingRectangleCounterClockwise</C> <C>Spiralling Rectangle Counter-Clockwise</C> <C></C> </R>
|
|
<R> <C><FM>Word Effects<FN></C> <C>iettRandomBoxesWithWord</C> <C>Random Boxes with Word</C> <C>Specify word properties using IEGlobalSettings().<A TIEImageEnGlobalSettings.WordTransitionParams>. Full word is always shown; does not cycle.</C> </R>
|
|
<R> <C></C> <C>iettRandomWord</C> <C>Random Letters of Word</C> <C>Specify word properties using IEGlobalSettings().<A TIEImageEnGlobalSettings.WordTransitionParams></C> </R>
|
|
<R> <C></C> <C>iettExpandingWord</C> <C>Expanding Letters of Word</C> <C>Specify word properties using IEGlobalSettings().<A TIEImageEnGlobalSettings.WordTransitionParams></C> </R>
|
|
<R> <C></C> <C>iettWordWipeOut</C> <C>Word Wipe from Center</C> <C>Specify word properties using IEGlobalSettings().<A TIEImageEnGlobalSettings.WordTransitionParams></C> </R>
|
|
<R> <C></C> <C>iettWordWipeIn</C> <C>Word Wipe to Center</C> <C>Specify word properties using IEGlobalSettings().<A TIEImageEnGlobalSettings.WordTransitionParams></C> </R>
|
|
<R> <C></C> <C>iettWordWipeInAndOut</C> <C>Word Wipe In and Out</C> <C>Specify word properties using IEGlobalSettings().<A TIEImageEnGlobalSettings.WordTransitionParams></C> </R>
|
|
<R> <C></C> <C>iettWordHalfSweep</C> <C>Half Sweep with Word</C> <C>Specify word properties using IEGlobalSettings().<A TIEImageEnGlobalSettings.WordTransitionParams></C> </R>
|
|
<R> <C></C> <C>iettWordFullSweep</C> <C>Full Sweep with Word</C> <C>Specify word properties using IEGlobalSettings().<A TIEImageEnGlobalSettings.WordTransitionParams></C> </R>
|
|
<R> <C></C> <C>iettWordFullExpandingSweep</C> <C>Expanding Sweep with Word</C> <C>Specify word properties using IEGlobalSettings().<A TIEImageEnGlobalSettings.WordTransitionParams></C> </R>
|
|
<R> <C><FM>Other<FN></C> <C>iettBuildUpFromLeft</C> <C>Build up from Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettBuildUpFromRight</C> <C>Build up from Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettBuildUpFromTop</C> <C>Build up from Top</C> <C></C> </R>
|
|
<R> <C></C> <C>iettBuildUpFromBottom</C> <C>Build up from Bottom</C> <C></C> </R>
|
|
<R> <C></C> <C>iettHorizontalBlinds</C> <C>Horizontal Blinds</C> <C></C> </R>
|
|
<R> <C></C> <C>iettVerticalBlinds</C> <C>Vertical Blinds</C> <C></C> </R>
|
|
<R> <C></C> <C>iettUnevenBlindsFromLeft</C> <C>Uneven Blinds from Left</C> <C></C> </R>
|
|
<R> <C></C> <C>iettUnevenBlindsFromRight</C> <C>Uneven Blinds from Right</C> <C></C> </R>
|
|
<R> <C></C> <C>iettUnevenBlindsFromTop</C> <C>Uneven Blinds from Top</C> <C></C> </R>
|
|
<R> <C></C> <C>iettUnevenBlindsFromBottom</C> <C>Uneven Blinds from Bottom</C> <C></C> </R>
|
|
<R> <C><FM>Legacy<FN></C> <C>iettFadeOut</C> <C>Fade Out</C> <C></C> </R>
|
|
<R> <C></C> <C>iettFadeIn</C> <C>Fade In</C> <C></C> </R>
|
|
<R> <C><FM>Special<FN></C> <C>iettPanZoom</C> <C>Pan and Zoom</C> <C>Special usage: Must specify Start and End points</C> </R>
|
|
</TABLE>
|
|
!!}
|
|
|
|
type
|
|
{!!
|
|
<FS>TIETransitionTiming
|
|
|
|
<FM>Declaration<FC>
|
|
}
|
|
TIETransitionTiming=(iettLinear, iettExponential, iettLogarithmic);
|
|
{!!}
|
|
|
|
{!!
|
|
<FS>TIETransitionStepEvent
|
|
|
|
<FM>Declaration<FC>
|
|
}
|
|
TIETransitionStepEvent=procedure(Sender: TObject; step: Integer) of object;
|
|
{!!}
|
|
|
|
TIETransitionEffects = class;
|
|
|
|
{!!
|
|
<FS>TIEOnTransitionPaint
|
|
|
|
<FM>Declaration<FC>
|
|
}
|
|
TIEOnTransitionPaint = procedure(Sender: TObject; Bitmap: TBitmap; Transition: TIETransitionEffects; Step: Integer) of object;
|
|
{!!}
|
|
|
|
|
|
// transition effects class
|
|
TIETransitionEffects = class
|
|
private
|
|
fSourceShot, fTargetShot, fCurrentView: TBitmap;
|
|
fFullImage : TObject;
|
|
fSourceShotLines, fTargetShotLines, fCurrentViewLines: PPointerArray;
|
|
fWidth, fHeight: integer;
|
|
fRunning: boolean;
|
|
fOwner: TWinControl;
|
|
fTimer: TTimer;
|
|
fStep: integer;
|
|
fFirstStep : Boolean; // some transitions require initializing
|
|
fAccum1: integer;
|
|
fTransition: TIETransitionType;
|
|
fDuration: integer; // time in millisecs
|
|
fStartTick: dword;
|
|
fUpdateOnStop: boolean;
|
|
fStartRect: TRect;
|
|
fEndRect: TRect;
|
|
fOnTransitionStop: TNotifyEvent;
|
|
fOnTransitionStep: TIETransitionStepEvent;
|
|
fTiming: TIETransitionTiming;
|
|
fBackground: TColor;
|
|
fSmoothing: Integer;
|
|
|
|
// Pan Zoom Smoothing
|
|
fMinLeft, fMaxLeft,
|
|
fMinTop, fMaxTop,
|
|
fMinBottom, fMaxBottom,
|
|
fMinRight, fMaxRight: integer;
|
|
fOnTransitionPaint: TIEOnTransitionPaint;
|
|
procedure SetOnTransitionPaint(const Value: TIEOnTransitionPaint);
|
|
procedure MakeTransition(DestCanvas : TCanvas; bExplicitUpdate : Boolean = False);
|
|
procedure SetFullImage(const Value: TObject);
|
|
protected
|
|
fFrames: integer; // debug counter
|
|
|
|
procedure TimerEvent(Sender: TObject);
|
|
//
|
|
procedure CrossDissolve(Step: integer);
|
|
procedure FadeOut(Step: integer);
|
|
procedure FadeIn(Step: integer);
|
|
procedure FadeOutIn(Step: integer);
|
|
procedure LeftRight1(Step: integer);
|
|
procedure LeftRight2(Step: integer);
|
|
procedure RightLeft1(Step: integer);
|
|
procedure RightLeft2(Step: integer);
|
|
procedure UpDown1(Step: integer);
|
|
procedure UpDown2(Step: integer);
|
|
procedure DownUp1(Step: integer);
|
|
procedure DownUp2(Step: integer);
|
|
procedure MoveLeftRight1(Step: integer);
|
|
procedure MoveLeftRight2(Step: integer);
|
|
procedure MoveRightLeft1(Step: integer);
|
|
procedure MoveRightLeft2(Step: integer);
|
|
procedure MoveUpDown1(Step: integer);
|
|
procedure MoveUpDown2(Step: integer);
|
|
procedure MoveDownUp1(Step: integer);
|
|
procedure MoveDownUp2(Step: integer);
|
|
procedure RandomPoints(Step: integer);
|
|
procedure FromUpLeft(Step: integer);
|
|
procedure FromUpRight(Step: integer);
|
|
procedure FromBottomLeft(Step: integer);
|
|
procedure FromBottomRight(Step: integer);
|
|
procedure RandomBoxes(Step: integer);
|
|
procedure Center1(Step: integer);
|
|
procedure Center2(Step: integer);
|
|
procedure CenterZoom1(Step: integer);
|
|
procedure CenterZoom2(Step: integer);
|
|
procedure PanZoom(Step: integer);
|
|
|
|
{$ifdef IEINCLUDEEXTRATRANSITIONS}
|
|
Procedure CubeRotateDarkenEdges(bVertical, bForward: Boolean; iCurrentPosition, Step : Integer);
|
|
procedure CubeRotateFromLeft(Step: integer);
|
|
procedure CubeRotateFromRight(Step: integer);
|
|
procedure CubeRotateFromTop(Step: integer);
|
|
procedure CubeRotateFromBottom(Step: integer);
|
|
procedure CubeRotateFromLeft3D(Step: integer);
|
|
procedure CubeRotateFromRight3D(Step: integer);
|
|
procedure CubeRotateFromTop3D(Step: integer);
|
|
procedure CubeRotateFromBottom3D(Step: integer);
|
|
|
|
procedure PageFlipEffect(Step: Integer; bForward: Boolean);
|
|
procedure PageFlipEffect3D(Step: Integer; bForward: Boolean);
|
|
procedure PageFlipDarkenEdges(iCurrentPosition, Step : Integer; bForward: Boolean);
|
|
|
|
procedure SoftWipeVerticalEx(Step: integer; bForward : Boolean);
|
|
procedure SoftWipeHorizontalEx(Step: integer; bForward : Boolean);
|
|
procedure SoftWipeFromLeft(Step: integer);
|
|
procedure SoftWipeFromRight(Step: integer);
|
|
procedure SoftWipeFromTop(Step: integer);
|
|
procedure SoftWipeFromBottom(Step: integer);
|
|
{$endif}
|
|
|
|
public
|
|
constructor Create(Owner: TWinControl);
|
|
destructor Destroy; override;
|
|
property SourceShot: TBitmap read fSourceShot;
|
|
property TargetShot: TBitmap read fTargetShot;
|
|
property Running: boolean read fRunning;
|
|
procedure Run(UpdateOnStop: boolean);
|
|
procedure Stop;
|
|
property Transition: TIETransitionType read fTransition write fTransition;
|
|
procedure SetSizes(Width, Height: integer);
|
|
property Duration: integer read fDuration write fDuration;
|
|
procedure PrepareBitmap(OriginalBitmap, TargetBitmap: TBitmap);
|
|
procedure CreateBitmap(TransitionProgress : Single; DestBitmap : TBitmap);
|
|
property FullImage : TObject read fFullImage write SetFullImage; // Must be TIEBitmap
|
|
property StartRect: TRect read fStartRect write fStartRect;
|
|
property EndRect: TRect read fEndRect write fEndRect;
|
|
property OnTransitionStop: TNotifyEvent read fOnTransitionStop write fOnTransitionStop;
|
|
property OnTransitionStep: TIETransitionStepEvent read fOnTransitionStep write fOnTransitionStep;
|
|
property OnTransitionPaint: TIEOnTransitionPaint read fOnTransitionPaint write SetOnTransitionPaint;
|
|
property Timing: TIETransitionTiming read fTiming write fTiming;
|
|
property Background: TColor read fBackground write fBackground;
|
|
|
|
// Smoothing of Pan Zoom effects
|
|
property Smoothing: Integer read fSmoothing write fSmoothing;
|
|
end;
|
|
|
|
|
|
|
|
type
|
|
TTransitionCategory = (tcGeneral, tcWipes, tcSpecialWipes, tcCurvedWipes, tcAngledWipes, tcCenterWipes, tcInAndOuts,
|
|
tcShreds, tcBars, tcSlides, tcPushes, tcShrinks, tcExpands, tcMultiExpanders, tcRandoms,
|
|
tcRotates, tcWordEffects, tcOther, tcUnattractive);
|
|
TEffect = record
|
|
Name : String; // Display name for transition
|
|
Category : TTransitionCategory; // A categorization of the transition
|
|
Overlay : Boolean; // If true, the transition is suitable when changing from one image to a modified version of the same image (e.g. Image, then the same image with text applied). It is commonly used to "Reveal" text, like in PowerPoint (e.g. Text fading in on a title page)
|
|
end;
|
|
|
|
const
|
|
{$ifdef IEINCLUDEEXTRATRANSITIONS}
|
|
MAX_TRANSITIONS = 249;
|
|
{$else}
|
|
MAX_TRANSITIONS = 30;
|
|
{$endif}
|
|
|
|
IETransitionList: array[1..MAX_TRANSITIONS] of TEffect = (
|
|
|
|
// ADD IMAGEEN TRANSITIONS TO OUR ARRAY SO ALL TRANSITION NAMES CAN BE ACCESSED
|
|
|
|
(Name: 'Cross Fade'; Category: tcGeneral; Overlay: True),
|
|
(Name: 'Fade Out'; Category: tcUnattractive; Overlay: False),
|
|
(Name: 'Fade In'; Category: tcUnattractive; Overlay: False),
|
|
(Name: 'Fade Out then In'; Category: tcGeneral; Overlay: False),
|
|
|
|
(Name: 'Wipe Left to Right'; Category: tcWipes; Overlay: True),
|
|
(Name: 'Wipe Left to Right 2'; Category: tcWipes; Overlay: True),
|
|
(Name: 'Wipe Right to Left'; Category: tcWipes; Overlay: True),
|
|
(Name: 'Wipe Right to Left 2'; Category: tcWipes; Overlay: True),
|
|
(Name: 'Wipe Top to Bottom'; Category: tcWipes; Overlay: True),
|
|
(Name: 'Wipe Top to Bottom 2'; Category: tcWipes; Overlay: True),
|
|
(Name: 'Wipe Bottom to Top'; Category: tcWipes; Overlay: True),
|
|
(Name: 'Wipe Bottom to Top 2'; Category: tcWipes; Overlay: True),
|
|
|
|
(Name: 'Slide from Top Left'; Category: tcSlides; Overlay: False),
|
|
(Name: 'Slide from Top Right'; Category: tcSlides; Overlay: False),
|
|
(Name: 'Slide from Bottom Left'; Category: tcSlides; Overlay: False),
|
|
(Name: 'Slide from Bottom Right'; Category: tcSlides; Overlay: False)
|
|
,
|
|
(Name: 'Push Left to Right'; Category: tcPushes; Overlay: False),
|
|
(Name: 'Slide Out Left to Right'; Category: tcSlides; Overlay: False),
|
|
(Name: 'Push Right to Left'; Category: tcPushes; Overlay: False),
|
|
(Name: 'Slide Out Right to Left'; Category: tcSlides; Overlay: False),
|
|
(Name: 'Push Top to Bottom'; Category: tcPushes; Overlay: False),
|
|
(Name: 'Slide Out Top to Bottom'; Category: tcSlides; Overlay: False),
|
|
(Name: 'Push Bottom to Top'; Category: tcPushes; Overlay: False),
|
|
(Name: 'Slide Out Bottom to Top'; Category: tcSlides; Overlay: False),
|
|
|
|
(Name: 'Random Points'; Category: tcRandoms; Overlay: True),
|
|
(Name: 'Random Boxes'; Category: tcRandoms; Overlay: True),
|
|
|
|
(Name: 'Wipe Out from Center'; Category: tcWipes; Overlay: True),
|
|
(Name: 'Wipe In to Center'; Category: tcWipes; Overlay: True),
|
|
(Name: 'Expand Out from Center'; Category: tcExpands; Overlay: False),
|
|
(Name: 'Expand In to Center'; Category: tcExpands; Overlay: False)
|
|
|
|
{$ifdef IEINCLUDEEXTRATRANSITIONS}
|
|
|
|
// PS EFFECTS START
|
|
, (Name: 'Expand from Left'; Category: tcExpands; Overlay: False),
|
|
(Name: 'Expand from Right'; Category: tcExpands; Overlay: False),
|
|
(Name: 'Expand from Top'; Category: tcExpands; Overlay: False),
|
|
(Name: 'Expand from Bottom'; Category: tcExpands; Overlay: False),
|
|
(Name: 'Expand from Top Left'; Category: tcExpands; Overlay: False),
|
|
(Name: 'Expand from Top Right'; Category: tcExpands; Overlay: False),
|
|
(Name: 'Expand from Bottom Left'; Category: tcExpands; Overlay: False),
|
|
(Name: 'Expand from Bottom Right'; Category: tcExpands; Overlay: False),
|
|
(Name: 'Expand in from Left'; Category: tcExpands; Overlay: False),
|
|
(Name: 'Expand in from Right'; Category: tcExpands; Overlay: False),
|
|
(Name: 'Expand in from Top'; Category: tcExpands; Overlay: False),
|
|
(Name: 'Expand in from Bottom'; Category: tcExpands; Overlay: False),
|
|
(Name: 'Expand in to Vertical Center'; Category: tcExpands; Overlay: False),
|
|
(Name: 'Expand in to Horizon'; Category: tcExpands; Overlay: False),
|
|
(Name: 'Expand in from Sides'; Category: tcExpands; Overlay: False),
|
|
(Name: 'Expand in from Top and Bottom'; Category: tcExpands; Overlay: False),
|
|
(Name: 'Expand out from Horizon'; Category: tcExpands; Overlay: False),
|
|
(Name: 'Expand out from Vertical Center'; Category: tcExpands; Overlay: False),
|
|
|
|
(Name: 'Wipe from Top Left'; Category: tcWipes; Overlay: True),
|
|
(Name: 'Wipe from Top Right'; Category: tcWipes; Overlay: True),
|
|
(Name: 'Wipe from Bottom Left'; Category: tcWipes; Overlay: True),
|
|
(Name: 'Wipe from Bottom Right'; Category: tcWipes; Overlay: True),
|
|
(Name: 'Wipe in from Top and Bottom'; Category: tcWipes; Overlay: True),
|
|
(Name: 'Wipe from Horizon'; Category: tcWipes; Overlay: True),
|
|
(Name: 'Wipe in from Sides'; Category: tcWipes; Overlay: True),
|
|
(Name: 'Wipe out from Vertical Center'; Category: tcWipes; Overlay: True),
|
|
|
|
(Name: 'Build up from Left'; Category: tcOther; Overlay: False),
|
|
(Name: 'Build up from Right'; Category: tcOther; Overlay: False),
|
|
(Name: 'Build up from Top'; Category: tcOther; Overlay: False),
|
|
(Name: 'Build up from Bottom'; Category: tcOther; Overlay: False),
|
|
|
|
(Name: 'Unroll from Left'; Category: tcSpecialWipes; Overlay: True),
|
|
(Name: 'Unroll from Right'; Category: tcSpecialWipes; Overlay: True),
|
|
(Name: 'Unroll from Top'; Category: tcSpecialWipes; Overlay: True),
|
|
(Name: 'Unroll from Bottom'; Category: tcSpecialWipes; Overlay: True),
|
|
|
|
(Name: 'Slide in from Left'; Category: tcSlides; Overlay: False),
|
|
(Name: 'Slide in from Right'; Category: tcSlides; Overlay: False),
|
|
(Name: 'Slide in from Top'; Category: tcSlides; Overlay: False),
|
|
(Name: 'Slide in from Bottom'; Category: tcSlides; Overlay: False),
|
|
|
|
(Name: 'Shrink to Top Left'; Category: tcShrinks; Overlay: False),
|
|
(Name: 'Shrink to Top Right'; Category: tcShrinks; Overlay: False),
|
|
(Name: 'Shrink to Bottom Left'; Category: tcShrinks; Overlay: False),
|
|
(Name: 'Shrink to Bottom Right'; Category: tcShrinks; Overlay: False),
|
|
(Name: 'Shrink to Center'; Category: tcShrinks; Overlay: False),
|
|
|
|
(Name: 'Quarters Wipe in to Center'; Category: tcWipes; Overlay: True),
|
|
(Name: 'Quarters Expand to Center'; Category: tcExpands; Overlay: False),
|
|
(Name: 'Quarters Slide in to Center'; Category: tcSlides; Overlay: False),
|
|
|
|
(Name: 'Curved Wipe from Left'; Category: tcCurvedWipes; Overlay: True),
|
|
(Name: 'Curved Wipe from Right'; Category: tcCurvedWipes; Overlay: True),
|
|
(Name: 'Curved Wipe from Top'; Category: tcCurvedWipes; Overlay: True),
|
|
(Name: 'Curved Wipe from Bottom'; Category: tcCurvedWipes; Overlay: True),
|
|
|
|
(Name: 'Curved Wipe from Top Left'; Category: tcCurvedWipes; Overlay: True),
|
|
(Name: 'Curved Wipe from Top Right'; Category: tcCurvedWipes; Overlay: True),
|
|
(Name: 'Curved Wipe from Bottom Left'; Category: tcCurvedWipes; Overlay: True),
|
|
(Name: 'Curved Wipe from Bottom Right'; Category: tcCurvedWipes; Overlay: True),
|
|
|
|
(Name: 'Bars in from Left'; Category: tcBars; Overlay: True),
|
|
(Name: 'Bars in from Right'; Category: tcBars; Overlay: True),
|
|
(Name: 'Bars from Top'; Category: tcBars; Overlay: True),
|
|
(Name: 'Bars from Bottom'; Category: tcBars; Overlay: True),
|
|
(Name: 'Bars Left then Right'; Category: tcBars; Overlay: True),
|
|
(Name: 'Bars Right then Left'; Category: tcBars; Overlay: True),
|
|
(Name: 'Bars Top then Bottom'; Category: tcBars; Overlay: True),
|
|
(Name: 'Bars Bottom then Top'; Category: tcBars; Overlay: True),
|
|
(Name: 'Bars from both Sides'; Category: tcBars; Overlay: True),
|
|
(Name: 'Bars from Top and Bottom'; Category: tcBars; Overlay: True),
|
|
|
|
(Name: 'Shredded from Left'; Category: tcShreds; Overlay: True),
|
|
(Name: 'Shredded from Right'; Category: tcShreds; Overlay: True),
|
|
(Name: 'Shredded from Top'; Category: tcShreds; Overlay: True),
|
|
(Name: 'Shredded from Bottom'; Category: tcShreds; Overlay: True),
|
|
(Name: 'Shredded from Top and Left'; Category: tcShreds; Overlay: True),
|
|
(Name: 'Shredded from Top and Right'; Category: tcShreds; Overlay: True),
|
|
(Name: 'Shredded from Bottom and Left'; Category: tcShreds; Overlay: True),
|
|
(Name: 'Shredded from Bottom and Right'; Category: tcShreds; Overlay: True),
|
|
(Name: 'Shredded from Horizon and Left'; Category: tcShreds; Overlay: True),
|
|
(Name: 'Shredded from Horizon and Right'; Category: tcShreds; Overlay: True),
|
|
(Name: 'Shredded from Top and Vertical Center'; Category: tcShreds; Overlay: True),
|
|
(Name: 'Shredded from Bottom and Vertical Center'; Category: tcShreds; Overlay: True),
|
|
(Name: 'Shredded from Center'; Category: tcShreds; Overlay: True),
|
|
(Name: 'Shredded to Center'; Category: tcShreds; Overlay: True),
|
|
(Name: 'Shredded in to Horizon'; Category: tcShreds; Overlay: True),
|
|
(Name: 'Shredded in to Vertical Center'; Category: tcShreds; Overlay: True),
|
|
(Name: 'Shredded out from Horizon'; Category: tcShreds; Overlay: True),
|
|
(Name: 'Shredded out from Vertical Center'; Category: tcShreds; Overlay: True),
|
|
|
|
(Name: 'Expanding Rectangles'; Category: tcMultiExpanders; Overlay: True),
|
|
(Name: 'Expanding Triangles'; Category: tcMultiExpanders; Overlay: True),
|
|
(Name: 'Expanding Circles'; Category: tcMultiExpanders; Overlay: True),
|
|
(Name: 'Expanding Diamonds'; Category: tcMultiExpanders; Overlay: True),
|
|
|
|
(Name: 'Circular Wipe from Center'; Category: tcCenterWipes; Overlay: True),
|
|
(Name: 'Circular Wipe to Center'; Category: tcCenterWipes; Overlay: True),
|
|
|
|
(Name: 'Crisscross Wipe from Top Left'; Category: tcBars; Overlay: True),
|
|
(Name: 'Crisscross Wipe from Top Right'; Category: tcBars; Overlay: True),
|
|
(Name: 'Crisscross Wipe from Bottom Left'; Category: tcBars; Overlay: True),
|
|
(Name: 'Crisscross Wipe from Bottom Right'; Category: tcBars; Overlay: True),
|
|
(Name: 'Crisscross Wipe Bounce from Top Left'; Category: tcBars; Overlay: True),
|
|
(Name: 'Crisscross Wipe Bounce from Top Right'; Category: tcBars; Overlay: True),
|
|
(Name: 'Crisscross Wipe Bounce from Bottom Left'; Category: tcBars; Overlay: True),
|
|
(Name: 'Crisscross Wipe Bounce from Bottom Right'; Category: tcBars; Overlay: True),
|
|
(Name: 'Crisscross Wipe from Left Right and Top'; Category: tcBars; Overlay: True),
|
|
(Name: 'Crisscross Wipe from Left Right and Bottom'; Category: tcBars; Overlay: True),
|
|
(Name: 'Crisscross Wipe from Left Top and Bottom'; Category: tcBars; Overlay: True),
|
|
(Name: 'Crisscross Wipe from Top Left Right and Bottom'; Category: tcBars; Overlay: True),
|
|
(Name: 'Crisscross Wipe from Right Top and Bottom'; Category: tcBars; Overlay: True),
|
|
(Name: 'Crisscross Wipe from Bottom Left Top Right'; Category: tcBars; Overlay: True),
|
|
|
|
(Name: 'Wipe diagonal from Top Left'; Category: tcAngledWipes; Overlay: True),
|
|
(Name: 'Wipe diagonal from Top Right'; Category: tcAngledWipes; Overlay: True),
|
|
(Name: 'Wipe diagonal from Bottom Left'; Category: tcAngledWipes; Overlay: True),
|
|
(Name: 'Wipe diagonal from Bottom Right'; Category: tcAngledWipes; Overlay: True),
|
|
|
|
(Name: 'Diagonal Sweep Clockwise'; Category: tcRotates; Overlay: True),
|
|
(Name: 'Diagonal Sweep Counter-Clockwise'; Category: tcRotates; Overlay: True),
|
|
(Name: 'Half Sweep Clockwise'; Category: tcRotates; Overlay: True),
|
|
(Name: 'Half Sweep Counter-Clockwise'; Category: tcRotates; Overlay: True),
|
|
|
|
(Name: 'Starburst Clockwise'; Category: tcRotates; Overlay: True),
|
|
(Name: 'Starburst Counter-Clockwise'; Category: tcRotates; Overlay: True),
|
|
|
|
(Name: 'Rotational Rectangle Clockwise'; Category: tcRotates; Overlay: False),
|
|
(Name: 'Rotational Rectangle Counter-Clockwise'; Category: tcRotates; Overlay: False),
|
|
(Name: 'Rotational Star Clockwise'; Category: tcRotates; Overlay: True),
|
|
(Name: 'Rotational Star Counter-Clockwise'; Category: tcRotates; Overlay: True),
|
|
|
|
(Name: 'Speckled Wipe from Left'; Category: tcSpecialWipes; Overlay: True),
|
|
(Name: 'Speckled Wipe from Right'; Category: tcSpecialWipes; Overlay: True),
|
|
(Name: 'Speckled Wipe from Top'; Category: tcSpecialWipes; Overlay: True),
|
|
(Name: 'Speckled Wipe from Bottom'; Category: tcSpecialWipes; Overlay: True),
|
|
|
|
(Name: 'Push Left and Slide out'; Category: tcPushes; Overlay: False),
|
|
(Name: 'Push Right and Slide out'; Category: tcPushes; Overlay: False),
|
|
(Name: 'Push up and Slide out'; Category: tcPushes; Overlay: False),
|
|
(Name: 'Push down and Slide out'; Category: tcPushes; Overlay: False),
|
|
|
|
(Name: 'Push and Squeeze Left'; Category: tcPushes; Overlay: False),
|
|
(Name: 'Push and Squeeze Right'; Category: tcPushes; Overlay: False),
|
|
(Name: 'Push and Squeeze up'; Category: tcPushes; Overlay: False),
|
|
(Name: 'Push and Squeeze down'; Category: tcPushes; Overlay: False),
|
|
|
|
(Name: 'Horizontal Blinds'; Category: tcOther; Overlay: True),
|
|
(Name: 'Vertical Blinds'; Category: tcOther; Overlay: True),
|
|
|
|
(Name: 'Uneven Blinds from Left'; Category: tcOther; Overlay: True),
|
|
(Name: 'Uneven Blinds from Right'; Category: tcOther; Overlay: True),
|
|
(Name: 'Uneven Blinds from Top'; Category: tcOther; Overlay: True),
|
|
(Name: 'Uneven Blinds from Bottom'; Category: tcOther; Overlay: True),
|
|
|
|
(Name: 'Wide Bars from the Left'; Category: tcBars; Overlay: True),
|
|
(Name: 'Wide Bars from the Right'; Category: tcBars; Overlay: True),
|
|
(Name: 'Wide Bars from the Top'; Category: tcBars; Overlay: True),
|
|
(Name: 'Wide Bars from the Bottom'; Category: tcBars; Overlay: True),
|
|
|
|
(Name: 'Spiralling Rectangle Clockwise'; Category: tcRotates; Overlay: False),
|
|
(Name: 'Spiralling Rectangle Counter-Clockwise'; Category: tcRotates; Overlay: False),
|
|
|
|
(Name: 'Arrow Wipe from Left'; Category: tcAngledWipes; Overlay: True),
|
|
(Name: 'Arrow Wipe from Right'; Category: tcAngledWipes; Overlay: True),
|
|
(Name: 'Arrow Wipe from Top'; Category: tcAngledWipes; Overlay: True),
|
|
(Name: 'Arrow Wipe from Bottom'; Category: tcAngledWipes; Overlay: True),
|
|
|
|
(Name: 'Horizontal Bow Tie Wipe'; Category: tcAngledWipes; Overlay: True),
|
|
(Name: 'Vertical Bow Tie Wipe'; Category: tcAngledWipes; Overlay: True),
|
|
|
|
(Name: 'Diagonal Cross from Center'; Category: tcCenterWipes; Overlay: True),
|
|
(Name: 'Diagonal Cross to Center'; Category: tcCenterWipes; Overlay: True),
|
|
|
|
(Name: 'Zigzag Wipe from Horizon'; Category: tcAngledWipes; Overlay: True),
|
|
(Name: 'Zigzag Wipe from Vertical Center'; Category: tcAngledWipes; Overlay: True),
|
|
|
|
(Name: 'Diamond Wipe from Center'; Category: tcCenterWipes; Overlay: True),
|
|
(Name: 'Diamond Wipe to Center'; Category: tcCenterWipes; Overlay: True),
|
|
|
|
(Name: 'Diamond Wipe In and Out'; Category: tcInAndOuts; Overlay: True),
|
|
(Name: 'Rotational Triangular Wipe'; Category: tcRotates; Overlay: True),
|
|
|
|
(Name: 'Random Big Boxes'; Category: tcRandoms; Overlay: True),
|
|
|
|
(Name: 'Page Flip'; Category: tcGeneral; Overlay: False),
|
|
(Name: '3D Page Flip'; Category: tcGeneral; Overlay: False),
|
|
(Name: 'Reverse Page Flip'; Category: tcGeneral; Overlay: False),
|
|
(Name: '3D Reverse Page Flip'; Category: tcGeneral; Overlay: False),
|
|
|
|
(Name: 'Zigzag Wipe To Horizon'; Category: tcAngledWipes; Overlay: True),
|
|
(Name: 'Zigzag Wipe To Vertical Center'; Category: tcAngledWipes; Overlay: True),
|
|
|
|
(Name: 'Random Hearts'; Category: tcRandoms; Overlay: True),
|
|
(Name: 'Random 5 Pointed Stars'; Category: tcRandoms; Overlay: True),
|
|
(Name: 'Random 6 Pointed Stars'; Category: tcRandoms; Overlay: True),
|
|
(Name: 'Random Explosions'; Category: tcRandoms; Overlay: True),
|
|
|
|
(Name: 'Expanding Hearts'; Category: tcMultiExpanders; Overlay: True),
|
|
(Name: 'Expanding 5 Pointed Stars'; Category: tcMultiExpanders; Overlay: True),
|
|
(Name: 'Expanding 6 Pointed Stars'; Category: tcMultiExpanders; Overlay: True),
|
|
(Name: 'Expanding Explosions'; Category: tcMultiExpanders; Overlay: True),
|
|
(Name: 'Expanding Lightning Bolts'; Category: tcMultiExpanders; Overlay: True),
|
|
|
|
(Name: 'Heart Wipe from Center'; Category: tcCenterWipes; Overlay: True),
|
|
(Name: 'Heart Wipe to Center'; Category: tcCenterWipes; Overlay: True),
|
|
(Name: '5 Pointed Star Wipe from Center'; Category: tcCenterWipes; Overlay: True),
|
|
(Name: '5 Pointed Star Wipe to Center'; Category: tcCenterWipes; Overlay: True),
|
|
(Name: '6 Pointed Star Wipe from Center'; Category: tcCenterWipes; Overlay: True),
|
|
(Name: '6 Pointed Star Wipe to Center'; Category: tcCenterWipes; Overlay: True),
|
|
(Name: 'Explosion Wipe from Center'; Category: tcCenterWipes; Overlay: True),
|
|
(Name: 'Explosion Wipe to Center'; Category: tcCenterWipes; Overlay: True),
|
|
(Name: 'Cross Wipe from Center'; Category: tcCenterWipes; Overlay: True),
|
|
(Name: 'Cross Wipe to Center'; Category: tcCenterWipes; Overlay: True),
|
|
|
|
(Name: 'Heart Wipe In and Out'; Category: tcInAndOuts; Overlay: True),
|
|
(Name: '5 Pointed Star Wipe In and Out'; Category: tcInAndOuts; Overlay: True),
|
|
(Name: '6 Pointed Star Wipe In and Out'; Category: tcInAndOuts; Overlay: True),
|
|
(Name: 'Explosion Wipe In and Out'; Category: tcInAndOuts; Overlay: True),
|
|
|
|
(Name: 'Cube Rotate from Left'; Category: tcGeneral; Overlay: True),
|
|
(Name: 'Cube Rotate from Right'; Category: tcGeneral; Overlay: True),
|
|
(Name: 'Cube Rotate from Top'; Category: tcGeneral; Overlay: True),
|
|
(Name: 'Cube Rotate from Bottom'; Category: tcGeneral; Overlay: True),
|
|
|
|
(Name: 'Soft Wipe from Left'; Category: tcSpecialWipes; Overlay: True),
|
|
(Name: 'Soft Wipe from Right'; Category: tcSpecialWipes; Overlay: True),
|
|
(Name: 'Soft Wipe from Top'; Category: tcSpecialWipes; Overlay: True),
|
|
(Name: 'Soft Wipe from Bottom'; Category: tcSpecialWipes; Overlay: True),
|
|
|
|
(Name: 'Twist In'; Category: tcAngledWipes; Overlay: True),
|
|
(Name: 'Twist Out'; Category: tcAngledWipes; Overlay: True),
|
|
(Name: 'Multiple Twist In'; Category: tcAngledWipes; Overlay: True),
|
|
(Name: 'Multiple Twist Out'; Category: tcAngledWipes; Overlay: True),
|
|
|
|
(Name: 'Random Puzzle Pieces'; Category: tcRandoms; Overlay: True),
|
|
|
|
(Name: 'Pacman Devours from Left'; Category: tcSpecialWipes; Overlay: True),
|
|
(Name: 'Pacman Devours from Right'; Category: tcSpecialWipes; Overlay: True),
|
|
(Name: 'Pacman Devours Three Rows'; Category: tcSpecialWipes; Overlay: True),
|
|
(Name: 'Pacman Devours Four Rows'; Category: tcSpecialWipes; Overlay: True),
|
|
(Name: 'Two Simultaneous Rows of Pacman'; Category: tcSpecialWipes; Overlay: True),
|
|
(Name: 'Four Simultaneous Rows of Pacman'; Category: tcSpecialWipes; Overlay: True),
|
|
(Name: 'Six Simultaneous Rows of Pacman'; Category: tcSpecialWipes; Overlay: True),
|
|
|
|
(Name: 'Full Sweep Clockwise'; Category: tcRotates; Overlay: True),
|
|
(Name: 'Expanding Sweep Clockwise'; Category: tcRotates; Overlay: True),
|
|
|
|
(Name: '3D Cube Rotate from Left'; Category: tcGeneral; Overlay: True),
|
|
(Name: '3D Cube Rotate from Right'; Category: tcGeneral; Overlay: True),
|
|
(Name: '3D Cube Rotate from Top'; Category: tcGeneral; Overlay: True),
|
|
(Name: '3D Cube Rotate from Bottom'; Category: tcGeneral; Overlay: True),
|
|
|
|
(Name: 'Random Boxes with Word'; Category: tcWordEffects; Overlay: False),
|
|
(Name: 'Random Letters of Word'; Category: tcWordEffects; Overlay: False),
|
|
(Name: 'Expanding Letters of Word'; Category: tcWordEffects; Overlay: False),
|
|
(Name: 'Word Wipe from Center'; Category: tcWordEffects; Overlay: False),
|
|
(Name: 'Word Wipe to Center'; Category: tcWordEffects; Overlay: False),
|
|
(Name: 'Word Wipe In and Out'; Category: tcWordEffects; Overlay: False),
|
|
(Name: 'Half Sweep with Word'; Category: tcWordEffects; Overlay: False),
|
|
(Name: 'Full Sweep with Word'; Category: tcWordEffects; Overlay: False),
|
|
(Name: 'Expanding Sweep with Word'; Category: tcWordEffects; Overlay: False)
|
|
{$endif}
|
|
);
|
|
|
|
|
|
{
|
|
THE FOLLOWING EFFECTS FROM CUSTOMPICSHOW WERE NOT USED:
|
|
|
|
(Name: 'Wipe from Left'; Proc: Effect005) : Just like iettLeftRight1
|
|
(Name: 'Wipe from Right'; Proc: Effect006) : Just like iettRightLeft1
|
|
(Name: 'Wipe from Top'; Proc: Effect022) : Just like iettDownUp1
|
|
(Name: 'Wipe from Bottom'; Proc: Effect023) : Just like iettUpDown1
|
|
(Name: 'Slide in from Bottom Right'; Proc: Effect039) : Just like iettFromBottomRight
|
|
(Name: 'Slide in from Top Right'; Proc: Effect040) : Just like iettFromUpRight
|
|
(Name: 'Slide in from Top Left'; Proc: Effect041) : Just like iettFromUpLeft
|
|
(Name: 'Slide in from Bottom Left'; Proc: Effect042) : Just like iettFromBottomLeft
|
|
(Name: 'Expand out from centre'; Proc: Effect052) : Just like iettCenterZoom1
|
|
(Name: 'Wipe out from centre'; Proc: Effect053)
|
|
(Name: 'Wipe in to centre'; Proc: Effect054) : Just like iettCenter2
|
|
(Name: 'Fade'; Proc: Effect119) : Just like iettCrossDissolve
|
|
(Name: 'Pivot from Top Left'; Proc: Effect120) : Requires a 32 bit palette
|
|
(Name: 'Pivot from Bottom Left'; Proc: Effect121)
|
|
(Name: 'Pivot from Top Right'; Proc: Effect122)
|
|
(Name: 'Pivot from Bottom Right'; Proc: Effect123)
|
|
(Name: 'Random squares appear'; Proc: Effect128) : Just like iettRandomBoxes
|
|
(Name: 'Pixelate'; Proc: Effect168) : Requires a 32 bit palette
|
|
(Name: 'Dissolve'; Proc: Effect169) : Just like IE effect
|
|
(Name: 'Random Bars Horizontal'; Proc: Effect170) : Uses TBitmap.ScanLine
|
|
(Name: 'Random Bars Vertical'; Proc: Effect171) : Uses TBitmap.ScanLine
|
|
(Name: 'Channel Mix'; Proc: Effect172) : Uses TBitmap.ScanLine and 32 bit
|
|
(Name: 'Rectangles from the Left'; Proc: Effect146) : Unattractive
|
|
(Name: 'Rectangles from the Right'; Proc: Effect147) : Unattractive
|
|
(Name: 'Rectangles from the Top'; Proc: Effect148) : Unattractive
|
|
(Name: 'Rectangles from the Bottom'; Proc: Effect149) : Unattractive
|
|
}
|
|
|
|
|
|
|
|
type
|
|
{!!
|
|
<FS>TIEPanZoomType
|
|
|
|
<FM>Declaration<FC>
|
|
}
|
|
TIEPanZoomType = (iepzPanTopLeftToBottomRight,
|
|
iepzPanTopRightToBottomLeft,
|
|
iepzPanBottomLeftToTopRight,
|
|
iepzPanBottomRightToTopLeft,
|
|
|
|
iepzPanTopLeftToCenter,
|
|
iepzPanTopRightToCenter,
|
|
iepzPanBottomLeftToCenter,
|
|
iepzPanBottomRightToCenter,
|
|
|
|
iepzPanCenterToTopLeft,
|
|
iepzPanCenterToTopRight,
|
|
iepzPanCenterToBottomLeft,
|
|
iepzPanCenterToBottomRight,
|
|
|
|
iepzPanLeftToRightOrTopToBottom,
|
|
iepzPanLeftToCenterOrTopToCenter,
|
|
iepzPanRightToCenterOrBottomToCenter,
|
|
|
|
iepzPanRightToLeftOrBottomToTop,
|
|
iepzPanCenterToLeftToOrCenterToTop,
|
|
iepzPanCenterToRightOrCenterToBottom,
|
|
|
|
iepzZoomInToTopLeft,
|
|
iepzZoomInToTopRight,
|
|
iepzZoomInToCenter,
|
|
iepzZoomInToBottomLeft,
|
|
iepzZoomInToBottomRight,
|
|
|
|
iepzZoomOutFromTopLeft,
|
|
iepzZoomOutFromTopRight,
|
|
iepzZoomOutFromCenter,
|
|
iepzZoomOutFromBottomLeft,
|
|
iepzZoomOutFromBottomRight,
|
|
|
|
iepzFullZoomInToTopLeft,
|
|
iepzFullZoomInToTop,
|
|
iepzFullZoomInToTopRight,
|
|
|
|
iepzFullZoomInToLeft,
|
|
iepzFullZoomInToCenter,
|
|
iepzFullZoomInToRight,
|
|
|
|
iepzFullZoomInToBottomLeft,
|
|
iepzFullZoomInToBottom,
|
|
iepzFullZoomInToBottomRight,
|
|
|
|
iepzFullZoomOutFromTopLeft,
|
|
iepzFullZoomOutFromTop,
|
|
iepzFullZoomOutFromTopRight,
|
|
|
|
iepzFullZoomOutFromLeft,
|
|
iepzFullZoomOutFromCenter,
|
|
iepzFullZoomOutFromRight,
|
|
|
|
iepzFullZoomOutFromBottomLeft,
|
|
iepzFullZoomOutFromBottom,
|
|
iepzFullZoomOutFromBottomRight);
|
|
{!!}
|
|
|
|
|
|
const
|
|
MAX_PAN_ZOOM_EFFECT_COUNT = 46;
|
|
IEPanZoomEffectNames : array[0 .. MAX_PAN_ZOOM_EFFECT_COUNT - 1] of string = (
|
|
'Pan from Top Left to Bottom Right',
|
|
'Pan from Top Right to Bottom Left',
|
|
'Pan from Bottom Left to Top Right',
|
|
'Pan from Bottom Right to Top Left',
|
|
|
|
'Pan from Top Left to Center',
|
|
'Pan from Top Right to Center',
|
|
'Pan from Bottom Left to Center',
|
|
'Pan from Bottom Right to Center',
|
|
|
|
'Pan from Center to Top Left',
|
|
'Pan from Center to Top Right',
|
|
'Pan from Center to Bottom Left',
|
|
'Pan from Center to Bottom Right',
|
|
|
|
'Pan from Left to Right/Top to Bottom',
|
|
'Pan from Left to Center/Top to Center',
|
|
'Pan from Right to Center/Bottom to Center',
|
|
|
|
'Pan from Right to Left/Bottom to Top',
|
|
'Pan from Center to Left/Center to Top',
|
|
'Pan from Center to Right/Center to Bottom',
|
|
|
|
'Zoom in to Top Left',
|
|
'Zoom in to Top Right',
|
|
'Zoom in to Center',
|
|
'Zoom in to Bottom Left',
|
|
'Zoom in to Bottom Right',
|
|
|
|
'Zoom out from Top Left',
|
|
'Zoom out from Top Right',
|
|
'Zoom out from Center',
|
|
'Zoom out from Bottom Left',
|
|
'Zoom out from Bottom Right',
|
|
|
|
'Full Zoom in to Top Left',
|
|
'Full Zoom in to Top',
|
|
'Full Zoom in to Top Right',
|
|
|
|
'Full Zoom in to Left',
|
|
'Full Zoom in to Center',
|
|
'Full Zoom in to Right',
|
|
|
|
'Full Zoom in to Bottom Left',
|
|
'Full Zoom in to Bottom',
|
|
'Full Zoom in to Bottom Right',
|
|
|
|
'Full Zoom out from Top Left',
|
|
'Full Zoom out from Top',
|
|
'Full Zoom out from Top Right',
|
|
|
|
'Full Zoom out from Left',
|
|
'Full Zoom out from Center',
|
|
'Full Zoom out from Right',
|
|
|
|
'Full Zoom out from Bottom Left',
|
|
'Full Zoom out from Bottom',
|
|
'Full Zoom out from Bottom Right');
|
|
|
|
// Convert a TIEPanZoomType effect type to a starting and ending position
|
|
procedure GetPanZoomEffectStartEndRects(iIEClientWidth, iIEClientHeight : Integer; // ClientWidth and ClientHeight of the display window
|
|
iBitmapWidth, iBitmapHeight : Integer; // Width and Height of the Bitmap
|
|
PanZoomEffect : TIEPanZoomType; // Effect to use
|
|
iMaxZoom : Integer; // For zoom effects, how much should we zoom in/out, e.g. 20 for 20%
|
|
out StartRect: TRect; // Will be filled with the first display position
|
|
out EndRect: TRect); // Will be filled with the last display position
|
|
|
|
|
|
implementation
|
|
|
|
|
|
uses
|
|
imageenproc, iexCanvasUtils, {$IFDEF IEHASTYPES} Types, {$ENDIF} Math, ieSettings, imageenview, iexBitmaps,
|
|
ieview, iemview, hyieutils;
|
|
|
|
|
|
|
|
{$ifdef IEINCLUDEEXTRATRANSITIONS}
|
|
var
|
|
fTransitionInitialized : Boolean;
|
|
|
|
const
|
|
iesTransLetter = TIEShape( 100 );
|
|
iesTransCircularShape = TIEShape( 101 );
|
|
iesTransDiamondShape = TIEShape( 102 );
|
|
|
|
|
|
{ TComplexRegion }
|
|
|
|
type
|
|
TComplexRegion = class(TObject)
|
|
private
|
|
RgnData: PRgnData;
|
|
Capacity: Integer;
|
|
Count: Integer;
|
|
Bounds: TRect;
|
|
Rect: PRect;
|
|
public
|
|
constructor Create;
|
|
destructor Destroy; override;
|
|
procedure Clear;
|
|
procedure AddRect(Left, Top, Right, Bottom: Integer);
|
|
function CreateRegion: HRGN;
|
|
end;
|
|
|
|
constructor TComplexRegion.Create;
|
|
begin
|
|
inherited Create;
|
|
Clear;
|
|
end;
|
|
|
|
destructor TComplexRegion.Destroy;
|
|
begin
|
|
ReallocMem(RgnData, 0);
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TComplexRegion.Clear;
|
|
begin
|
|
ReallocMem(RgnData, 0);
|
|
Count := 0;
|
|
Capacity := 0;
|
|
with Bounds do
|
|
begin
|
|
Left := +MaxInt;
|
|
Top := +MaxInt;
|
|
Right := -MaxInt;
|
|
Bottom := -MaxInt;
|
|
end;
|
|
end;
|
|
|
|
procedure TComplexRegion.AddRect(Left, Top, Right, Bottom: Integer);
|
|
begin
|
|
if Count = Capacity then
|
|
begin
|
|
Inc(Capacity, 500);
|
|
ReallocMem(RgnData, SizeOf(TRgnData) + Capacity * SizeOf(TRect));
|
|
Rect := PRect(@(RgnData^.Buffer));
|
|
Inc(Rect, Count);
|
|
end;
|
|
Rect^.Left := Left;
|
|
Rect^.Top := Top;
|
|
Rect^.Right := Right;
|
|
Rect^.Bottom := Bottom;
|
|
Inc(Rect);
|
|
Inc(Count);
|
|
if Bounds.Left > Left then
|
|
Bounds.Left := Left;
|
|
if Bounds.Top > Top then
|
|
Bounds.Top := Top;
|
|
if Bounds.Right < Right then
|
|
Bounds.Right := Right;
|
|
if Bounds.Bottom < Bottom then
|
|
Bounds.Bottom := Bottom;
|
|
end;
|
|
|
|
function TComplexRegion.CreateRegion: HRGN;
|
|
begin
|
|
if Assigned(RgnData) then
|
|
begin
|
|
with RgnData^.rdh do
|
|
begin
|
|
dwSize := SizeOf(TRgnDataHeader);
|
|
iType := RDH_RECTANGLES;
|
|
nCount := Count;
|
|
nRgnSize := SizeOf(TRect);
|
|
rcBound := Bounds;
|
|
end;
|
|
Result := ExtCreateRegion(nil, SizeOf(TRgnData) + Count * SizeOf(TRect), RgnData^);
|
|
end
|
|
else
|
|
Result := 0;
|
|
end;
|
|
|
|
|
|
{ Helper Functions }
|
|
|
|
// Blend the specified rect of a canvas with a color
|
|
{$ifdef IEHASNOTWINDOWSALPHABLEND}
|
|
procedure ColorBlend(const ACanvas: HDC; const ARect: TRect; const ABlendColor: TColor; const ABlendValue: Integer);
|
|
begin
|
|
end;
|
|
{$else}
|
|
procedure ColorBlend(const ACanvas: HDC; const ARect: TRect; const ABlendColor: TColor; const ABlendValue: Integer);
|
|
var
|
|
DC: HDC;
|
|
Brush: HBRUSH;
|
|
Bitmap: HBITMAP;
|
|
BlendFunction: TBlendFunction;
|
|
begin
|
|
DC := CreateCompatibleDC(ACanvas);
|
|
Bitmap := CreateCompatibleBitmap(ACanvas, ARect.Right - ARect.Left, ARect.Bottom - ARect.Top);
|
|
Brush := CreateSolidBrush(ColorToRGB(ABlendColor));
|
|
try
|
|
SelectObject(DC, Bitmap);
|
|
Windows.FillRect(DC, Rect(0, 0, ARect.Right - ARect.Left, ARect.Bottom - ARect.Top), Brush);
|
|
BlendFunction.BlendOp := AC_SRC_OVER;
|
|
BlendFunction.BlendFlags := 0;
|
|
BlendFunction.AlphaFormat := 0;
|
|
BlendFunction.SourceConstantAlpha := ABlendValue;
|
|
AlphaBlend(ACanvas, ARect.Left, ARect.Top,
|
|
ARect.Right - ARect.Left, ARect.Bottom - ARect.Top, DC, 0, 0,
|
|
ARect.Right - ARect.Left, ARect.Bottom - ARect.Top, BlendFunction);
|
|
finally
|
|
DeleteObject(Brush);
|
|
DeleteObject(Bitmap);
|
|
DeleteDC(DC);
|
|
end;
|
|
end;
|
|
{$endif}
|
|
|
|
|
|
|
|
// PS to IE Parameter conversion
|
|
// W and H remain constant regardless of Progress
|
|
// X and Y increase in proportion to progress
|
|
procedure CalcParams(const ARect: TRect; Progress: Integer; var W, H, X, Y: Integer);
|
|
begin
|
|
W := ARect.Right - ARect.Left;
|
|
H := ARect.Bottom - ARect.Top;
|
|
if W >= H then
|
|
begin
|
|
X := MulDiv(W, Progress, 100);
|
|
Y := MulDiv(X, H, W);
|
|
end
|
|
else
|
|
begin
|
|
Y := MulDiv(H, Progress, 100);
|
|
X := MulDiv(Y, W, H);
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure OutputRgnToCanvas(DestCanvas: TCanvas; W, H : Integer; Rgn: HRGN; Image : TBitmap);
|
|
begin
|
|
if Rgn <> 0 then
|
|
try
|
|
SelectClipRgn(DestCanvas.Handle, Rgn);
|
|
BitBlt(DestCanvas.Handle, 0, 0, W, H, Image.Canvas.Handle, 0, 0, SRCCOPY);
|
|
SelectClipRgn(DestCanvas.Handle, 0);
|
|
except
|
|
// UNEXPECTED ERROR
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure RotatePoints(var Points: array of TPoint; xOrg, yOrg: Integer; Angle: Extended);
|
|
var
|
|
Sin, Cos: Extended;
|
|
xPrime, yPrime: Integer;
|
|
I: Integer;
|
|
begin
|
|
SinCos(Angle, Sin, Cos);
|
|
for I := Low(Points) to High(Points) do
|
|
with Points[I] do
|
|
begin
|
|
xPrime := X - xOrg;
|
|
yPrime := Y - yOrg;
|
|
X := Round(xPrime * Cos - yPrime * Sin) + xOrg;
|
|
Y := Round(xPrime * Sin + yPrime * Cos) + yOrg;
|
|
end;
|
|
end;
|
|
|
|
procedure MirrorCopyRect(Canvas: TCanvas; dstRect: TRect; Bitmap: TBitmap; srcRect: TRect; Horz, Vert: Boolean);
|
|
var
|
|
T: Integer;
|
|
begin
|
|
IntersectRect(srcRect, srcRect, Rect(0, 0, Bitmap.Width, Bitmap.Height));
|
|
if Horz then
|
|
begin
|
|
T := dstRect.Left;
|
|
dstRect.Left := dstRect.Right+1;
|
|
dstRect.Right := T-1;
|
|
end;
|
|
if Vert then
|
|
begin
|
|
T := dstRect.Top;
|
|
dstRect.Top := dstRect.Bottom+1;
|
|
dstRect.Bottom := T-1;
|
|
end;
|
|
SetStretchBltMode(Canvas.Handle, HALFTONE);
|
|
StretchBlt(Canvas.Handle, dstRect.Left, dstRect.Top,
|
|
dstRect.Right - dstRect.Left, dstRect.Bottom - dstRect.Top,
|
|
Bitmap.Canvas.Handle, srcRect.Left, srcRect.Top,
|
|
srcRect.Right - srcRect.Left, srcRect.Bottom - srcRect.Top, SRCCOPY);
|
|
end;
|
|
|
|
|
|
function CreateBarRgn(X, Y, W, H: Integer; XMode, YMode: Integer): HRGN;
|
|
const
|
|
Bar_Count = 50;
|
|
var
|
|
X1, Y1, D: Integer;
|
|
ComplexRgn: TComplexRegion;
|
|
begin
|
|
D := (Min(W, H) div Bar_Count) + 1;
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
D := (Min(W, H) div Bar_Count * 4) + 1;
|
|
|
|
ComplexRgn := TComplexRegion.Create;
|
|
try
|
|
if X <= W then
|
|
Y1 := 0
|
|
else
|
|
Y1 := D;
|
|
while Y1 < H + D do
|
|
begin
|
|
if X > W then
|
|
begin
|
|
if XMode in [1, 4] then
|
|
ComplexRgn.AddRect(2 * W - X, Y1, W, Y1 + D)
|
|
else
|
|
if XMode in [2, 5] then
|
|
ComplexRgn.AddRect(0, Y1, X - W, Y1 + D);
|
|
ComplexRgn.AddRect(0, Y1 - D, W, Y1);
|
|
end
|
|
else
|
|
begin
|
|
if XMode in [1, 5] then
|
|
ComplexRgn.AddRect(W - X, Y1, W, Y1 + D)
|
|
else
|
|
if XMode in [2, 4] then
|
|
ComplexRgn.AddRect(0, Y1, X, Y1 + D)
|
|
else
|
|
if XMode = 3 then
|
|
begin
|
|
ComplexRgn.AddRect(0, Y1 + D, X, Y1 + D + D);
|
|
ComplexRgn.AddRect(W - X, Y1, W, Y1 + D);
|
|
end;
|
|
end;
|
|
Inc(Y1, 2 * D);
|
|
end;
|
|
if Y <= H then
|
|
X1 := 0
|
|
else
|
|
X1 := D;
|
|
while X1 < W + D do
|
|
begin
|
|
if Y > H then
|
|
begin
|
|
if YMode in [1, 4] then
|
|
ComplexRgn.AddRect(X1, 2 * H - Y, X1 + D, H)
|
|
else
|
|
if YMode in [2, 5] then
|
|
ComplexRgn.AddRect(X1, 0, X1 + D, Y - H);
|
|
ComplexRgn.AddRect(X1 - D, 0, X1, H);
|
|
end
|
|
else
|
|
begin
|
|
if YMode in [1, 5] then
|
|
ComplexRgn.AddRect(X1, H - Y, X1 + D, H)
|
|
else
|
|
if YMode in [2, 4] then
|
|
ComplexRgn.AddRect(X1, 0, X1 + D, Y)
|
|
else
|
|
if YMode = 3 then
|
|
begin
|
|
ComplexRgn.AddRect(X1, H - Y, X1 + D, H);
|
|
ComplexRgn.AddRect(X1 + D, 0, X1 + D + D, Y);
|
|
end;
|
|
end;
|
|
Inc(X1, 2 * D);
|
|
end;
|
|
Result := ComplexRgn.CreateRegion;
|
|
finally
|
|
ComplexRgn.Free;
|
|
end;
|
|
end;
|
|
|
|
|
|
function CreatePolygonRgnEx(const Pts: array of Integer): HRGN;
|
|
begin
|
|
Result := CreatePolygonRgn(Pts, (High(Pts) - Low(Pts) + 1) shr 1, WINDING);
|
|
end;
|
|
|
|
|
|
function CreatePourRgn(X, Y, W, H, XMode, YMode: Integer): HRGN;
|
|
const
|
|
Shred_Value = 200;
|
|
var
|
|
X1, Y1, mW, mH, WD, HD, N, R, mR, D: Integer;
|
|
ComplexRegion: TComplexRegion;
|
|
begin
|
|
ComplexRegion := TComplexRegion.Create;
|
|
try
|
|
D := (Min(W, H) div Shred_Value) + 1;
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
D := (Min(W, H) div Shred_Value * 2) + 1;
|
|
|
|
WD := W mod D;
|
|
HD := H mod D;
|
|
mW := W div 2;
|
|
mH := H div 2;
|
|
if XMode <> 0 then
|
|
begin
|
|
if X < W then
|
|
N := W div 10
|
|
else
|
|
N := 0;
|
|
Y1 := 0;
|
|
while Y1 < H do
|
|
begin
|
|
R := X + (Random(2 * N) - N);
|
|
if XMode = 1 then
|
|
ComplexRegion.AddRect(W - R, Y1, W, Y1 + D + HD)
|
|
else
|
|
if XMode = 2 then
|
|
ComplexRegion.AddRect(0, Y1, R, Y1 + D + HD)
|
|
else
|
|
if XMode = 3 then
|
|
begin
|
|
mR := R div 2;
|
|
ComplexRegion.AddRect(mW - mR, Y1, mW, Y1 + D + HD);
|
|
ComplexRegion.AddRect(mW, Y1, mW + mR, Y1 + D + HD);
|
|
end
|
|
else
|
|
begin
|
|
mR := R div 2;
|
|
ComplexRegion.AddRect(W - mR, Y1, W, Y1 + D + HD);
|
|
ComplexRegion.AddRect(0, Y1, mR, Y1 + D + HD);
|
|
end;
|
|
Inc(Y1, D);
|
|
end;
|
|
end;
|
|
if YMode <> 0 then
|
|
begin
|
|
if Y < H then
|
|
N := H div 10
|
|
else
|
|
N := 0;
|
|
X1 := 0;
|
|
while X1 < W do
|
|
begin
|
|
R := Y + Random(2 * N) - N;
|
|
if YMode = 1 then
|
|
ComplexRegion.AddRect(X1, H - R, X1 + D + WD, H)
|
|
else
|
|
if YMode = 2 then
|
|
ComplexRegion.AddRect(X1, 0, X1 + D + WD, R)
|
|
else
|
|
if YMode = 3 then
|
|
begin
|
|
mR := R div 2;
|
|
ComplexRegion.AddRect(X1, mH - mR, X1 + D + WD, mH);
|
|
ComplexRegion.AddRect(X1, mH, X1 + D + WD, mH + mR);
|
|
end
|
|
else
|
|
begin
|
|
mR := R div 2;
|
|
ComplexRegion.AddRect(X1, H - mR, X1 + D + WD, H);
|
|
ComplexRegion.AddRect(X1, 0, X1 + D + WD, mR);
|
|
end;
|
|
Inc(X1, D);
|
|
end;
|
|
end;
|
|
Result := ComplexRegion.CreateRegion;
|
|
finally
|
|
ComplexRegion.Free;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
function CreateSwarmRgn(X, Y, W, H, XMode, YMode: Integer): HRGN;
|
|
var
|
|
X1, Y1, N, M, I, C, L, S: Integer;
|
|
ComplexRegion: TComplexRegion;
|
|
begin
|
|
ComplexRegion := TComplexRegion.Create;
|
|
try
|
|
if XMode <> 0 then
|
|
begin
|
|
if X < W then
|
|
N := W div 10
|
|
else
|
|
N := 0;
|
|
M := N div 20;
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
M := N div 40;
|
|
if M < 2 then
|
|
M := 2;
|
|
S := M div 2;
|
|
L := N div M;
|
|
C := (3 * N) div (4 * M);
|
|
Y1 := 0;
|
|
while Y1 < H do
|
|
begin
|
|
if XMode = 1 then
|
|
begin
|
|
ComplexRegion.AddRect(W - X, Y1, W, Y1 + M);
|
|
for I := L downto 1 do
|
|
if Random(I) <= Ord(I <= C) then
|
|
begin
|
|
X1 := (W - X) - (I * M);
|
|
ComplexRegion.AddRect(X1, Y1, X1 + M, Y1 + M);
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
ComplexRegion.AddRect(0, Y1, X, Y1 + M);
|
|
for I := L downto 1 do
|
|
if Random(I) <= Ord(I <= C) then
|
|
begin
|
|
X1 := X + (I * M);
|
|
ComplexRegion.AddRect(X1 - M, Y1, X1, Y1 + M);
|
|
end;
|
|
end;
|
|
Inc(Y1, S);
|
|
end;
|
|
end;
|
|
if YMode <> 0 then
|
|
begin
|
|
if Y < H then
|
|
N := H div 10
|
|
else
|
|
N := 0;
|
|
M := N div 20;
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
M := N div 40;
|
|
if M < 2 then
|
|
M := 2;
|
|
S := M div 2;
|
|
L := N div M;
|
|
C := (3 * N) div (4 * M);
|
|
X1 := 0;
|
|
while X1 < W do
|
|
begin
|
|
if YMode = 1 then
|
|
begin
|
|
ComplexRegion.AddRect(X1, H - Y, X1 + M, H);
|
|
for I := L downto 1 do
|
|
if Random(I) <= Ord(I <= C) then
|
|
begin
|
|
Y1 := (H - Y) - (I * M);
|
|
ComplexRegion.AddRect(X1, Y1, X1 + M, Y1 + M);
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
ComplexRegion.AddRect(X1, 0, X1 + M, Y);
|
|
for I := N div M downto 1 do
|
|
if Random(I) <= Ord(I <= C) then
|
|
begin
|
|
Y1 := Y + (I * M);
|
|
ComplexRegion.AddRect(X1, Y1 - M, X1 + M, Y1);
|
|
end;
|
|
end;
|
|
Inc(X1, S);
|
|
end;
|
|
end;
|
|
Result := ComplexRegion.CreateRegion;
|
|
finally
|
|
ComplexRegion.Free;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
function CreateSliceRgn(mX, mY, Radius: Integer; StartAngle, EndAngle: Extended; NumPts: Integer; bFromTop : Boolean): HRGN;
|
|
var
|
|
Pts, Pt: PPoint;
|
|
Sin, Cos, Delta: Extended;
|
|
I: Integer;
|
|
begin
|
|
if NumPts < 1 then
|
|
NumPts := 1;
|
|
GetMem(Pts, (NumPts + 1) * SizeOf(TPoint));
|
|
try
|
|
Pt := Pts;
|
|
Pt.X := mX;
|
|
Pt.Y := mY;
|
|
Delta := (EndAngle - StartAngle) / NumPts;
|
|
for I := 1 to NumPts do
|
|
begin
|
|
Inc(Pt);
|
|
SinCos(StartAngle, Sin, Cos);
|
|
if bFromTop then
|
|
begin
|
|
Pt.X := mX + Round(Radius * Cos);
|
|
Pt.Y := mY + Round(Radius * Sin);
|
|
end
|
|
else
|
|
begin
|
|
Pt.X := mX - Round(Radius * Cos);
|
|
Pt.Y := mY - Round(Radius * Sin);
|
|
end;
|
|
StartAngle := StartAngle + Delta;
|
|
end;
|
|
Result := CreatePolygonRgn(Pts^, NumPts + 1, WINDING);
|
|
finally
|
|
FreeMem(Pts);
|
|
end;
|
|
end;
|
|
|
|
|
|
{ Randomization }
|
|
|
|
const
|
|
Max_Random_List = 30;
|
|
var
|
|
gRandomList : Array [0..Max_Random_List - 1 ] of Integer;
|
|
|
|
// Generates a randomized index of values between 0 and iMax. Call to initialize before using GetRandomListIndex
|
|
procedure InitializeRandomList(iMax: Integer);
|
|
var
|
|
I: Integer;
|
|
iDone: Integer;
|
|
iRandom: Integer;
|
|
begin
|
|
if iMax > Max_Random_List - 1 then
|
|
raise EIEException.create('Too large for random array');
|
|
|
|
Randomize;
|
|
for I := 0 to iMax do
|
|
gRandomList[i] := -1;
|
|
|
|
iDone := 0;
|
|
while iDone <= iMax do
|
|
begin
|
|
iRandom := Random(iMax + 1);
|
|
if gRandomList[iRandom] = -1 then
|
|
begin
|
|
gRandomList[iRandom] := iDone;
|
|
inc(iDone);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
// Converts a zero-based value to a random one
|
|
function GetRandomListIndex(Index : Integer) : Integer;
|
|
begin
|
|
Result := gRandomList[Index];
|
|
end;
|
|
|
|
{ Text Handling }
|
|
|
|
function BitmapToRegion(Bitmap: TBitmap; iLeft, iTop, iWidth, iHeight: Integer; cTransparentColor : TColor): HRGN;
|
|
type
|
|
TPixels24 = array[0..0] of TRGBTriple;
|
|
var
|
|
Pixels: Pointer;
|
|
NewRectLeft: Integer;
|
|
X, Y: Integer;
|
|
ComplexRegion: TComplexRegion;
|
|
HorzScale, VertScale : Double;
|
|
bIsTransparent : Boolean;
|
|
R, G, B : Byte;
|
|
|
|
procedure AddRect(LastCol: Boolean = False);
|
|
var
|
|
iBottom: Integer;
|
|
begin
|
|
if LastCol then
|
|
Inc( X );
|
|
iBottom := Y + 1;
|
|
ComplexRegion.AddRect(iLeft + Trunc(NewRectLeft * HorzScale),
|
|
iTop + Trunc(Y * VertScale),
|
|
iLeft + Trunc(X * HorzScale),
|
|
iTop + Trunc(iBottom * VertScale));
|
|
NewRectLeft := -1;
|
|
end;
|
|
|
|
begin
|
|
HorzScale := iWidth / Bitmap.Width;
|
|
VertScale := iHeight / Bitmap.Height;
|
|
ComplexRegion := TComplexRegion.Create;
|
|
try
|
|
R := GetRValue(cTransparentColor);
|
|
G := GetGValue(cTransparentColor);
|
|
B := GetBValue(cTransparentColor);
|
|
|
|
for Y := 0 to Bitmap.Height - 1 do
|
|
begin
|
|
Pixels := Bitmap.ScanLine[ Y ];
|
|
NewRectLeft := -1;
|
|
for X := 0 to Bitmap.Width - 1 do
|
|
begin
|
|
bIsTransparent := ( TPixels24( Pixels^ )[ X ].rgbtRed = R ) and
|
|
( TPixels24( Pixels^ )[ X ].rgbtGreen = G ) and
|
|
( TPixels24( Pixels^ )[ X ].rgbtBlue = B );
|
|
|
|
if bIsTransparent then
|
|
begin
|
|
if NewRectLeft >= 0 then
|
|
AddRect;
|
|
end
|
|
else
|
|
begin
|
|
if NewRectLeft = -1 then
|
|
NewRectLeft := X;
|
|
if ( X = Bitmap.Width - 1 ) and ( NewRectLeft >= 0 ) then
|
|
AddRect( True );
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
Result := ComplexRegion.CreateRegion;
|
|
finally
|
|
ComplexRegion.Free;
|
|
end;
|
|
end;
|
|
|
|
function TextToBitmap(const Text : string; iBitmapHeight : Integer; const sFontName : string; cFontColor : TColor; Style : TFontStyles;
|
|
cBackground : TColor = clWhite; Angle : Integer = 0; bAntiAlias : Boolean = True; bIncludeLeading : Boolean = True
|
|
): TBitmap;
|
|
var
|
|
LogFont : TLogFont;
|
|
AnExtent : TSize;
|
|
AFontHandle : HFont;
|
|
begin
|
|
Result := TBitmap.create;
|
|
|
|
Result.Canvas.Font.Name := sFontName;
|
|
Result.Canvas.Font.Color := cFontColor;
|
|
Result.Canvas.Font.Style := Style;
|
|
|
|
if bIncludeLeading then
|
|
Result.Canvas.Font.Height := iBitmapHeight
|
|
else
|
|
Result.Canvas.Font.Height := -1 * iBitmapHeight;
|
|
|
|
GetObject(Result.Canvas.Font.Handle, SizeOf(TLogFont), @LogFont);
|
|
LogFont.lfEscapement := Angle * 10;
|
|
LogFont.lfOrientation := Angle * 10;
|
|
if bAntiAlias then
|
|
LogFont.lfQuality := ANTIALIASED_QUALITY
|
|
else
|
|
LogFont.lfQuality := NONANTIALIASED_QUALITY;
|
|
AFontHandle := CreateFontIndirect(LogFont);
|
|
Result.Canvas.Font.Handle := AFontHandle;
|
|
|
|
AnExtent := Result.Canvas.TextExtent(Text);
|
|
|
|
Result.Width := AnExtent.cx;
|
|
Result.Height := AnExtent.cy;
|
|
Result.Canvas.Brush.Color := cBackground;
|
|
Result.Canvas.FillRect(Rect(0, 0, Result.Width, Result.Height));
|
|
|
|
Result.Canvas.Brush.Style := bsClear;
|
|
Result.Canvas.TextOut(0, 0, Text);
|
|
end;
|
|
|
|
|
|
// iDisplayStart should be 0 if we can start rotating the text immediately
|
|
// iDisplayEnd should be 100 if we can continue rotating the text all the way to the end
|
|
function CreateRegionFromLetter(ARect: TRect; Progress : Integer; iDisplayStart, iDisplayEnd : Integer;
|
|
bForceWholeWord : Boolean = False; bIncludeLeading : Boolean = True): Hrgn;
|
|
const
|
|
Font_Color = clBlack;
|
|
Transparent_Color = clWhite;
|
|
var
|
|
Bitmap: TBitmap;
|
|
iLeft, iTop, iWidth, iHeight: Integer;
|
|
iQuality: Word;
|
|
sText, sLetter: string;
|
|
iLength, iLetter: Integer;
|
|
iDisplayPeriod, iPeriodProgress: Integer;
|
|
begin
|
|
if IEGlobalSettings().WordTransitionParams.Word = '' then
|
|
IEGlobalSettings().WordTransitionParams.Word := 'A';
|
|
if IEGlobalSettings().WordTransitionParams.FontName = '' then
|
|
IEGlobalSettings().WordTransitionParams.FontName := 'Arial';
|
|
if IEGlobalSettings().WordTransitionParams.Quality < 10 then
|
|
IEGlobalSettings().WordTransitionParams.Quality := 200;
|
|
|
|
// GET THE LETTER TO DISPLAY
|
|
sText := IEGlobalSettings().WordTransitionParams.Word;
|
|
iLength := Length(sText);
|
|
|
|
// Support small text strings enclosed in quotes
|
|
if (iLength > 1) and (sText[1] = '"') and (sText[iLength] = '"') then
|
|
begin
|
|
Delete(sText, iLength, 1);
|
|
Delete(sText, 1, 1);
|
|
iLength := 1; // Process as if one character
|
|
if sText = '' then
|
|
sText := 'X';
|
|
end;
|
|
|
|
// Single letter?
|
|
if bForceWholeWord or (iLength = 1) then
|
|
sLetter := sText
|
|
else
|
|
// In initial "hard to read" period
|
|
if Progress <= iDisplayStart then
|
|
sLetter := sText[1]
|
|
else
|
|
// in ending "hard to read" period
|
|
if Progress >= iDisplayEnd then
|
|
sLetter := sText[iLength]
|
|
else
|
|
begin
|
|
// In rotating text period
|
|
iDisplayPeriod := iDisplayEnd - iDisplayStart;
|
|
iPeriodProgress := Progress - iDisplayStart;
|
|
iLetter := Trunc(iPeriodProgress / iDisplayPeriod * iLength) + 1;
|
|
sLetter := sText[iLetter];
|
|
end;
|
|
|
|
|
|
// GET A BITMAP OF OUR LETTER
|
|
iHeight := ARect.Bottom - ARect.Top;
|
|
iQuality := IEGlobalSettings().WordTransitionParams.Quality;
|
|
if iQuality > iHeight then
|
|
iQuality := iHeight;
|
|
|
|
Bitmap := TextToBitmap(sLetter,
|
|
iQuality,
|
|
IEGlobalSettings().WordTransitionParams.FontName,
|
|
Font_Color,
|
|
IEGlobalSettings().WordTransitionParams.Style,
|
|
Transparent_Color,
|
|
0, False,
|
|
bIncludeLeading);
|
|
try
|
|
Bitmap.PixelFormat := pf24bit;
|
|
|
|
// Maintain aspect ratio of Letter
|
|
ARect := GetImageRectWithinArea(Bitmap.Width, Bitmap.Height, ARect);
|
|
|
|
iLeft := ARect.Left;
|
|
iTop := ARect.Top;
|
|
iHeight := ARect.Bottom - ARect.Top;
|
|
iWidth := Round(Bitmap.Width / Bitmap.Height * iHeight);
|
|
|
|
// CONVERT THE LETTER BITMAP TO A REGION
|
|
Result := BitmapToRegion(Bitmap, iLeft, iTop, iWidth, iHeight, clWhite);
|
|
finally
|
|
Bitmap.Free;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
{ Transition Effects }
|
|
|
|
|
|
// Slide in from left
|
|
procedure SlideInFromLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
BitBlt(DestCanvas.Handle, X - W, 0, W, H,
|
|
Image.Canvas.Handle, 0, 0,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
// Slide in from right
|
|
procedure SlideInFromRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
BitBlt(DestCanvas.Handle, W - X, 0, W, H,
|
|
Image.Canvas.Handle, 0, 0,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
// Slide in from top
|
|
procedure SlideInFromTopEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
BitBlt(DestCanvas.Handle, 0, Y - H, W, H,
|
|
Image.Canvas.Handle, 0, 0,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
// Slide in from bottom
|
|
procedure SlideInFromBottomEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
BitBlt(DestCanvas.Handle, 0, H - Y, W, H,
|
|
Image.Canvas.Handle, 0, 0,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
|
|
// Reveal out from middle
|
|
procedure WipeOutFromVerticalCenterEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
mWX: Integer;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
mWX := (W - X) div 2;
|
|
BitBlt(DestCanvas.Handle, mWX, 0, X, H,
|
|
Image.Canvas.Handle, mWX, 0,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
// Reveal in from sides
|
|
procedure WipeInFromSidesEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
mX: Integer;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
mX := X div 2;
|
|
BitBlt(DestCanvas.Handle, 0, 0, mX, H,
|
|
Image.Canvas.Handle, 0, 0,
|
|
SRCCOPY);
|
|
BitBlt(DestCanvas.Handle, W - mX, 0, mX, H,
|
|
Image.Canvas.Handle, W - mX, 0,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
|
|
// Unroll from left
|
|
// 24bit verson
|
|
procedure UnrollFromLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
R1, R2: TRect;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
R1 := ARect;
|
|
R2 := ARect;
|
|
R1.Left := X;
|
|
if R1.Left < W div 5 then
|
|
R1.Right := R1.Left + X div 2
|
|
else
|
|
if (R1.Left + W div 5) > W then
|
|
R1.Right := R1.Left + (W - X) div 2
|
|
else
|
|
R1.Right := R1.Left + W div 10;
|
|
R2.Left := R1.Right;
|
|
R2.Right := R2.Left + R1.Right - R1.Left;
|
|
MirrorCopyRect(DestCanvas, R1, Image, R2, True, False);
|
|
R1.Left := 0;
|
|
R1.Right := X;
|
|
R2.Left := 0;
|
|
R2.Right := X;
|
|
DestCanvas.CopyRect(R1, Image.Canvas, R2);
|
|
end;
|
|
|
|
// Unroll from right
|
|
// 24bit verson
|
|
procedure UnrollFromRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
R1, R2: TRect;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
R1 := ARect;
|
|
R2 := ARect;
|
|
R1.Right := W - X;
|
|
if (R1.Right + W div 5) > W then
|
|
R1.Left := R1.Right - X div 2
|
|
else
|
|
if R1.Right < W div 5 then
|
|
R1.Left := R1.Right - (W - X) div 2
|
|
else
|
|
R1.Left := R1.Right - W div 10;
|
|
R2.Right := R1.Left;
|
|
R2.Left := R2.Right - R1.Right + R1.Left;
|
|
MirrorCopyRect(DestCanvas, R1, Image, R2, True, False);
|
|
R1.Left := W - X;
|
|
R1.Right := W;
|
|
R2.Left := W - X;
|
|
R2.Right := W;
|
|
DestCanvas.CopyRect(R1, Image.Canvas, R2);
|
|
end;
|
|
|
|
// Unroll from top
|
|
// 24bit verson
|
|
procedure UnrollFromTopEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
R1, R2: TRect;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
R1 := ARect;
|
|
R2 := ARect;
|
|
R1.Top := Y;
|
|
if R1.Top < H div 5 then
|
|
R1.Bottom := R1.Top + Y div 2
|
|
else
|
|
if (R1.Top + H div 5) > H then
|
|
R1.Bottom := R1.Top + (H - Y) div 2
|
|
else
|
|
R1.Bottom := R1.Top + H div 10;
|
|
R2.Top := R1.Bottom;
|
|
R2.Bottom := R2.Top + R1.Bottom - R1.Top;
|
|
MirrorCopyRect(DestCanvas, R1, Image, R2, False, True);
|
|
R1.Top := 0;
|
|
R1.Bottom := Y;
|
|
R2.Top := 0;
|
|
R2.Bottom := Y;
|
|
DestCanvas.CopyRect(R1, Image.Canvas, R2);
|
|
end;
|
|
|
|
// Unroll from bottom
|
|
// 24bit verson
|
|
procedure UnrollFromBottomEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
R1, R2: TRect;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
R1 := ARect;
|
|
R2 := ARect;
|
|
R1.Bottom := H - Y;
|
|
if (R1.Bottom + H div 5) > H then
|
|
R1.Top := R1.Bottom - Y div 2
|
|
else
|
|
if R1.Bottom < H div 5 then
|
|
R1.Top := R1.Bottom - (H - Y) div 2
|
|
else
|
|
R1.Top := R1.Bottom - H div 10;
|
|
R2.Bottom := R1.Top;
|
|
R2.Top := R2.Bottom - R1.Bottom + R1.Top;
|
|
MirrorCopyRect(DestCanvas, R1, Image, R2, False, True);
|
|
R1.Top := H - Y;
|
|
R1.Bottom := H;
|
|
R2.Top := H - Y;
|
|
R2.Bottom := H;
|
|
DestCanvas.CopyRect(R1, Image.Canvas, R2);
|
|
end;
|
|
|
|
|
|
// Build up from left
|
|
procedure BuildUpFromLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
N: Integer;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
BitBlt(DestCanvas.Handle, W - X, 0, X, H,
|
|
Image.Canvas.Handle, W - X, 0,
|
|
SRCCOPY);
|
|
N := Max((W - X) - (W div 10), 0);
|
|
StretchBlt(DestCanvas.Handle, 0, 0, W - X, H,
|
|
Image.Canvas.Handle, N, 0, W - X - N, H,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
// Build up from right
|
|
procedure BuildUpFromRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
N: Integer;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
BitBlt(DestCanvas.Handle, 0, 0, X, H,
|
|
Image.Canvas.Handle, 0, 0,
|
|
SRCCOPY);
|
|
N := Min(W - X, W div 10);
|
|
StretchBlt(DestCanvas.Handle, X, 0, W - X, H,
|
|
Image.Canvas.Handle, X, 0, N, H,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
// Expand in from top
|
|
procedure BuildUpFromTopEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
N: Integer;
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
BitBlt(DestCanvas.Handle, 0, H - Y, W, Y,
|
|
Image.Canvas.Handle, 0, H - Y,
|
|
SRCCOPY);
|
|
N := Max((H - Y) - H div 10, 0);
|
|
StretchBlt(DestCanvas.Handle, 0, 0, W, H - Y,
|
|
Image.Canvas.Handle, 0, N, W, H - Y - N,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
// Expand from bottom
|
|
procedure BuildUpFromBottomEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
N: Integer;
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
BitBlt(DestCanvas.Handle, 0, 0, W, Y,
|
|
Image.Canvas.Handle, 0, 0,
|
|
SRCCOPY);
|
|
N := Min(H - Y, H div 10);
|
|
StretchBlt(DestCanvas.Handle, 0, Y, W, H - Y,
|
|
Image.Canvas.Handle, 0, Y, W, N,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
|
|
// Expand from left
|
|
procedure ExpandFromLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
BitBlt(DestCanvas.Handle, 0, 0, W, H, Screen.Canvas.Handle, 0, 0, SRCCOPY);
|
|
|
|
StretchBlt(DestCanvas.Handle, 0, 0, X, H,
|
|
Image.Canvas.Handle, 0, 0, W, H,
|
|
SRCCOPY);
|
|
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
ColorBlend(DestCanvas.Handle, Rect(X, 0, W, H), clBlack, 100 - SQR(10 - Progress div 10));
|
|
end;
|
|
|
|
// Expand from right
|
|
procedure ExpandFromRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
BitBlt(DestCanvas.Handle, 0, 0, W, H, Screen.Canvas.Handle, 0, 0, SRCCOPY);
|
|
|
|
StretchBlt(DestCanvas.Handle, W - X, 0, X, H,
|
|
Image.Canvas.Handle, 0, 0, W, H,
|
|
SRCCOPY);
|
|
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
ColorBlend(DestCanvas.Handle, Rect(0, 0, W - X, H), clBlack, 100 - SQR(10 - Progress div 10));
|
|
end;
|
|
|
|
// Expand from top
|
|
procedure ExpandFromTopEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
BitBlt(DestCanvas.Handle, 0, 0, W, H, Screen.Canvas.Handle, 0, 0, SRCCOPY);
|
|
|
|
StretchBlt(DestCanvas.Handle, 0, 0, W, Y,
|
|
Image.Canvas.Handle, 0, 0, W, H,
|
|
SRCCOPY);
|
|
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
ColorBlend(DestCanvas.Handle, Rect(0, Y, W, H), clBlack, 100 - SQR(10 - Progress div 10));
|
|
end;
|
|
|
|
// Expand from bottom
|
|
procedure ExpandFromBottomEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
BitBlt(DestCanvas.Handle, 0, 0, W, H, Screen.Canvas.Handle, 0, 0, SRCCOPY);
|
|
|
|
StretchBlt(DestCanvas.Handle, 0, H - Y, W, Y,
|
|
Image.Canvas.Handle, 0, 0, W, H,
|
|
SRCCOPY);
|
|
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
ColorBlend(DestCanvas.Handle, Rect(0, 0, W, H), clBlack, 100 - SQR(10 - Progress div 10));
|
|
end;
|
|
|
|
// Expand from top left
|
|
procedure ExpandFromTopLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
StretchBlt(DestCanvas.Handle, 0, 0, X, Y,
|
|
Image.Canvas.Handle, 0, 0, W, H,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
// Expand from top right
|
|
procedure ExpandFromTopRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
StretchBlt(DestCanvas.Handle, W - X, 0, X, Y,
|
|
Image.Canvas.Handle, 0, 0, W, H,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
// Expand from bottom left
|
|
procedure ExpandFromBottomLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
StretchBlt(DestCanvas.Handle, 0, H - Y, X, Y,
|
|
Image.Canvas.Handle, 0, 0, W, H,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
|
|
// Expand from bottom right
|
|
procedure ExpandFromBottomRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
StretchBlt(DestCanvas.Handle, W - X, H - Y, X, Y,
|
|
Image.Canvas.Handle, 0, 0, W, H,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
|
|
// Expand in from left
|
|
procedure ExpandInFromLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
StretchBlt(DestCanvas.Handle, X - W, 0, (2 * W) - X, H,
|
|
Image.Canvas.Handle, W - X, 0, X, H,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
// Expand in from right
|
|
procedure ExpandInFromRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
StretchBlt(DestCanvas.Handle, 0, 0, (2 * W) - X, H,
|
|
Image.Canvas.Handle, 0, 0, X, H,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
// Expand in from top
|
|
procedure ExpandInFromTopEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
StretchBlt(DestCanvas.Handle, 0, Y - H, W, (2 * H) - Y,
|
|
Image.Canvas.Handle, 0, H - Y, W, Y,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
// Expand in from bottom
|
|
procedure ExpandInFromBottomEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
StretchBlt(DestCanvas.Handle, 0, 0, W, (2 * H) - Y,
|
|
Image.Canvas.Handle, 0, 0, W, Y,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
// Expand in to middle (horiz)
|
|
procedure ExpandInToHorizonEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
StretchBlt(DestCanvas.Handle, 0, Y - H, W, (3 * H) - (2 * Y),
|
|
Image.Canvas.Handle, 0, (H - Y) div 2, W, Y,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
// Expand in from top / bottom
|
|
procedure ExpandInFromTopAndBottomEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
mY, mH: Integer;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
mY := Y div 2;
|
|
mH := H div 2;
|
|
StretchBlt(DestCanvas.Handle, 0, 0, W, mY,
|
|
Image.Canvas.Handle, 0, 0, W, mH,
|
|
SRCCOPY);
|
|
StretchBlt(DestCanvas.Handle, 0, H - mY, W, mY,
|
|
Image.Canvas.Handle, 0, mH, W, mH,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
// Expand in to middle
|
|
procedure ExpandInToVerticalCenterEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
StretchBlt(DestCanvas.Handle, X - W, 0, (3 * W) - (2 * X), H,
|
|
Image.Canvas.Handle, (W - X) div 2, 0, X, H,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
// Expand in from sides
|
|
procedure ExpandInFromSidesEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
mX, mW: Integer;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
mX := X div 2;
|
|
mW := W div 2;
|
|
StretchBlt(DestCanvas.Handle, 0, 0, mX, H,
|
|
Image.Canvas.Handle, 0, 0, mW, H,
|
|
SRCCOPY);
|
|
StretchBlt(DestCanvas.Handle, W - mX, 0, mX, H,
|
|
Image.Canvas.Handle, mW, 0, mW, H,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
|
|
// Expand out from middle (horiz)
|
|
procedure ExpandOutFromHorizonEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
StretchBlt(DestCanvas.Handle, 0, (H - Y) div 2, W, Y,
|
|
Image.Canvas.Handle, 0, 0, W, H,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
// Expand out from middle
|
|
procedure ExpandOutFromVerticalCenterEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
StretchBlt(DestCanvas.Handle, (W - X) div 2, 0, X, H,
|
|
Image.Canvas.Handle, 0, 0, W, H,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
|
|
// Reveal from middle (horiz)
|
|
procedure WipeFromHorizonEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
mHY: Integer;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
mHY := (H - Y) div 2;
|
|
BitBlt(DestCanvas.Handle, 0, mHY, W, Y,
|
|
Image.Canvas.Handle, 0, mHY,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
// Slide in from top / bottom
|
|
procedure WipeInFromTopAndBottomEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
mY: Integer;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
mY := Y div 2;
|
|
BitBlt(DestCanvas.Handle, 0, 0, W, mY,
|
|
Image.Canvas.Handle, 0, 0,
|
|
SRCCOPY);
|
|
BitBlt(DestCanvas.Handle, 0, H - mY, W, mY,
|
|
Image.Canvas.Handle, 0, H - mY,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
|
|
// Reveal from top left
|
|
procedure WipeFromTopLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
BitBlt(DestCanvas.Handle, 0, 0, X, Y,
|
|
Image.Canvas.Handle, 0, 0,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
// Reveal from bottom left
|
|
procedure WipeFromBottomLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
BitBlt(DestCanvas.Handle, 0, H - Y, X, Y,
|
|
Image.Canvas.Handle, 0, H - Y,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
// Reveal from bottom right
|
|
procedure WipeFromBottomRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
BitBlt(DestCanvas.Handle, W - X, H - Y, X, Y,
|
|
Image.Canvas.Handle, W - X, H - Y,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
// Reveal from top right
|
|
procedure WipeFromTopRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
BitBlt(DestCanvas.Handle, W - X, 0, X, Y,
|
|
Image.Canvas.Handle, W - X, 0,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
// Appear and Contract to top left
|
|
procedure ShrinkToTopLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
StretchBlt(DestCanvas.Handle, 0, 0, (2 * W) - X, (2 * H) - Y,
|
|
Image.Canvas.Handle, 0, 0, X, Y,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
// Appear and Contract to bottom left
|
|
procedure ShrinkToBottomLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
StretchBlt(DestCanvas.Handle, 0, Y - H, (2 * W) - X, (2 * H) - Y,
|
|
Image.Canvas.Handle, 0, H - Y, X, Y,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
// Appear and Contract to bottom right
|
|
procedure ShrinkToBottomRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
StretchBlt(DestCanvas.Handle, X - W, Y - H, (2 * W) - X, (2 * H) - Y,
|
|
Image.Canvas.Handle, W - X, H - Y, X, Y,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
// Appear and Contract to top right
|
|
procedure ShrinkToTopRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
StretchBlt(DestCanvas.Handle, X - W, 0, (2 * W) - X, (2 * H) - Y,
|
|
Image.Canvas.Handle, W - X, 0, X, Y,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
// Appear and Contract to middle
|
|
procedure ShrinkToCenterEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
StretchBlt(DestCanvas.Handle, X - W, Y - H, (3 * W) - (2 * X), (3 * H) - (2 * Y),
|
|
Image.Canvas.Handle, (W - X) div 2, (H - Y) div 2, X, Y,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
// Quarters Reveal in to middle
|
|
procedure QuartersWipeInToCenterEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
mX, mY: Integer;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
mX := X div 2;
|
|
mY := Y div 2;
|
|
BitBlt(DestCanvas.Handle, 0, 0, mX, mY,
|
|
Image.Canvas.Handle, 0, 0,
|
|
SRCCOPY);
|
|
BitBlt(DestCanvas.Handle, 0, H - mY, mX, mY,
|
|
Image.Canvas.Handle, 0, H - mY,
|
|
SRCCOPY);
|
|
BitBlt(DestCanvas.Handle, W - mX, H - mY, mX, mY,
|
|
Image.Canvas.Handle, W - mX, H - mY,
|
|
SRCCOPY);
|
|
BitBlt(DestCanvas.Handle, W - mX, 0, mX, mY,
|
|
Image.Canvas.Handle, W - mX, 0,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
// Quarters Expand to middle
|
|
procedure QuartersExpandToCenterEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
mX, mY, mW, mH: Integer;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
mX := X div 2;
|
|
mY := Y div 2;
|
|
mW := W div 2;
|
|
mH := H div 2;
|
|
StretchBlt(DestCanvas.Handle, 0, 0, mX, mY,
|
|
Image.Canvas.Handle, 0, 0, mW, mH,
|
|
SRCCOPY);
|
|
StretchBlt(DestCanvas.Handle, 0, H - mY, mX, mY,
|
|
Image.Canvas.Handle, 0, mH, mW, mH,
|
|
SRCCOPY);
|
|
StretchBlt(DestCanvas.Handle, W - mX, H - mY, mX, mY,
|
|
Image.Canvas.Handle, mW, mH, mW, mH,
|
|
SRCCOPY);
|
|
StretchBlt(DestCanvas.Handle, W - mX, 0, mX, mY,
|
|
Image.Canvas.Handle, mW, 0, mW, mH,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
// Quarters Slide in to middle
|
|
procedure QuartersSlideInToCenterEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
mX, mY, mW, mH: Integer;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
mX := X div 2;
|
|
mY := Y div 2;
|
|
mW := W div 2;
|
|
mH := H div 2;
|
|
BitBlt(DestCanvas.Handle, mX - mW, 0, mW, mH,
|
|
Image.Canvas.Handle, 0, 0,
|
|
SRCCOPY);
|
|
BitBlt(DestCanvas.Handle, mW, mY - mH, mW, mH,
|
|
Image.Canvas.Handle, mW, 0,
|
|
SRCCOPY);
|
|
BitBlt(DestCanvas.Handle, W - mX, mH, mW, mH,
|
|
Image.Canvas.Handle, mW, mH,
|
|
SRCCOPY);
|
|
BitBlt(DestCanvas.Handle, 0, H - mY, mW, mH,
|
|
Image.Canvas.Handle, 0, mH,
|
|
SRCCOPY);
|
|
end;
|
|
|
|
|
|
// Curved Reveal from left
|
|
procedure CurvedWipeFromLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateRoundRectRgn(-2 * W, 0, 2 * X, H + 1, 2 * W, 2 * W);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Curved Reveal from right
|
|
procedure CurvedWipeFromRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateRoundRectRgn(W - 2 * X, 0, 3 * W, H + 1, 2 * W, 2 * W);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
|
|
// Curved Reveal from top
|
|
procedure CurvedWipeFromTopEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateRoundRectRgn(0, -2 * H, W + 1, 2 * Y, 2 * H, 2 * H);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Curved Reveal from bottom
|
|
procedure CurvedWipeFromBottomEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateRoundRectRgn(0, H - 2 * Y, W + 1, 3 * H, 2 * H, 2 * H);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Curved reveal from top left
|
|
procedure CurvedWipeFromTopLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateRoundRectRgn(-W, -H, 3 * X div 2, 3 * Y div 2, 2 * W, 2 * H);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Curved reveal from top right
|
|
procedure CurvedWipeFromTopRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateRoundRectRgn(W - 3 * X div 2, -H, 2 * W, 3 * Y div 2, 2 * W, 2 * H);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Curved reveal from bottom left
|
|
procedure CurvedWipeFromBottomLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateRoundRectRgn(-W, H - 3 * Y div 2, 3 * X div 2, 2 * H, 2 * W, 2 * H);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Curved reveal from bottom right
|
|
procedure CurvedWipeFromBottomRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateRoundRectRgn(W - 3 * X div 2, H - 3 * Y div 2, 2 * W, 2 * H, 2 * W, 2 * H);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
|
|
procedure DoWipeEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer;
|
|
AShape: TIEShape; bReverse: Boolean; rScale: Single = 1; Angle: Integer = 0);
|
|
var
|
|
mW, mH: Integer;
|
|
Rgn, TmpRgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
iScaledX, iScaledY: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
mW := W div 2;
|
|
mH := H div 2;
|
|
|
|
if bReverse then
|
|
begin
|
|
Rgn := CreateRectRgn(0, 0, W, H);
|
|
if AShape = iesTransCircularShape then
|
|
TmpRgn := CreateRoundRectRgn(X - mW, Y - mH, 3 * mW - X, 3 * mH - Y, 9 * (W - X) div 5, 9 * (H - Y) div 5)
|
|
else
|
|
if (rScale <> 1) or (AShape = iesTransLetter) then
|
|
begin
|
|
iScaledX := Round(rScale * (W - X)) div 2;
|
|
iScaledY := Round(rScale * (H - Y)) div 2;
|
|
if AShape = iesTransLetter then
|
|
TmpRgn := CreateRegionFromLetter(Rect(X - mW - iScaledX, Y - mH - iScaledY, 3 * mW - X + iScaledX, 3 * mH - Y + iScaledY), Progress, 60, 100)
|
|
else
|
|
TmpRgn := IECreateShapeRegion(AShape, Rect(X - mW - iScaledX, Y - mH - iScaledY, 3 * mW - X + iScaledX, 3 * mH - Y + iScaledY), iebDefault, Angle)
|
|
end
|
|
else
|
|
TmpRgn := IECreateShapeRegion(AShape, Rect(X - mW, Y - mH, 3 * mW - X, 3 * mH - Y), iebDefault, Angle);
|
|
CombineRgn(Rgn, Rgn, TmpRgn, RGN_XOR);
|
|
DeleteObject(TmpRgn)
|
|
end
|
|
else
|
|
begin
|
|
if AShape = iesTransCircularShape then
|
|
Rgn := CreateRoundRectRgn(mW - X, mH - Y, mW + X, mH + Y, 9 * X div 5, 9 * Y div 5)
|
|
else
|
|
if (rScale <> 1) or (AShape = iesTransLetter) then
|
|
begin
|
|
iScaledX := Round(rScale * X);
|
|
iScaledY := Round(rScale * Y);
|
|
if AShape = iesTransLetter then
|
|
Rgn := CreateRegionFromLetter(Rect(mW - iScaledX, mH - iScaledY, mW + iScaledX, mH + iScaledY), Progress, 0, 60)
|
|
else
|
|
Rgn := IECreateShapeRegion(AShape, Rect(mW - iScaledX, mH - iScaledY, mW + iScaledX, mH + iScaledY), iebDefault, Angle)
|
|
end
|
|
else
|
|
Rgn := IECreateShapeRegion(AShape, Rect(mW - X, mH - Y, mW + X, mH + Y), iebDefault, Angle);
|
|
end;
|
|
|
|
try
|
|
if (AShape = iesCross) or (AShape = iesTransLetter) or (AShape = iesDoubleHeart) then
|
|
BitBlt(DestCanvas.Handle, 0, 0, W, H, Screen.Canvas.Handle, 0, 0, SRCCOPY);
|
|
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
finally
|
|
DeleteObject(Rgn);
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
// Circular Wipe from Center
|
|
procedure CircularWipeFromCenterEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
DoWipeEffect(DestCanvas, Screen, Image, ARect, Progress, iesTransCircularShape, False);
|
|
end;
|
|
|
|
// Circular Wipe to Center
|
|
procedure CircularWipeToCenterEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
DoWipeEffect(DestCanvas, Screen, Image, ARect, Progress, iesTransCircularShape, True);
|
|
end;
|
|
|
|
|
|
// Heart Wipe from Center
|
|
procedure HeartWipeOutEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
DoWipeEffect(DestCanvas, Screen, Image, ARect, Progress, iesDoubleHeart, False, 1.3)
|
|
else
|
|
DoWipeEffect(DestCanvas, Screen, Image, ARect, Progress, iesHeart, False, 1.3)
|
|
end;
|
|
|
|
// Heart Wipe to Center
|
|
procedure HeartWipeInEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
DoWipeEffect(DestCanvas, Screen, Image, ARect, Progress, iesDoubleHeart, True, 1.3)
|
|
else
|
|
DoWipeEffect(DestCanvas, Screen, Image, ARect, Progress, iesHeart, True, 1.3)
|
|
end;
|
|
|
|
|
|
|
|
// 5 Point Star Wipe from Center
|
|
procedure Star5WipeOutEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
DoWipeEffect(DestCanvas, Screen, Image, ARect, Progress, iesStar5, False, 1.6);
|
|
end;
|
|
|
|
// 5 Point Star Wipe to Center
|
|
procedure Star5WipeInEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
DoWipeEffect(DestCanvas, Screen, Image, ARect, Progress, iesStar5, True, 1.6);
|
|
end;
|
|
|
|
|
|
// 6 Point Star Wipe from Center
|
|
procedure Star6WipeOutEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Angle: Integer;
|
|
begin
|
|
Angle := 0;
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
Angle := 90;
|
|
DoWipeEffect(DestCanvas, Screen, Image, ARect, Progress, IEGlobalSettings().TransitionsDrawShape, False, 1.3, Angle);
|
|
end;
|
|
|
|
// 6 Point Star Wipe to Center
|
|
procedure Star6WipeInEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Angle: Integer;
|
|
begin
|
|
Angle := 0;
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
Angle := 90;
|
|
DoWipeEffect(DestCanvas, Screen, Image, ARect, Progress, IEGlobalSettings().TransitionsDrawShape, True, 1.3, Angle);
|
|
end;
|
|
|
|
|
|
// Word Wipe from Center
|
|
procedure WordWipeOutEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
rSize: Single;
|
|
begin
|
|
rSize := 3;
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
rSize := 6;
|
|
DoWipeEffect(DestCanvas, Screen, Image, ARect, Progress, iesTransLetter, False, rSize);
|
|
end;
|
|
|
|
// Word Wipe to Center
|
|
procedure WordWipeInEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
rSize: Single;
|
|
begin
|
|
rSize := 3;
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
rSize := 6;
|
|
DoWipeEffect(DestCanvas, Screen, Image, ARect, Progress, iesTransLetter, True, rSize);
|
|
end;
|
|
|
|
// Explosion Wipe from Center
|
|
procedure ExplosionWipeOutEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Angle: Integer;
|
|
begin
|
|
Angle := 0;
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
Angle := 180;
|
|
DoWipeEffect(DestCanvas, Screen, Image, ARect, Progress, iesExplosion, False, 0, Angle );
|
|
end;
|
|
|
|
// Explosion Wipe to Center
|
|
procedure ExplosionWipeInEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Angle: Integer;
|
|
begin
|
|
Angle := 0;
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
Angle := 180;
|
|
DoWipeEffect(DestCanvas, Screen, Image, ARect, Progress, iesExplosion, True, 0, Angle );
|
|
end;
|
|
|
|
|
|
// Cross Wipe from Center
|
|
procedure CrossWipeOutEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
DoWipeEffect(DestCanvas, Screen, Image, ARect, Progress, iesCross, False, 3.6);
|
|
end;
|
|
|
|
// Cross Wipe to Center
|
|
procedure CrossWipeInEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
DoWipeEffect(DestCanvas, Screen, Image, ARect, Progress, iesCross, True, 3.5);
|
|
end;
|
|
|
|
// Bars in from left
|
|
procedure BarsInFromLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateBarRgn(2 * X, 0, W, H, 2, 0);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Bars in from right
|
|
procedure BarsInFromRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateBarRgn(2 * X, 0, W, H, 1, 0);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Bars right then left
|
|
procedure BarsRightThenLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateBarRgn(2 * X, 0, W, H, 5, 0);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Bars left then right
|
|
procedure BarsLeftThenRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateBarRgn(2 * X, 0, W, H, 4, 0);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Bars from both sides
|
|
procedure BarsFromBothSidesEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateBarRgn(X, 0, W, H, 3, 0);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Bars from top
|
|
procedure BarsFromTopEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateBarRgn(0, 2 * Y, W, H, 0, 2);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Bars from bottom
|
|
procedure BarsFromBottomEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateBarRgn(0, 2 * Y, W, H, 0, 1);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Bars top then bottom
|
|
procedure BarsTopThenBottomEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateBarRgn(0, 2 * Y, W, H, 0, 4);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Bars from top and bottom
|
|
procedure BarsFromTopAndBottomEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateBarRgn(0, Y, W, H, 0, 3);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Bars bottom then top
|
|
procedure BarsBottomThenTopEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateBarRgn(0, 2 * Y, W, H, 0, 5);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
|
|
// Criss Cross reveal from top left
|
|
procedure CrisscrossWipeFromTopLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateBarRgn(2 * X, 2 * Y, W, H, 2, 2);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Criss Cross reveal from top right
|
|
procedure CrisscrossWipeFromTopRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateBarRgn(2 * X, 2 * Y, W, H, 1, 2);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Criss Cross reveal from bottom left
|
|
procedure CrisscrossWipeFromBottomLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateBarRgn(2 * X, 2 * Y, W, H, 2, 1);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Criss Cross reveal from bottom right
|
|
procedure CrisscrossWipeFromBottomRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateBarRgn(2 * X, 2 * Y, W, H, 1, 1);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Criss Cross reveal bounce from top left
|
|
procedure CrisscrossWipeBounceFromTopLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateBarRgn(2 * X, 2 * Y, W, H, 4, 4);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Criss Cross reveal bounce from bottom left
|
|
procedure CrisscrossWipeBounceFromBottomLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateBarRgn(2 * X, 2 * Y, W, H, 4, 5);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Criss Cross reveal bounce from top right
|
|
procedure CrisscrossWipeBounceFromTopRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateBarRgn(2 * X, 2 * Y, W, H, 5, 4);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Criss Cross reveal bounce from bottom right
|
|
procedure CrisscrossWipeBounceFromBottomRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateBarRgn(2 * X, 2 * Y, W, H, 5, 5);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Criss Cross reveal from right top and bottom
|
|
procedure CrisscrossWipeFromRightTopAndBottomEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateBarRgn(X, Y, W, H, 1, 3);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Criss Cross reveal from left top and bottom
|
|
procedure CrisscrossWipeFromLeftTopAndBottomEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateBarRgn(X, Y, W, H, 2, 3);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Criss Cross reveal from left right and bottom
|
|
procedure CrisscrossWipeFromLeftRightAndBottomEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateBarRgn(X, Y, W, H, 3, 1);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Criss Cross reveal from left right and top
|
|
procedure CrisscrossWipeFromLeftRightAndTopEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateBarRgn(X, Y, W, H, 3, 2);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Criss Cross reveal from top left right and bottom
|
|
procedure CrisscrossWipeFromTopLeftRightAndBottomEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateBarRgn(X, Y, W, H, 3, 3);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Criss Cross reveal from bottom left top right
|
|
procedure CrisscrossWipeFromBottomLeftTopRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn, TmpRgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateBarRgn(2 * X, 2 * Y, W, H, 1, 1);
|
|
TmpRgn := CreateBarRgn(2 * X, 2 * Y, W, H, 2, 2);
|
|
CombineRgn(Rgn, Rgn, TmpRgn, RGN_AND);
|
|
DeleteObject(TmpRgn);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
|
|
// Uneven shred from left
|
|
procedure ShreddedFromLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreatePourRgn(X, 0, W, H, 2, 0);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Uneven shred from right
|
|
procedure ShreddedFromRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreatePourRgn(X, 0, W, H, 1, 0);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Uneven shred from top
|
|
procedure ShreddedFromTopEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreatePourRgn(0, Y, W, H, 0, 2);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Unven shred from bottom
|
|
procedure ShreddedFromBottomEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreatePourRgn(0, Y, W, H, 0, 1);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Uneven shred from top and left
|
|
procedure ShreddedFromTopAndLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreatePourRgn(X, Y, W, H, 2, 2);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Uneven shred from top and right
|
|
procedure ShreddedFromTopAndRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreatePourRgn(X, Y, W, H, 1, 2);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Uneven shred from bottom and left
|
|
procedure ShreddedFromBottomAndLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreatePourRgn(X, Y, W, H, 2, 1);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Uneven shred from bottom and right
|
|
procedure ShreddedFromBottomAndRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreatePourRgn(X, Y, W, H, 1, 1);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Uneven shred from horiz and left
|
|
procedure ShreddedFromHorizonAndLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreatePourRgn(X, Y, W, H, 2, 3);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Uneven shred from horiz and right
|
|
procedure ShreddedFromHorizonAndRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreatePourRgn(X, Y, W, H, 1, 3);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Uneven shred from bottom and vert middle
|
|
procedure ShreddedFromBottomAndVerticalCenterEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreatePourRgn(X, Y, W, H, 3, 1);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Uneven shred from top and vert middle
|
|
procedure ShreddedFromTopAndVerticalCenterEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreatePourRgn(X, Y, W, H, 3, 2);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Uneven shred from centre
|
|
procedure ShreddedFromCenterEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreatePourRgn(X, Y, W, H, 3, 3);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Uneven shred to centre
|
|
procedure ShreddedToCenterEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreatePourRgn(X, Y, W, H, 4, 4);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Uneven shred out from middle (horiz)
|
|
procedure ShreddedOutFromVerticalCenterEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreatePourRgn(X, 0, W, H, 3, 0);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Uneven shred in to middle (horiz)
|
|
procedure ShreddedInToVerticalCenterEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreatePourRgn(X, 0, W, H, 4, 0);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Uneven shred from horizon
|
|
procedure ShreddedOutFromHorizonEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreatePourRgn(0, Y, W, H, 0, 3);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Uneven shred in to horizon
|
|
procedure ShreddedInToHorizonEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreatePourRgn(0, Y, W, H, 0, 4);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
|
|
// Reveal diagonal from top left
|
|
procedure WipeDiagonalFromTopLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreatePolygonRgnEx([0, 0, 2 * X, 0, 0, 2 * Y]);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Reveal diagonal from top right
|
|
procedure WipeDiagonalFromTopRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreatePolygonRgnEx([W, 0, W - 2 * X, 0, W, 2 * Y]);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Reveal diagonal from bottom left
|
|
procedure WipeDiagonalFromBottomLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreatePolygonRgnEx([0, H, 2 * X, H, 0, H - 2 * Y]);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Reveal diagonal from bottom right
|
|
procedure WipeDiagonalFromBottomRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreatePolygonRgnEx([W, H, W - 2 * X, H, W, H - 2 * Y]);
|
|
SelectClipRgn(DestCanvas.Handle, Rgn);
|
|
DeleteObject(Rgn);
|
|
DestCanvas.Draw(0, 0, Image);
|
|
SelectClipRgn(DestCanvas.Handle, 0);
|
|
end;
|
|
|
|
// Diagonal sweep from top left bottom right clockwise
|
|
procedure DiagonalSweepClockwiseEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn, TmpRgn: HRGN;
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreatePolygonRgnEx([W, 0, 0, 0, W, Y]);
|
|
TmpRgn := CreatePolygonRgnEx([W, H, 0, H, 0, H - Y]);
|
|
CombineRgn(Rgn, Rgn, TmpRgn, RGN_OR);
|
|
DeleteObject(TmpRgn);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Diagonal sweep from top left bottom right anticlockwise
|
|
procedure DiagonalSweepCounterClockwiseEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn, TmpRgn: HRGN;
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreatePolygonRgnEx([0, H, 0, 0, X, H]);
|
|
TmpRgn := CreatePolygonRgnEx([W, H, W, 0, W - X, 0]);
|
|
CombineRgn(Rgn, Rgn, TmpRgn, RGN_OR);
|
|
DeleteObject(TmpRgn);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Starburst clockwise from center
|
|
procedure StarburstClockwiseFromCenterEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
mW, mH: Integer;
|
|
Rgn, TmpRgn: HRGN;
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
mW := W div 2;
|
|
mH := H div 2;
|
|
Rgn := CreatePolygonRgnEx([mW, mH, 0, 0, X, 0]);
|
|
TmpRgn := CreatePolygonRgnEx([mW, mH, 0, H, 0, H - Y]);
|
|
CombineRgn(Rgn, Rgn, TmpRgn, RGN_OR);
|
|
DeleteObject(TmpRgn);
|
|
TmpRgn := CreatePolygonRgnEx([mW, mH, W, H, W - X, H]);
|
|
CombineRgn(Rgn, Rgn, TmpRgn, RGN_OR);
|
|
DeleteObject(TmpRgn);
|
|
TmpRgn := CreatePolygonRgnEx([mW, mH, W, 0, W, Y]);
|
|
CombineRgn(Rgn, Rgn, TmpRgn, RGN_OR);
|
|
DeleteObject(TmpRgn);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Starburst anticlockwise from center
|
|
procedure StarburstCounterClockwiseFromCenterEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
mW, mH: Integer;
|
|
Rgn, TmpRgn: HRGN;
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
mW := W div 2;
|
|
mH := H div 2;
|
|
Rgn := CreatePolygonRgnEx([mW, mH, 0, 0, 0, Y]);
|
|
TmpRgn := CreatePolygonRgnEx([mW, mH, 0, H, X, H]);
|
|
CombineRgn(Rgn, Rgn, TmpRgn, RGN_OR);
|
|
DeleteObject(TmpRgn);
|
|
TmpRgn := CreatePolygonRgnEx([mW, mH, W, H, W, H - Y]);
|
|
CombineRgn(Rgn, Rgn, TmpRgn, RGN_OR);
|
|
DeleteObject(TmpRgn);
|
|
TmpRgn := CreatePolygonRgnEx([mW, mH, W, 0, W - X, 0]);
|
|
CombineRgn(Rgn, Rgn, TmpRgn, RGN_OR);
|
|
DeleteObject(TmpRgn);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Triangular shred
|
|
procedure ExpandingTrianglesEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
sW, sH, dW, dH: Integer;
|
|
Rgn, TmpRgn: HRGN;
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
sW := (W div 10) + 1;
|
|
sH := (H div 10) + 1;
|
|
dW := MulDiv(sW, Progress, 50);
|
|
dH := MulDiv(sH, Progress, 50);
|
|
Rgn := 0;
|
|
X := 0;
|
|
while X < W do
|
|
begin
|
|
Inc(X, sW);
|
|
Y := 0;
|
|
while Y < H + sH do
|
|
begin
|
|
Inc(Y, sH);
|
|
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
TmpRgn := CreatePolygonRgnEx([X - dW, Y + dH,
|
|
X, Y - dH,
|
|
X + dW, Y + dH])
|
|
else
|
|
TmpRgn := CreatePolygonRgnEx([X - dW, Y - dH,
|
|
X, Y + dH,
|
|
X + dW, Y - dH]);
|
|
|
|
if Rgn <> 0 then
|
|
begin
|
|
CombineRgn(Rgn, Rgn, TmpRgn, RGN_OR);
|
|
DeleteObject(TmpRgn);
|
|
end
|
|
else
|
|
Rgn := TmpRgn;
|
|
Inc(Y, sH);
|
|
end;
|
|
Inc(X, sW);
|
|
end;
|
|
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
|
|
// Speckle appear from left
|
|
procedure SpeckledWipeFromLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateSwarmRgn(X, Y, W, H, 2, 0);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Speckle appear from right
|
|
procedure SpeckledWipeFromRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateSwarmRgn(X, Y, W, H, 1, 0);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Speckle appear from top
|
|
procedure SpeckledWipeFromTopEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateSwarmRgn(X, Y, W, H, 0, 2);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Speckle appear from bottom
|
|
procedure SpeckledWipeFromBottomEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Rgn: HRGN;
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
Rgn := CreateSwarmRgn(X, Y, W, H, 0, 1);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
|
|
// Push and squeeze left
|
|
procedure PushAndSqueezeLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
with DestCanvas do
|
|
begin
|
|
StretchBlt(Handle, 0, 0, W - X, H, Handle, 0, 0, W, H, SRCCOPY);
|
|
BitBlt(Handle, W - X, 0, X, H, Image.Canvas.Handle, 0, 0, SRCCOPY);
|
|
end;
|
|
end;
|
|
|
|
// Push and squeeze right
|
|
procedure PushAndSqueezeRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
with DestCanvas do
|
|
begin
|
|
StretchBlt(Handle, X, 0, W - X, H, Handle, 0, 0, W, H, SRCCOPY);
|
|
BitBlt(Handle, 0, 0, X, H, Image.Canvas.Handle, W - X, 0, SRCCOPY);
|
|
end;
|
|
end;
|
|
|
|
// Push and sqeeze up
|
|
procedure PushAndSqueezeUpEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
with DestCanvas do
|
|
begin
|
|
StretchBlt(Handle, 0, 0, W, H - Y, Handle, 0, 0, W, H, SRCCOPY);
|
|
BitBlt(Handle, 0, H - Y, W, Y, Image.Canvas.Handle, 0, 0, SRCCOPY);
|
|
end;
|
|
end;
|
|
|
|
// Push and sqeeze down
|
|
procedure PushAndSqueezeDownEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
with DestCanvas do
|
|
begin
|
|
StretchBlt(Handle, 0, Y, W, H - Y, Handle, 0, 0, W, H, SRCCOPY);
|
|
BitBlt(Handle, 0, 0, W, Y, Image.Canvas.Handle, 0, H - Y, SRCCOPY);
|
|
end;
|
|
end;
|
|
|
|
|
|
// Push left
|
|
procedure PushLeftAndSlideOutEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
with DestCanvas do
|
|
begin
|
|
BitBlt(Handle, 0, 0, W - X, H,
|
|
Handle, X, 0,
|
|
SRCCOPY);
|
|
BitBlt(Handle, W - X, 0, X, H,
|
|
Image.Canvas.Handle, 0, 0,
|
|
SRCCOPY);
|
|
end;
|
|
end;
|
|
|
|
// Push right
|
|
procedure PushRightAndSlideOutEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
with DestCanvas do
|
|
begin
|
|
BitBlt(Handle, X, 0, W - X, H,
|
|
Handle, 0, 0,
|
|
SRCCOPY);
|
|
BitBlt(Handle, 0, 0, X, H,
|
|
Image.Canvas.Handle, W - X, 0,
|
|
SRCCOPY);
|
|
end;
|
|
end;
|
|
|
|
// Push up
|
|
procedure PushUpAndSlideOutEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
with DestCanvas do
|
|
begin
|
|
BitBlt(Handle, 0, 0, W, H - Y, Handle, 0, Y, SRCCOPY);
|
|
BitBlt(Handle, 0, H - Y, W, Y, Image.Canvas.Handle, 0, 0, SRCCOPY);
|
|
end;
|
|
end;
|
|
|
|
// Push down
|
|
procedure PushDownAndSlideOutEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
with DestCanvas do
|
|
begin
|
|
BitBlt(Handle, 0, Y, W, H - Y, Handle, 0, 0, SRCCOPY);
|
|
BitBlt(Handle, 0, 0, W, Y, Image.Canvas.Handle, 0, H - Y, SRCCOPY);
|
|
end;
|
|
end;
|
|
|
|
|
|
// Blind vertically
|
|
procedure VerticalBlindsEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
S, D: Integer;
|
|
ComplexRegion: TComplexRegion;
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
S := (W div 40) + 1;
|
|
D := MulDiv(S, Progress, 100);
|
|
ComplexRegion := TComplexRegion.Create;
|
|
try
|
|
X := 0;
|
|
while X < W do
|
|
begin
|
|
Inc(X, S);
|
|
ComplexRegion.AddRect(X - D, 0, X + D, H);
|
|
Inc(X, S);
|
|
end;
|
|
Rgn := ComplexRegion.CreateRegion;
|
|
finally
|
|
ComplexRegion.Free;
|
|
end;
|
|
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Blind horizontally
|
|
procedure HorizontalBlindsEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
S, D: Integer;
|
|
ComplexRegion: TComplexRegion;
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
S := (H div 40) + 1;
|
|
D := MulDiv(S, Progress, 100);
|
|
ComplexRegion := TComplexRegion.Create;
|
|
try
|
|
Y := 0;
|
|
while Y < H do
|
|
begin
|
|
Inc(Y, S);
|
|
ComplexRegion.AddRect(0, Y - D, W, Y + D);
|
|
Inc(Y, S);
|
|
end;
|
|
Rgn := ComplexRegion.CreateRegion;
|
|
finally
|
|
ComplexRegion.Free;
|
|
end;
|
|
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
|
|
// Uneven blind from left
|
|
procedure UnevenBlindsFromLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
S, D: Integer;
|
|
ComplexRegion: TComplexRegion;
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
if X = 0 then Exit;
|
|
S := X;
|
|
D := MulDiv(S, Progress, 100);
|
|
ComplexRegion := TComplexRegion.Create;
|
|
try
|
|
X := 0;
|
|
while X < W do
|
|
begin
|
|
ComplexRegion.AddRect(X, 0, X + D, H);
|
|
Inc(X, S);
|
|
end;
|
|
Rgn := ComplexRegion.CreateRegion;
|
|
finally
|
|
ComplexRegion.Free;
|
|
end;
|
|
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Uneven blind from right
|
|
procedure UnevenBlindsFromRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
S, D: Integer;
|
|
ComplexRegion: TComplexRegion;
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
if X = 0 then Exit;
|
|
S := X;
|
|
D := MulDiv(S, Progress, 100);
|
|
ComplexRegion := TComplexRegion.Create;
|
|
try
|
|
X := W;
|
|
while X > 0 do
|
|
begin
|
|
ComplexRegion.AddRect(X - D, 0, X, H);
|
|
Dec(X, S);
|
|
end;
|
|
Rgn := ComplexRegion.CreateRegion;
|
|
finally
|
|
ComplexRegion.Free;
|
|
end;
|
|
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Uneven blind from top
|
|
procedure UnevenBlindsFromTopEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
S, D: Integer;
|
|
ComplexRegion: TComplexRegion;
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
if Y = 0 then Exit;
|
|
S := Y;
|
|
D := MulDiv(S, Progress, 100);
|
|
ComplexRegion := TComplexRegion.Create;
|
|
try
|
|
Y := 0;
|
|
while Y < H do
|
|
begin
|
|
ComplexRegion.AddRect(0, Y, W, Y + D);
|
|
Inc(Y, S);
|
|
end;
|
|
Rgn := ComplexRegion.CreateRegion;
|
|
finally
|
|
ComplexRegion.Free;
|
|
end;
|
|
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Uneven blind from bottom
|
|
procedure UnevenBlindsFromBottomEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
S, D: Integer;
|
|
ComplexRegion: TComplexRegion;
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
if Y = 0 then Exit;
|
|
S := Y;
|
|
D := MulDiv(S, Progress, 100);
|
|
ComplexRegion := TComplexRegion.Create;
|
|
try
|
|
Y := H;
|
|
while Y > 0 do
|
|
begin
|
|
ComplexRegion.AddRect(0, Y - D, W, Y);
|
|
Dec(Y, S);
|
|
end;
|
|
Rgn := ComplexRegion.CreateRegion;
|
|
finally
|
|
ComplexRegion.Free;
|
|
end;
|
|
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
|
|
|
|
// Rectangular shred
|
|
procedure ExpandingRectanglesEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
S, D: Integer;
|
|
ComplexRegion: TComplexRegion;
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
S := (Min(W, H) div 10) + 1;
|
|
D := MulDiv(S, Progress, 100);
|
|
ComplexRegion := TComplexRegion.Create;
|
|
try
|
|
X := 0;
|
|
while X < W do
|
|
begin
|
|
Inc(X, S);
|
|
Y := 0;
|
|
while Y < H do
|
|
begin
|
|
Inc(Y, S);
|
|
ComplexRegion.AddRect(X - D, Y - D, X + D, Y + D);
|
|
Inc(Y, S);
|
|
end;
|
|
Inc(X, S);
|
|
end;
|
|
Rgn := ComplexRegion.CreateRegion;
|
|
finally
|
|
ComplexRegion.Free;
|
|
end;
|
|
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
|
|
// iDirection is -1 or 1
|
|
// bHalfScreen: Turns from the circle and does a full loop
|
|
// bAlternativing: If true, it is a full screen rotate, if false, it opens from a central point (bHalfScreen = True)
|
|
// bDoubleRotate: If true, rotates twice, cycling first through a black screen
|
|
// bIncludeText: Outputs a word using IEGlobalSettings().WordTransitionParams
|
|
procedure DoRotationalSweepEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer;
|
|
iDirection : Integer; bHalfScreen, bAlternating, bDoubleRotate : Boolean;
|
|
bIncludeText : Boolean = False);
|
|
const
|
|
Size_As_Percent_Of_Dim = 70; // Text is 70% of width/height
|
|
|
|
procedure _DoEffect(AScreen, AImage: TBitmap; iProgress: Integer; bReverse : Boolean = False);
|
|
var
|
|
mX, mY: Integer;
|
|
mPI: Extended;
|
|
Rgn, Rgn2, WrdRgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, iProgress, W, H, X, Y);
|
|
mX := W div 2;
|
|
mY := H div 2;
|
|
mPI := PI / 2;
|
|
if bHalfScreen then
|
|
begin
|
|
Rgn := CreateSliceRgn(mX, mY, Ceil(Hypot(mX, mY)), -mPI, (iDirection * PI * iProgress / 50) - mPI, iProgress, True);
|
|
end
|
|
else
|
|
begin
|
|
Rgn := CreateSliceRgn(mX, mY, Ceil(Hypot(mX, mY)), -mPI, (iDirection * PI * iProgress / 100) - mPI, iProgress div 2, not bReverse);
|
|
if bAlternating then
|
|
Rgn2 := CreateSliceRgn(mX, mY, Ceil(Hypot(mX, mY)), -mPI, (iDirection * PI * iProgress / 100) - mPI, iProgress div 2, False)
|
|
else
|
|
Rgn2 := CreateSliceRgn(mX, mY, Ceil(Hypot(mX, mY)), -mPI, (-1 * iDirection * PI * iProgress / 100) - mPI, iProgress div 2, not bReverse);
|
|
CombineRgn(Rgn, Rgn, Rgn2, RGN_OR);
|
|
DeleteObject(Rgn2);
|
|
end;
|
|
|
|
if bIncludeText and (Progress > 50) then
|
|
begin
|
|
WrdRgn := CreateRegionFromLetter(Rect(MulDiv(W, 50 - Size_As_Percent_Of_Dim div 2, 100),
|
|
MulDiv(H, 50 - Size_As_Percent_Of_Dim div 2, 100),
|
|
MulDiv(W, 50 + Size_As_Percent_Of_Dim div 2, 100),
|
|
MulDiv(H, 50 + Size_As_Percent_Of_Dim div 2, 100)),
|
|
Progress, 0, 100, True);
|
|
CombineRgn(Rgn, Rgn, WrdRgn, RGN_OR);
|
|
DeleteObject(WrdRgn) ;
|
|
end;
|
|
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, AImage);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
var
|
|
ABlack: TBitmap;
|
|
bReverse : Boolean;
|
|
WrdRgn : HRGN;
|
|
begin
|
|
if bDoubleRotate = False then
|
|
begin
|
|
_DoEffect(Screen, Image, Progress);
|
|
end
|
|
else
|
|
begin
|
|
ABlack := TBitmap.create;
|
|
try
|
|
ABlack.Width := Screen.Width;
|
|
ABlack.Height := Screen.Height;
|
|
ABlack.Canvas.Brush.Color := clBlack;
|
|
ABlack.Canvas.FillRect(Rect(0, 0, ABlack.Width, ABlack.Height));
|
|
if Progress < 50 then
|
|
begin
|
|
if bIncludeText then
|
|
begin
|
|
WrdRgn := CreateRegionFromLetter(Rect(MulDiv(ABlack.Width, 50 - Size_As_Percent_Of_Dim div 2, 100),
|
|
MulDiv(ABlack.Height, 50 - Size_As_Percent_Of_Dim div 2, 100),
|
|
MulDiv(ABlack.Width, 50 + Size_As_Percent_Of_Dim div 2, 100),
|
|
MulDiv(ABlack.Height, 50 + Size_As_Percent_Of_Dim div 2, 100)),
|
|
Progress, 0, 100, True);
|
|
OutputRgnToCanvas(ABlack.Canvas, ABlack.Width, ABlack.Height, WrdRgn, Image);
|
|
DeleteObject(WrdRgn) ;
|
|
end;
|
|
|
|
_DoEffect(Screen, ABlack, Progress * 2)
|
|
end
|
|
else
|
|
begin
|
|
DestCanvas.Brush.Color := clBlack;
|
|
DestCanvas.FillRect(Rect(0, 0, Screen.Width, Screen.Height));
|
|
|
|
bReverse := (bHalfScreen or bAlternating) = False;
|
|
_DoEffect(ABlack, Image, Progress * 2 - 100, bReverse);
|
|
end;
|
|
finally
|
|
ABlack.Free;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
// Half Sweep clockwise
|
|
procedure HalfSweepClockwise(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
bDoubleRotate: Boolean;
|
|
begin
|
|
bDoubleRotate := IEGlobalSettings().TransitionsDrawAlternative;
|
|
DoRotationalSweepEffect(DestCanvas, Screen, Image, ARect, Progress, 1, True, False, bDoubleRotate);
|
|
end;
|
|
|
|
// Half Sweep anticlockwise
|
|
procedure HalfSweepAntiClockwise(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
bDoubleRotate: Boolean;
|
|
begin
|
|
bDoubleRotate := IEGlobalSettings().TransitionsDrawAlternative;
|
|
DoRotationalSweepEffect(DestCanvas, Screen, Image, ARect, Progress, -1, True, False, bDoubleRotate);
|
|
end;
|
|
|
|
// Full Clockwise Sweep
|
|
procedure FullSweepClockwise(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
bDoubleRotate: Boolean;
|
|
begin
|
|
bDoubleRotate := IEGlobalSettings().TransitionsDrawAlternative;
|
|
DoRotationalSweepEffect(DestCanvas, Screen, Image, ARect, Progress, 1, False, True, bDoubleRotate);
|
|
end;
|
|
|
|
// Full Expanding Sweep clockwise
|
|
procedure FullExpandingSweepClockwise(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
bDoubleRotate: Boolean;
|
|
begin
|
|
bDoubleRotate := IEGlobalSettings().TransitionsDrawAlternative;
|
|
DoRotationalSweepEffect(DestCanvas, Screen, Image, ARect, Progress, 1, False, False, bDoubleRotate);
|
|
end;
|
|
|
|
// Half Sweep clockwise with Word
|
|
procedure WordHalfSweep(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
iDirection : Integer;
|
|
begin
|
|
iDirection := 1;
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
iDirection := -1;
|
|
DoRotationalSweepEffect(DestCanvas, Screen, Image, ARect, Progress, iDirection, True, False, True, True);
|
|
end;
|
|
|
|
// Full Clockwise Sweep with Word
|
|
procedure WordFullSweep(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
iDirection : Integer;
|
|
begin
|
|
iDirection := 1;
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
iDirection := -1;
|
|
DoRotationalSweepEffect(DestCanvas, Screen, Image, ARect, Progress, iDirection, False, True, True, True);
|
|
end;
|
|
|
|
// Full Expanding Sweep with Word
|
|
procedure WordFullExpandingSweep(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
DoRotationalSweepEffect(DestCanvas, Screen, Image, ARect, Progress, 1, False, False, True, True);
|
|
end;
|
|
|
|
|
|
|
|
procedure DoWideBarsEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer; bHorz, bReverse : Boolean);
|
|
const
|
|
Bar_Count = 12; // Maximum of 30
|
|
var
|
|
ComplexRegion: TComplexRegion;
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
iBarSize, iMaxBarLength: Integer;
|
|
iProgressBlock: Integer;
|
|
I: Integer;
|
|
iBarIndex: Integer;
|
|
iBarLength: Integer;
|
|
iBarCount: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
|
|
iBarCount := Bar_Count;
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
iBarCount := Bar_Count div 2;
|
|
|
|
if bHorz then
|
|
begin
|
|
iBarSize := H div iBarCount + 1;
|
|
iMaxBarLength := W;
|
|
end
|
|
else
|
|
begin
|
|
iBarSize := W div iBarCount + 1;
|
|
iMaxBarLength := H;
|
|
end;
|
|
iProgressBlock := 100 div iBarCount;
|
|
if iBarSize = 0 then
|
|
exit;
|
|
|
|
if fTransitionInitialized = False then
|
|
begin
|
|
InitializeRandomList(iBarCount - 1);
|
|
fTransitionInitialized := True;
|
|
end;
|
|
|
|
ComplexRegion := TComplexRegion.Create;
|
|
try
|
|
for I := 0 to iBarCount - 1 do
|
|
begin
|
|
iBarIndex := GetRandomListIndex(I);
|
|
|
|
iBarLength := 0;
|
|
if Progress > (I + 1) * iProgressBlock then
|
|
iBarLength := iMaxBarLength
|
|
else
|
|
if Progress > I * iProgressBlock then
|
|
iBarLength := MulDiv(iMaxBarLength, Progress - I * iProgressBlock, iProgressBlock);
|
|
|
|
if iBarLength > 0 then
|
|
begin
|
|
if bHorz then
|
|
begin
|
|
if bReverse then
|
|
// RIGHT TO LEFT
|
|
ComplexRegion.AddRect(W - iBarLength, iBarIndex * iBarSize, W, (iBarIndex + 1) * iBarSize)
|
|
else
|
|
// LEFT TO RIGHT
|
|
ComplexRegion.AddRect(0, iBarIndex * iBarSize, iBarLength, (iBarIndex + 1) * iBarSize);
|
|
end
|
|
else
|
|
// VERTICAL
|
|
begin
|
|
if bReverse then
|
|
// BOTTOM TO TOP
|
|
ComplexRegion.AddRect(iBarIndex * iBarSize, H - iBarLength, (iBarIndex + 1) * iBarSize, H)
|
|
else
|
|
// TOP TO BOTTOM
|
|
ComplexRegion.AddRect(iBarIndex * iBarSize, 0, (iBarIndex + 1) * iBarSize, iBarLength);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
Rgn := ComplexRegion.CreateRegion;
|
|
finally
|
|
ComplexRegion.Free;
|
|
end;
|
|
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
|
|
// Random Bars from the Left
|
|
procedure WideBarsFromLeft(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
DoWideBarsEffect(DestCanvas, Screen, Image, ARect, Progress, True, False);
|
|
end;
|
|
|
|
// Random Bars from the Right
|
|
procedure WideBarsFromRight(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
DoWideBarsEffect(DestCanvas, Screen, Image, ARect, Progress, True, True);
|
|
end;
|
|
|
|
// Random Bars from the Top
|
|
procedure WideBarsFromTop(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
DoWideBarsEffect(DestCanvas, Screen, Image, ARect, Progress, False, False);
|
|
end;
|
|
|
|
// Random Bars from the Bottom
|
|
procedure WideBarsFromBottom(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
DoWideBarsEffect(DestCanvas, Screen, Image, ARect, Progress, False, True);
|
|
end;
|
|
|
|
|
|
procedure DoRotateEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer;
|
|
var Points: array of TPoint; xOrg, yOrg: Integer; PtCount : Integer;
|
|
bClockwise: Boolean);
|
|
var
|
|
Angle: Extended;
|
|
Rgn: HRGN;
|
|
W, H : Integer;
|
|
begin
|
|
W := ARect.Right - ARect.Left;
|
|
H := ARect.Bottom - ARect.Top;
|
|
Angle := PI * Progress / 50;
|
|
if bClockwise = False then
|
|
Angle := -Angle;
|
|
RotatePoints(Points, xOrg, yOrg, Angle);
|
|
Rgn := CreatePolygonRgn(Points, PtCount, WINDING);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
|
|
|
|
procedure RotationalRectangleEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer;
|
|
bClockwise: Boolean);
|
|
var
|
|
mW, mH, mX, mY: Integer;
|
|
Pts: array[1..4] of TPoint;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
mW := W div 2;
|
|
mH := H div 2;
|
|
mX := X div 2;
|
|
mY := Y div 2;
|
|
Pts[1].X := mW - mX;
|
|
Pts[1].Y := mH - mY;
|
|
Pts[2].X := mW + mX;
|
|
Pts[2].Y := mH - mY;
|
|
Pts[3].X := mW + mX;
|
|
Pts[3].Y := mH + mY;
|
|
Pts[4].X := mW - mX;
|
|
Pts[4].Y := mH + mY;
|
|
|
|
DoRotateEffect(DestCanvas, Screen, Image, ARect, Progress, Pts, mW, mH, 4, bClockwise);
|
|
end;
|
|
|
|
|
|
// Rotational star in center
|
|
procedure RotationalStarEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer; bClockwise: Boolean);
|
|
var
|
|
mW, mH, mX, mY, dX, dY: Integer;
|
|
Pts: array[1..8] of TPoint;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
mW := W div 2;
|
|
mH := H div 2;
|
|
mX := X div 2;
|
|
mY := Y div 2;
|
|
dX := 2 * X;
|
|
dY := 2 * Y;
|
|
Pts[1].X := mW - dX;
|
|
Pts[1].Y := mH;
|
|
Pts[2].X := mW - mX;
|
|
Pts[2].Y := mH - mY;
|
|
Pts[3].X := mW;
|
|
Pts[3].Y := mH - dY;
|
|
Pts[4].X := mW + mX;
|
|
Pts[4].Y := mH - mY;
|
|
Pts[5].X := mW + dX;
|
|
Pts[5].Y := mH;
|
|
Pts[6].X := mW + mX;
|
|
Pts[6].Y := mH + mY;
|
|
Pts[7].X := mW;
|
|
Pts[7].Y := mH + dY;
|
|
Pts[8].X := mW - mX;
|
|
Pts[8].Y := mH + mY;
|
|
|
|
DoRotateEffect(DestCanvas, Screen, Image, ARect, Progress, Pts, mW, mH, 8, bClockwise);
|
|
end;
|
|
|
|
|
|
// Spiral rectangle
|
|
procedure SpirallingRectangleEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer; bClockwise: Boolean);
|
|
var
|
|
mW, mH, mX, mY: Integer;
|
|
Pts: array[1..4] of TPoint;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
mW := W div 2;
|
|
mH := H div 2;
|
|
mX := X div 2;
|
|
mY := Y div 2;
|
|
Pts[1].X := mW - mX;
|
|
Pts[1].Y := mH - mY;
|
|
Pts[2].X := mW + mX;
|
|
Pts[2].Y := mH - mY;
|
|
Pts[3].X := mW + mX;
|
|
Pts[3].Y := mH + mY;
|
|
Pts[4].X := mW - mX;
|
|
Pts[4].Y := mH + mY;
|
|
|
|
DoRotateEffect(DestCanvas, Screen, Image, ARect, Progress, Pts, X, Y, 4, bClockwise);
|
|
end;
|
|
|
|
|
|
|
|
// Rotational Triangular Wipe
|
|
procedure RotationalTriangularWipeEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
mW, mH: Integer;
|
|
Pts: array[1..3] of TPoint;
|
|
W, H, X, Y: Integer;
|
|
iSize: Integer;
|
|
bClockwise: Boolean;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
iSize := imax(X, Y) div 2;
|
|
mW := W div 2;
|
|
mH := H div 2;
|
|
|
|
Pts[1].X := mW;
|
|
Pts[1].Y := mH - iSize;
|
|
Pts[2].X := mW + iSize;
|
|
Pts[2].Y := mH + iSize;
|
|
Pts[3].X := mW - iSize;
|
|
Pts[3].Y := mH + iSize;
|
|
|
|
bClockwise := not IEGlobalSettings().TransitionsDrawAlternative;
|
|
DoRotateEffect(DestCanvas, Screen, Image, ARect, Progress, Pts, mW, mH, 3, bClockwise);
|
|
end;
|
|
|
|
procedure DoExpandShapeEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer;
|
|
AShape: TIEShape; rSize: Single; Angle: Integer = 0);
|
|
var
|
|
S, D: Integer;
|
|
Rgn, TmpRgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
S := (Min(W, H) div 10) + 1;
|
|
D := MulDiv(Round(rSize * S), Progress, 200);
|
|
Rgn := 0;
|
|
X := 0;
|
|
while X < W do
|
|
begin
|
|
Inc(X, S);
|
|
Y := 0;
|
|
while Y < H do
|
|
begin
|
|
Inc(Y, S);
|
|
if AShape = iesTransLetter then
|
|
TmpRgn := CreateRegionFromLetter(Rect(X - D, Y - D, X + D, Y + D), Progress, 0, 50)
|
|
else
|
|
if AShape = iesTransCircularShape then
|
|
TmpRgn := CreateEllipticRgn(X - D, Y - D, X + D, Y + D)
|
|
else
|
|
TmpRgn := IECreateShapeRegion(AShape, Rect(X - D, Y - D, X + D, Y + D), iebDefault, Angle);
|
|
if Rgn <> 0 then
|
|
begin
|
|
CombineRgn(Rgn, Rgn, TmpRgn, RGN_OR);
|
|
DeleteObject(TmpRgn);
|
|
end
|
|
else
|
|
Rgn := TmpRgn;
|
|
Inc(Y, S);
|
|
end;
|
|
Inc(X, S);
|
|
end;
|
|
|
|
if Rgn <> 0 then
|
|
try
|
|
if (AShape = iesTransLetter) or (AShape = iesDoubleHeart) then
|
|
BitBlt(DestCanvas.Handle, 0, 0, W, H, Screen.Canvas.Handle, 0, 0, SRCCOPY);
|
|
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
finally
|
|
DeleteObject(Rgn);
|
|
end;
|
|
end;
|
|
|
|
// Expanding Circles
|
|
procedure ExpandingCirclesEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
DoExpandShapeEffect(DestCanvas, Screen, Image, ARect, Progress, iesTransCircularShape, 3);
|
|
end;
|
|
|
|
// Expanding Hearts
|
|
procedure ExpandingHeartsEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
DoExpandShapeEffect(DestCanvas, Screen, Image, ARect, Progress, iesDoubleHeart, 3)
|
|
else
|
|
DoExpandShapeEffect(DestCanvas, Screen, Image, ARect, Progress, iesHeart, 3)
|
|
end;
|
|
|
|
// Expanding 5 Point Stars
|
|
procedure ExpandingStar5sEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
DoExpandShapeEffect(DestCanvas, Screen, Image, ARect, Progress, iesStar5, 4);
|
|
end;
|
|
|
|
// Expanding 6 Point Stars
|
|
procedure ExpandingStar6sEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Angle: Integer;
|
|
begin
|
|
Angle := 0;
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
Angle := 90;
|
|
DoExpandShapeEffect(DestCanvas, Screen, Image, ARect, Progress, IEGlobalSettings().TransitionsDrawShape, 4, Angle);
|
|
end;
|
|
|
|
// Expanding Letters of Word
|
|
procedure ExpandingWordEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
rSize: Single;
|
|
begin
|
|
rSize := 6;
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
rSize := 12;
|
|
|
|
DoExpandShapeEffect(DestCanvas, Screen, Image, ARect, Progress, iesTransLetter, rSize);
|
|
end;
|
|
|
|
// Expanding Explosions
|
|
procedure ExpandingExplosionsEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Angle: Integer;
|
|
begin
|
|
Angle := 0;
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
Angle := 180;
|
|
DoExpandShapeEffect(DestCanvas, Screen, Image, ARect, Progress, iesExplosion, 4, Angle );
|
|
end;
|
|
|
|
// Expanding Lightning Bolts
|
|
procedure ExpandingLightningBoltsEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
AShape: TIEShape;
|
|
begin
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
AShape := iesLightningRight
|
|
else
|
|
AShape := iesLightningLeft;
|
|
DoExpandShapeEffect(DestCanvas, Screen, Image, ARect, Progress, AShape, 6);
|
|
end;
|
|
|
|
|
|
// Reveal V from left
|
|
procedure ArrowWipeFromLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
mH: Integer;
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
mH := H div 2;
|
|
Rgn := CreatePolygonRgnEx([0, mH - Y, 2 * X, mH, 0, mH + Y]);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Reveal V from right
|
|
procedure ArrowWipeFromRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
mH: Integer;
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
mH := H div 2;
|
|
Rgn := CreatePolygonRgnEx([W, mH - Y, W - 2 * X, mH, W, mH + Y]);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Reveal V from top
|
|
procedure ArrowWipeFromTopEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
mW: Integer;
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
mW := W div 2;
|
|
Rgn := CreatePolygonRgnEx([mW - X, 0, mW, 2 * Y, mW + X, 0]);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Reveal V from bottom
|
|
procedure ArrowWipeFromBottomEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
mW: Integer;
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
mW := W div 2;
|
|
Rgn := CreatePolygonRgnEx([mW - X, H, mW, H - 2 * Y, mW + X, H]);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Bow Tie Horizontal
|
|
procedure HorizontalBowTieWipeEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
mH: Integer;
|
|
Rgn, TmpRgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
mH := H div 2;
|
|
Rgn := CreatePolygonRgnEx([0, mH - Y, X, mH, 0, mH + Y]);
|
|
TmpRgn := CreatePolygonRgnEx([W, mH - Y, W - X, mH, W, mH + Y]);
|
|
CombineRgn(Rgn, Rgn, TmpRgn, RGN_OR);
|
|
DeleteObject(TmpRgn);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Bow Tie Vertical
|
|
procedure VerticalBowTieWipeEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
mW: Integer;
|
|
Rgn, TmpRgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
mW := W div 2;
|
|
Rgn := CreatePolygonRgnEx([mW - X, 0, mW, 2 * Y, mW + X, 0]);
|
|
TmpRgn := CreatePolygonRgnEx([mW - X, H, mW, H - 2 * Y, mW + X, H]);
|
|
CombineRgn(Rgn, Rgn, TmpRgn, RGN_OR);
|
|
DeleteObject(TmpRgn);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Diagonal Cross In
|
|
procedure DiagonalCrossToCenterEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
mW, mH, mX, mY: Integer;
|
|
Rgn, TmpRgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
mW := W div 2;
|
|
mH := H div 2;
|
|
mX := X div 2;
|
|
mY := Y div 2;
|
|
Rgn := CreatePolygonRgnEx([0, mH - mY, mX, mH, 0, mH + mY]);
|
|
TmpRgn := CreatePolygonRgnEx([W, mH - mY, W - mX, mH, W, mH + mY]);
|
|
CombineRgn(Rgn, Rgn, TmpRgn, RGN_OR);
|
|
DeleteObject(TmpRgn);
|
|
TmpRgn := CreatePolygonRgnEx([mW - mX, 0, mW, mY, mW + mX, 0]);
|
|
CombineRgn(Rgn, Rgn, TmpRgn, RGN_OR);
|
|
DeleteObject(TmpRgn);
|
|
TmpRgn := CreatePolygonRgnEx([mW - mX, H, mW, H - mY, mW + mX, H]);
|
|
CombineRgn(Rgn, Rgn, TmpRgn, RGN_OR);
|
|
DeleteObject(TmpRgn);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Diagonal Cross Out
|
|
procedure DiagonalCrossFromCenterEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
mW, mH, mX, mY: Integer;
|
|
Rgn, TmpRgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
X := W - X;
|
|
Y := H - Y;
|
|
mW := W div 2;
|
|
mH := H div 2;
|
|
mX := X div 2;
|
|
mY := Y div 2;
|
|
Rgn := CreateRectRgn(0, 0, W, H);
|
|
TmpRgn := CreatePolygonRgnEx([0, mH - mY, mX, mH, 0, mH + mY]);
|
|
CombineRgn(Rgn, Rgn, TmpRgn, RGN_XOR);
|
|
DeleteObject(TmpRgn);
|
|
TmpRgn := CreatePolygonRgnEx([W, mH - mY, W - mX, mH, W, mH + mY]);
|
|
CombineRgn(Rgn, Rgn, TmpRgn, RGN_XOR);
|
|
DeleteObject(TmpRgn);
|
|
TmpRgn := CreatePolygonRgnEx([mW - mX, 0, mW, mY, mW + mX, 0]);
|
|
CombineRgn(Rgn, Rgn, TmpRgn, RGN_XOR);
|
|
DeleteObject(TmpRgn);
|
|
TmpRgn := CreatePolygonRgnEx([mW - mX, H, mW, H - mY, mW + mX, H]);
|
|
CombineRgn(Rgn, Rgn, TmpRgn, RGN_XOR);
|
|
DeleteObject(TmpRgn);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
procedure DoHorzZigzagEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer; bReverse : Boolean);
|
|
var
|
|
mH, mY, sH, sW: Integer;
|
|
YY: array[1..4] of Integer;
|
|
U, D, I, J: Integer;
|
|
Pts: array[1..24] of TPoint;
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
iProgress: Integer;
|
|
begin
|
|
iProgress := Progress;
|
|
if bReverse then
|
|
iProgress := 100 - Progress;
|
|
CalcParams(ARect, iProgress, W, H, X, Y);
|
|
|
|
sH := H div 10;
|
|
sW := W div 10;
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
begin
|
|
sH := sH * 2;
|
|
sW := sW * 2;
|
|
end;
|
|
|
|
mH := H div 2;
|
|
mY := Y div 2 + MulDiv(sH, iProgress, 100);
|
|
YY[1] := mH + sH - mY;
|
|
YY[2] := mH - sH - mY;
|
|
YY[3] := mH + sH + mY;
|
|
YY[4] := mH - sH + mY;
|
|
X := 0;
|
|
U := Low(Pts);
|
|
D := High(Pts);
|
|
for I := 1 to 6 do
|
|
begin
|
|
for J := 1 to 2 do
|
|
begin
|
|
Pts[U].X := X;
|
|
Pts[U].Y := YY[J];
|
|
Inc(U);
|
|
Pts[D].X := X;
|
|
Pts[D].Y := YY[J + 2];
|
|
Dec(D);
|
|
Inc(X, sW);
|
|
end;
|
|
end;
|
|
|
|
Rgn := CreatePolygonRgn(Pts, 24, WINDING);
|
|
try
|
|
with DestCanvas do
|
|
begin
|
|
if bReverse then
|
|
BitBlt(Handle, 0, 0, W, H, Image.Canvas.Handle, 0, 0, SRCCOPY);
|
|
|
|
SelectClipRgn(Handle, Rgn);
|
|
if bReverse then
|
|
BitBlt(Handle, 0, 0, W, H, Screen.Canvas.Handle, 0, 0, SRCCOPY)
|
|
else
|
|
BitBlt(Handle, 0, 0, W, H, Image.Canvas.Handle, 0, 0, SRCCOPY);
|
|
SelectClipRgn(Handle, 0);
|
|
end;
|
|
finally
|
|
DeleteObject(Rgn);
|
|
end;
|
|
end;
|
|
|
|
// Zigzag Wipe from Horizon
|
|
procedure ZigzagWipeFromHorizonEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
DoHorzZigzagEffect(DestCanvas, Screen, Image, ARect, Progress, False);
|
|
end;
|
|
|
|
// Zigzag Wipe To Horizon
|
|
procedure ZigzagWipeToHorizonEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
DoHorzZigzagEffect(DestCanvas, Screen, Image, ARect, Progress, True);
|
|
end;
|
|
|
|
procedure DoVerticalZigzagEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer; bReverse : Boolean);
|
|
var
|
|
mW, mX, sH, sW: Integer;
|
|
XX: array[1..4] of Integer;
|
|
L, R, I, J: Integer;
|
|
Pts: array[1..24] of TPoint;
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
iProgress: Integer;
|
|
begin
|
|
iProgress := Progress;
|
|
if bReverse then
|
|
iProgress := 100 - Progress;
|
|
CalcParams(ARect, iProgress, W, H, X, Y);
|
|
|
|
sH := H div 10;
|
|
sW := W div 10;
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
begin
|
|
sH := sH * 2;
|
|
sW := sW * 2;
|
|
end;
|
|
|
|
mW := W div 2;
|
|
mX := X div 2 + MulDiv(sW, iProgress, 100);
|
|
|
|
// LHS
|
|
XX[1] := mW + sW - mX;
|
|
XX[2] := mW - sW - mX;
|
|
|
|
// RHS
|
|
XX[3] := mW + sW + mX;
|
|
XX[4] := mW - sW + mX;
|
|
|
|
Y := 0;
|
|
L := Low(Pts);
|
|
R := High(Pts);
|
|
for I := 1 to 6 do
|
|
begin
|
|
for J := 1 to 2 do
|
|
begin
|
|
// LHS
|
|
Pts[L].X := XX[J];
|
|
Pts[L].Y := Y;
|
|
Inc(L);
|
|
|
|
// RHS
|
|
Pts[R].X := XX[J + 2];
|
|
Pts[R].Y := Y;
|
|
Dec(R);
|
|
|
|
Inc(Y, sH);
|
|
end;
|
|
end;
|
|
|
|
Rgn := CreatePolygonRgn(Pts, 24, WINDING);
|
|
try
|
|
with DestCanvas do
|
|
begin
|
|
if bReverse then
|
|
BitBlt(Handle, 0, 0, W, H, Image.Canvas.Handle, 0, 0, SRCCOPY);
|
|
|
|
SelectClipRgn(Handle, Rgn);
|
|
if bReverse then
|
|
BitBlt(Handle, 0, 0, W, H, Screen.Canvas.Handle, 0, 0, SRCCOPY)
|
|
else
|
|
BitBlt(Handle, 0, 0, W, H, Image.Canvas.Handle, 0, 0, SRCCOPY);
|
|
SelectClipRgn(Handle, 0);
|
|
end;
|
|
finally
|
|
DeleteObject(Rgn);
|
|
end;
|
|
end;
|
|
|
|
// Zigzag Wipe from Vertical Center
|
|
procedure ZigzagWipeFromVerticalCenterEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
DoVerticalZigzagEffect(DestCanvas, Screen, Image, ARect, Progress, False);
|
|
end;
|
|
|
|
// Zigzag Wipe To Vertical Center
|
|
procedure ZigzagWipeToVerticalCenter(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
DoVerticalZigzagEffect(DestCanvas, Screen, Image, ARect, Progress, True);
|
|
end;
|
|
|
|
|
|
// Diamond shred
|
|
procedure ExpandingDiamondsEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
S, D: Integer;
|
|
Rgn, TmpRgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
S := (Min(W, H) div 10) + 1;
|
|
D := MulDiv(S, Progress, 50);
|
|
Rgn := 0;
|
|
X := 0;
|
|
while X < W do
|
|
begin
|
|
Inc(X, S);
|
|
Y := 0;
|
|
while Y < H do
|
|
begin
|
|
Inc(Y, S);
|
|
TmpRgn := CreatePolygonRgnEx([X - D, Y, X, Y - D, X + D, Y, X, Y + D]);
|
|
if Rgn <> 0 then
|
|
begin
|
|
CombineRgn(Rgn, Rgn, TmpRgn, RGN_OR);
|
|
DeleteObject(TmpRgn);
|
|
end
|
|
else
|
|
Rgn := TmpRgn;
|
|
Inc(Y, S);
|
|
end;
|
|
Inc(X, S);
|
|
end;
|
|
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Reveal diamond out from centre
|
|
procedure DiamondWipeFromCenterEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
mW, mH: Integer;
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
mW := W div 2;
|
|
mH := H div 2;
|
|
Rgn := CreatePolygonRgnEx([mW - X, mH, mW, mH - Y, mW + X, mH, mW, mH + Y]);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Reveal diamond in to centre
|
|
procedure DiamondWipeToCenterEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
mW, mH: Integer;
|
|
Rgn, TmpRgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
mW := W div 2;
|
|
mH := H div 2;
|
|
Rgn := CreateRectRgn(0, 0, W, H);
|
|
TmpRgn := CreatePolygonRgnEx([X - mW, mH, mW, Y - mH, 3 * mW - X, mH, mW, 3 * mH - Y]);
|
|
CombineRgn(Rgn, Rgn, TmpRgn, RGN_XOR);
|
|
DeleteObject(TmpRgn);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
|
|
|
|
procedure DoShapeWipeInAndOutEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer;
|
|
AShape: TIEShape; rScale: single = 1; Angle: Integer = 0);
|
|
var
|
|
mW, mH, mX, mY: Integer;
|
|
Rgn, TmpRgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
mW := W div 2;
|
|
mH := H div 2;
|
|
mX := X div 2;
|
|
mY := Y div 2;
|
|
|
|
if AShape = iesTransLetter then
|
|
begin
|
|
Rgn := CreateRegionFromLetter(Rect(-1 * Round(rScale * mX), -1 * Round(rScale * mY), 2 * mW + Round(rScale * mX), 2 * mH + Round(rScale * mY)), Progress, 0, 50);
|
|
TmpRgn := CreateRegionFromLetter(Rect(mx, mY, 2 * mW - mX, 2 * mH - mY), Progress, 10, 80);
|
|
end
|
|
else
|
|
if AShape = iesTransDiamondShape then
|
|
begin
|
|
Rgn := CreatePolygonRgnEx([-mX, mH, mW, -mY, 2 * mW + mX, mH, mW, 2 * mH + mY]);
|
|
TmpRgn := CreatePolygonRgnEx([mX, mH, mW, mY, 2 * mW - mX, mH, mW, 2 * mH - mY]);
|
|
end
|
|
else
|
|
begin
|
|
Rgn := IECreateShapeRegion(AShape, Rect(-1 * Round(rScale * mX), -1 * Round(rScale * mY), 2 * mW + Round(rScale * mX), 2 * mH + Round(rScale * mY)), iebDefault, Angle);
|
|
TmpRgn := IECreateShapeRegion(AShape, Rect(mx, mY, 2 * mW - mX, 2 * mH - mY), iebDefault, Angle);
|
|
end;
|
|
CombineRgn(Rgn, Rgn, TmpRgn, RGN_XOR);
|
|
DeleteObject(TmpRgn);
|
|
|
|
try
|
|
if (AShape = iesTransLetter) or (AShape = iesDoubleHeart) then
|
|
BitBlt(DestCanvas.Handle, 0, 0, W, H, Screen.Canvas.Handle, 0, 0, SRCCOPY);
|
|
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
finally
|
|
DeleteObject(Rgn);
|
|
end;
|
|
end;
|
|
|
|
|
|
// Diamond Wipe In and Out
|
|
procedure DiagonalBoxWipeEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
DoShapeWipeInAndOutEffect(DestCanvas, Screen, Image, ARect, Progress, iesTransDiamondShape);
|
|
end;
|
|
|
|
|
|
// Heart Wipe In and Out
|
|
procedure HeartWipeInAndOutEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
DoShapeWipeInAndOutEffect(DestCanvas, Screen, Image, ARect, Progress, iesDoubleHeart, 1.6)
|
|
else
|
|
DoShapeWipeInAndOutEffect(DestCanvas, Screen, Image, ARect, Progress, iesHeart, 1.6)
|
|
end;
|
|
|
|
// 5 Point Star Wipe In and Out
|
|
procedure Star5WipeInAndOutEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
DoShapeWipeInAndOutEffect(DestCanvas, Screen, Image, ARect, Progress, iesStar5, 2.4);
|
|
end;
|
|
|
|
// 6 Point Star Wipe In and Out
|
|
procedure Star6WipeInAndOutEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Angle: Integer;
|
|
begin
|
|
Angle := 0;
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
Angle := 90;
|
|
DoShapeWipeInAndOutEffect(DestCanvas, Screen, Image, ARect, Progress, IEGlobalSettings().TransitionsDrawShape, 1.6, Angle);
|
|
end;
|
|
|
|
// Word Wipe In and Out
|
|
procedure WordWipeInAndOutEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
rSize: Single;
|
|
begin
|
|
rSize := 4.0;
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
rSize := 8.0;
|
|
|
|
DoShapeWipeInAndOutEffect(DestCanvas, Screen, Image, ARect, Progress, iesTransLetter, rSize);
|
|
end;
|
|
|
|
|
|
var
|
|
gPacmanLastUpdate : DWORD;
|
|
gPacmanState : Byte;
|
|
|
|
procedure DoPacmanEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer;
|
|
iRowCount : Integer; bSimultaneous : Boolean; bReversed : Boolean = False);
|
|
const
|
|
State_Duration = 100 {millisec};
|
|
|
|
// Pacman states
|
|
Mouth_Open = 0;
|
|
Mouth_Closing = 1;
|
|
Mouth_Closed = 2;
|
|
Mouth_Opening = 3;
|
|
var
|
|
W, H, X, Y: Integer;
|
|
iSize: Integer;
|
|
Rgn, TmpRgn: HRGN;
|
|
I: Integer;
|
|
iProgressDivs: Integer;
|
|
bDraw: Boolean;
|
|
|
|
function GetPacmanRegion(iHPos, iVOffSet : Integer; bReverse : Boolean) : HRgn;
|
|
var
|
|
iMouthPos: Integer;
|
|
Pts: array[1..3] of TPoint;
|
|
iX, iY, iPillSize, iSpacing: Integer;
|
|
begin
|
|
if bReversed then
|
|
bReverse := not bReverse;
|
|
|
|
iMouthPos := iHPos + iSize div 2;
|
|
if bReverse then
|
|
begin
|
|
iHPos := W - iHPos;
|
|
iMouthPos := iHPos - iSize div 2;
|
|
end;
|
|
|
|
// Trail
|
|
if bReverse then
|
|
Result := CreateRectRgn(iHPos, iVOffSet, W, iVOffSet + iSize)
|
|
else
|
|
Result := CreateRectRgn(0, iVOffSet, iHPos, iVOffSet + iSize);
|
|
|
|
// Pac body
|
|
TmpRgn := CreateEllipticRgn(iHPos - iSize div 2, iVOffSet, iHPos + iSize div 2, iVOffSet + iSize + 1);
|
|
CombineRgn(Result, Result, TmpRgn, RGN_OR);
|
|
DeleteObject(TmpRgn);
|
|
|
|
// Pac Mouth
|
|
Pts[1].X := iHPos;
|
|
Pts[1].Y := iVOffSet + iSize div 2;
|
|
|
|
if gPacmanState in [Mouth_Opening, Mouth_Closing] then
|
|
begin
|
|
// Mouth half open
|
|
Pts[2].X := iMouthPos;
|
|
Pts[2].Y := iVOffSet + MulDiv(iSize, 1, 4);
|
|
Pts[3].X := iMouthPos;
|
|
Pts[3].Y := iVOffSet + MulDiv(iSize, 3, 4);
|
|
end
|
|
else
|
|
if gPacmanState = Mouth_Closed then
|
|
begin
|
|
// Mouth almost closed
|
|
Pts[2].X := iMouthPos;
|
|
Pts[2].Y := iVOffSet + MulDiv(iSize, 15, 32);
|
|
Pts[3].X := iMouthPos;
|
|
Pts[3].Y := iVOffSet + MulDiv(iSize, 17, 32);
|
|
end
|
|
else // Mouth_Open
|
|
begin
|
|
// Mouth fully open
|
|
Pts[2].X := iMouthPos;
|
|
Pts[2].Y := iVOffSet - MulDiv(iSize, 1, 4);
|
|
Pts[3].X := iMouthPos;
|
|
Pts[3].Y := iVOffSet + iSize + MulDiv(iSize, 1, 4);
|
|
end;
|
|
|
|
TmpRgn := CreatePolygonRgn(Pts, 3, WINDING);
|
|
CombineRgn(Result, Result, TmpRgn, RGN_DIFF);
|
|
DeleteObject(TmpRgn);
|
|
|
|
// Previous paths
|
|
if (bSimultaneous = False) and (iVOffSet > 0) then
|
|
begin
|
|
TmpRgn := CreateRectRgn(0, 0, W, iVOffSet);
|
|
CombineRgn(Result, Result, TmpRgn, RGN_OR);
|
|
DeleteObject(TmpRgn);
|
|
end;
|
|
|
|
// Draw pills
|
|
if IEGlobalSettings().TransitionsDrawAlternative = False then
|
|
begin
|
|
iY := iVOffSet + iSize div 2;
|
|
iPillSize := iSize div 12;
|
|
iSpacing := imax(W div 10, iPillSize * 3);
|
|
iX := iSpacing div 2;
|
|
while iX < W do
|
|
begin
|
|
if bReverse then
|
|
bDraw := iX < iMouthPos
|
|
else
|
|
bDraw := iX > iMouthPos;
|
|
if bDraw then
|
|
begin
|
|
TmpRgn := CreateEllipticRgn(iX - iPillSize, iY- iPillSize, iX + iPillSize, iY + iPillsize);
|
|
CombineRgn(Result, Result, TmpRgn, RGN_OR);
|
|
DeleteObject(TmpRgn);
|
|
end;
|
|
inc(iX, iSpacing);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
iSize := H div iRowCount + 1;
|
|
|
|
if fTransitionInitialized = False then
|
|
begin
|
|
gPacmanLastUpdate := GetTickCount;
|
|
gPacmanState := Mouth_Open;
|
|
fTransitionInitialized := True;
|
|
end
|
|
else
|
|
if GetTickCount > gPacmanLastUpdate + State_Duration then
|
|
begin
|
|
inc(gPacmanState);
|
|
if gPacmanState > Mouth_Opening then
|
|
gPacmanState := Mouth_Open;
|
|
gPacmanLastUpdate := GetTickCount;
|
|
end;
|
|
|
|
Rgn := 0;
|
|
iProgressDivs := 100 div iRowCount;
|
|
for I := 0 to iRowCount - 1 do
|
|
begin
|
|
if bSimultaneous then
|
|
begin
|
|
TmpRgn := GetPacmanRegion(MulDiv(W, Progress, 100), iSize * I, I Mod 2 = 1);
|
|
if Rgn = 0 then
|
|
Rgn := TmpRgn
|
|
else
|
|
begin
|
|
CombineRgn(Rgn, Rgn, TmpRgn, RGN_OR);
|
|
DeleteObject(TmpRgn);
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
if I = iRowCount - 1 then
|
|
bDraw := Progress >= iProgressDivs * (iRowCount - 1)
|
|
else
|
|
bDraw := Progress < (I + 1) * iProgressDivs;
|
|
|
|
if bDraw then
|
|
begin
|
|
Rgn := GetPacmanRegion(MulDiv(W, Progress - I * iProgressDivs, iProgressDivs), iSize * I, I Mod 2 = 1);
|
|
Break;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
if Rgn <> 0 then
|
|
try
|
|
BitBlt(DestCanvas.Handle, 0, 0, W, H, Screen.Canvas.Handle, 0, 0, SRCCOPY);
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
finally
|
|
DeleteObject(Rgn);
|
|
end;
|
|
end;
|
|
|
|
|
|
// Pacman Devours from Left
|
|
procedure PacmanFromLeftEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
DoPacmanEffect(DestCanvas, Screen, Image, ARect, Progress, 1, False);
|
|
end;
|
|
|
|
// Pacman Devours from Right
|
|
procedure PacmanFromRightEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
DoPacmanEffect(DestCanvas, Screen, Image, ARect, Progress, 1, False, True);
|
|
end;
|
|
|
|
// Pacman Devours Three Rows
|
|
procedure Pacman3RowEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
DoPacmanEffect(DestCanvas, Screen, Image, ARect, Progress, 3, False);
|
|
end;
|
|
|
|
// Pacman Devours Four Rows
|
|
procedure Pacman4RowEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
DoPacmanEffect(DestCanvas, Screen, Image, ARect, Progress, 4, False);
|
|
end;
|
|
|
|
// Two Simultaneous Rows of Pacman
|
|
procedure Pacman2SimRowEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
DoPacmanEffect(DestCanvas, Screen, Image, ARect, Progress, 2, True);
|
|
end;
|
|
|
|
// Four Simultaneous Rows of Pacman
|
|
procedure Pacman4SimRowEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
DoPacmanEffect(DestCanvas, Screen, Image, ARect, Progress, 4, True);
|
|
end;
|
|
|
|
// Six Simultaneous Rows of Pacman
|
|
procedure Pacman6SimRowEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
DoPacmanEffect(DestCanvas, Screen, Image, ARect, Progress, 6, True);
|
|
end;
|
|
|
|
// Random Puzzle Pieces
|
|
procedure RandomPuzzlePiecesEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
const
|
|
Box_Value = 8; // = 5 boxes
|
|
var
|
|
S, SavedRandSeed: Integer;
|
|
Rgn, TmpRgn, JRgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
iJSize, iJOffset: Integer;
|
|
bTopJoiner: Boolean;
|
|
iCol, iRow: Integer;
|
|
|
|
procedure _AddJoiner(p1, p2, p3, p4, CombineMode : Integer);
|
|
begin
|
|
JRgn := CreateEllipticRgn(p1, p2, p3, p4);
|
|
CombineRgn(TmpRgn, TmpRgn, JRgn, CombineMode);
|
|
DeleteObject(JRgn);
|
|
end;
|
|
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
SavedRandSeed := RandSeed;
|
|
RandSeed := Integer(Image.Handle);
|
|
S := (Min(W, H) div Box_Value) + 1;
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
S := (Min(W, H) div Box_Value div 2) + 1;
|
|
|
|
iJSize := S div 3;
|
|
iJOffset := iJSize div 5;
|
|
Rgn := 0;
|
|
try
|
|
iCol := 0;
|
|
X := 0 - 2 * iJSize;
|
|
while X < W do
|
|
begin
|
|
Inc(X, S);
|
|
Y := 0 - 2 * iJSize;
|
|
iRow := 0;
|
|
while Y < H do
|
|
begin
|
|
Inc(Y, S);
|
|
if Random(100) < Progress then
|
|
begin
|
|
TmpRgn := CreateRectRgn(X - S, Y - S, X + S, Y + S);
|
|
|
|
bTopJoiner := iCol mod 2 = 0;
|
|
if iRow mod 2 = 0 then
|
|
bTopJoiner := not bTopJoiner;
|
|
|
|
if bTopJoiner then
|
|
begin
|
|
// Top Joiner
|
|
_AddJoiner(X - iJSize, Y - S - iJOffset, X + iJSize, Y - S - iJOffset + 2 * iJSize, RGN_DIFF); // Poke In
|
|
|
|
// Left Joiner
|
|
_AddJoiner(X - S - 2 * iJSize + iJOffset, Y - iJSize, X - S + iJOffset, Y + iJSize, RGN_OR); // Poke Out
|
|
|
|
// Bottom Joiner
|
|
_AddJoiner(X - iJSize, Y + S - 2 * iJSize + iJOffset, X + iJSize, Y + S + iJOffset, RGN_DIFF); // Poke In
|
|
|
|
// Right Joiner
|
|
_AddJoiner(X + S - iJOffset, Y - iJSize, X + S - iJOffset + 2 * iJSize, Y + iJSize, RGN_OR); // Poke Out
|
|
end
|
|
else
|
|
begin
|
|
// Top Joiner
|
|
_AddJoiner(X - iJSize, Y - S - 2 * iJSize + iJOffset, X + iJSize, Y - S + iJOffset, RGN_OR); // Poke Out
|
|
|
|
// Left Joiner
|
|
_AddJoiner(X - S - iJOffset, Y - iJSize, X - S - iJOffset + 2 * iJSize, Y + iJSize, RGN_DIFF); // Poke In
|
|
|
|
// Bottom Joiner
|
|
_AddJoiner(X - iJSize, Y + S - iJOffset, X + iJSize, Y + S - iJOffset + 2 * iJSize, RGN_OR); // Poke Out
|
|
|
|
// Right Joiner
|
|
_AddJoiner(X + S - 2 * iJSize + iJOffset, Y - iJSize, X + S + iJOffset, Y + iJSize, RGN_DIFF); // Poke In
|
|
end;
|
|
|
|
if Rgn = 0 then
|
|
Rgn := TmpRgn
|
|
else
|
|
begin
|
|
CombineRgn(Rgn, Rgn, TmpRgn, RGN_XOR);
|
|
DeleteObject(TmpRgn)
|
|
end;
|
|
end;
|
|
Inc(Y, S);
|
|
Inc(iRow);
|
|
end;
|
|
Inc(X, S);
|
|
inc(iCol);
|
|
end;
|
|
finally
|
|
RandSeed := SavedRandSeed;
|
|
end;
|
|
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
// Explosion Wipe In and Out
|
|
procedure ExplosionWipeInAndOutEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Angle: Integer;
|
|
begin
|
|
Angle := 0;
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
Angle := 180;
|
|
DoShapeWipeInAndOutEffect(DestCanvas, Screen, Image, ARect, Progress, iesExplosion, 1.1, Angle );
|
|
end;
|
|
|
|
|
|
// Random Boxes with Word
|
|
procedure RandomBoxesWithWordEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
const
|
|
Box_Value = 400; // = 201 boxes
|
|
Size_As_Percent_Of_Dim = 90; // Text is 90% of width/height
|
|
Intersection_Point_in_Progress = 60; // when change from showing word to dissolving word
|
|
var
|
|
S, SavedRandSeed: Integer;
|
|
ComplexRegion: TComplexRegion;
|
|
Rgn, TmpRgn: HRGN;
|
|
var
|
|
W, H, X, Y: Integer;
|
|
bAdd: Boolean;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
SavedRandSeed := RandSeed;
|
|
RandSeed := Integer(Image.Handle);
|
|
S := (Min(W, H) div Box_Value) + 1;
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
S := (Min(W, H) div Box_Value div 2) + 1;
|
|
|
|
ComplexRegion := TComplexRegion.Create;
|
|
try
|
|
X := 0;
|
|
while X < W do
|
|
begin
|
|
Inc(X, S);
|
|
Y := 0;
|
|
while Y < H do
|
|
begin
|
|
Inc(Y, S);
|
|
if Progress > Intersection_Point_in_Progress then
|
|
bAdd := Random(100) < MulDiv(Progress - Intersection_Point_in_Progress, 100, 100 - Intersection_Point_in_Progress)
|
|
else
|
|
bAdd := Random(100) < MulDiv(Progress, 100, Intersection_Point_in_Progress);
|
|
if bAdd then
|
|
ComplexRegion.AddRect(X - S, Y - S, X + S, Y + S);
|
|
Inc(Y, S);
|
|
end;
|
|
Inc(X, S);
|
|
end;
|
|
Rgn := ComplexRegion.CreateRegion;
|
|
finally
|
|
ComplexRegion.Free;
|
|
RandSeed := SavedRandSeed;
|
|
end;
|
|
|
|
TmpRgn := CreateRegionFromLetter(Rect(MulDiv(W, 50 - Size_As_Percent_Of_Dim div 2, 100),
|
|
MulDiv(H, 50 - Size_As_Percent_Of_Dim div 2, 100),
|
|
MulDiv(W, 50 + Size_As_Percent_Of_Dim div 2, 100),
|
|
MulDiv(H, 50 + Size_As_Percent_Of_Dim div 2, 100)),
|
|
Progress, 0, 100, True);
|
|
if Rgn = 0 then
|
|
Rgn := TmpRgn
|
|
else
|
|
begin
|
|
if Progress > Intersection_Point_in_Progress then
|
|
CombineRgn(Rgn, Rgn, TmpRgn, RGN_AND)
|
|
else
|
|
CombineRgn(Rgn, Rgn, TmpRgn, RGN_DIFF);
|
|
DeleteObject(TmpRgn)
|
|
end;
|
|
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
|
|
// Large boxes at random positions
|
|
procedure RandomBigBoxesEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
const
|
|
Box_Value = 20; // = 11 boxes
|
|
var
|
|
S, SavedRandSeed: Integer;
|
|
ComplexRegion: TComplexRegion;
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
SavedRandSeed := RandSeed;
|
|
RandSeed := Integer(Image.Handle);
|
|
S := (Min(W, H) div Box_Value) + 1;
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
S := (Min(W, H) div Box_Value div 2) + 1;
|
|
|
|
ComplexRegion := TComplexRegion.Create;
|
|
try
|
|
X := 0;
|
|
while X < W do
|
|
begin
|
|
Inc(X, S);
|
|
Y := 0;
|
|
while Y < H do
|
|
begin
|
|
Inc(Y, S);
|
|
if Random(100) < Progress then
|
|
ComplexRegion.AddRect(X - S, Y - S, X + S, Y + S);
|
|
Inc(Y, S);
|
|
end;
|
|
Inc(X, S);
|
|
end;
|
|
Rgn := ComplexRegion.CreateRegion;
|
|
finally
|
|
ComplexRegion.Free;
|
|
RandSeed := SavedRandSeed;
|
|
end;
|
|
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
DeleteObject(Rgn);
|
|
end;
|
|
|
|
|
|
procedure DoRandomShapesEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer;
|
|
AShape: TIEShape; iCount: integer; rCoverage: Single; Angle: Integer = 0);
|
|
var
|
|
iSize, SavedRandSeed: Integer;
|
|
Rgn: HRGN;
|
|
W, H, X, Y: Integer;
|
|
TmpRgn: HRGN;
|
|
iMovementIncrement: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
SavedRandSeed := RandSeed;
|
|
RandSeed := Integer(Image.Handle);
|
|
iSize := (Min(W, H) div iCount) + 1;
|
|
iMovementIncrement := Trunc(iSize * rCoverage);
|
|
Rgn := 0;
|
|
try
|
|
X := 0;
|
|
while X < W do
|
|
begin
|
|
Inc(X, iMovementIncrement);
|
|
Y := 0;
|
|
while Y < H do
|
|
begin
|
|
Inc(Y, iMovementIncrement);
|
|
|
|
if Random(100) < Progress then
|
|
begin
|
|
if AShape = iesTransLetter then
|
|
TmpRgn := CreateRegionFromLetter(Rect(X - iSize, Y - iSize, X + iSize, Y + iSize), Progress, 0, 50, False, False)
|
|
else
|
|
TmpRgn := IECreateShapeRegion(AShape, Rect(X - iSize, Y - iSize, X + iSize, Y + iSize), iebDefault, Angle );
|
|
if Rgn <> 0 then
|
|
begin
|
|
CombineRgn(Rgn, Rgn, TmpRgn, RGN_OR);
|
|
DeleteObject(TmpRgn);
|
|
end
|
|
else
|
|
Rgn := TmpRgn;
|
|
end;
|
|
|
|
Inc(Y, iMovementIncrement);
|
|
end;
|
|
Inc(X, iMovementIncrement);
|
|
end;
|
|
finally
|
|
RandSeed := SavedRandSeed;
|
|
end;
|
|
|
|
if Rgn <> 0 then
|
|
try
|
|
if (AShape = iesTransLetter) and (Length(IEGlobalSettings().WordTransitionParams.Word) > 1) then
|
|
BitBlt(DestCanvas.Handle, 0, 0, W, H, Screen.Canvas.Handle, 0, 0, SRCCOPY);
|
|
|
|
OutputRgnToCanvas(DestCanvas, W, H, Rgn, Image);
|
|
finally
|
|
DeleteObject(Rgn);
|
|
end;
|
|
end;
|
|
|
|
// Hearts at random positions
|
|
procedure RandomHeartsEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
DoRandomShapesEffect(DestCanvas, Screen, Image, ARect, Progress, iesDoubleHeart, 12, 0.2)
|
|
else
|
|
DoRandomShapesEffect(DestCanvas, Screen, Image, ARect, Progress, iesHeart, 12, 0.2);
|
|
end;
|
|
|
|
// 5 Point Stars at random positions
|
|
procedure RandomStar5sEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
begin
|
|
DoRandomShapesEffect(DestCanvas, Screen, Image, ARect, Progress, iesStar5, 14, 0.4);
|
|
end;
|
|
|
|
// 6 Point Stars at random positions
|
|
procedure RandomStar6sEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Angle: Integer;
|
|
begin
|
|
Angle := 0;
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
Angle := 90;
|
|
DoRandomShapesEffect(DestCanvas, Screen, Image, ARect, Progress, IEGlobalSettings().TransitionsDrawShape, 14, 0.4, Angle);
|
|
end;
|
|
|
|
// Words of Letter at random positions
|
|
procedure RandomWordEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
rSize: Single;
|
|
begin
|
|
rSize := 0.4;
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
rSize := 0.2;
|
|
DoRandomShapesEffect(DestCanvas, Screen, Image, ARect, Progress, iesTransLetter, 14, rSize);
|
|
end;
|
|
|
|
// Explosions at random positions
|
|
procedure RandomExplosionsEffect(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
Angle: Integer;
|
|
begin
|
|
Angle := 0;
|
|
if Progress mod 2 = 0 then
|
|
Angle := 180;
|
|
DoRandomShapesEffect(DestCanvas, Screen, Image, ARect, Progress, iesExplosion, 18, 0.5, Angle);
|
|
end;
|
|
|
|
// Twist In
|
|
procedure AngledTwistIn(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
Pts: array [0..2] of TPoint;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
|
|
{
|
|
PlgBlt requires a pointer to an array of three points that identify three corners of the destination parallelogram
|
|
Pts[0] : upper-left corner of the source rectangle
|
|
Pts[1] : upper-right corner
|
|
Pts[2] : lower-left corner
|
|
Implied : lower-right corner of the source rectangle is mapped to the implicit fourth point in the parallelogram.
|
|
}
|
|
|
|
Pts[0] := Point((w - X) div 2, (h - Y) div 2);
|
|
Pts[1] := Point(w, 0);
|
|
Pts[2] := Point(0, H);
|
|
|
|
PlgBlt(DestCanvas.Handle, Pts, Image.Canvas.Handle, 0, 0, W, H, 0, 0, 0);
|
|
end;
|
|
|
|
// Twist Out
|
|
procedure AngledTwistOut(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
Pts: array [0..2] of TPoint;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
|
|
{
|
|
PlgBlt requires a pointer to an array of three points that identify three corners of the destination parallelogram
|
|
Pts[0] : upper-left corner of the source rectangle
|
|
Pts[1] : upper-right corner
|
|
Pts[2] : lower-left corner
|
|
Implied : lower-right corner of the source rectangle is mapped to the implicit fourth point in the parallelogram.
|
|
}
|
|
|
|
BitBlt(DestCanvas.Handle, 0, 0, W, H,
|
|
Image.Canvas.Handle, 0, 0,
|
|
SRCCOPY);
|
|
|
|
Pts[0] := Point(X div 2, Y div 2);
|
|
Pts[1] := Point(w, 0);
|
|
Pts[2] := Point(0, H);
|
|
|
|
PlgBlt(DestCanvas.Handle, Pts, Screen.Canvas.Handle, 0, 0, W, H, 0, 0, 0);
|
|
end;
|
|
|
|
|
|
// Multiple Twist In
|
|
procedure MultipleAngledTwistIn(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer; Step : Integer);
|
|
const
|
|
Horz_Count = 6;
|
|
Vert_Count = 4;
|
|
var
|
|
W, H, X, Y: Integer;
|
|
Pts: array [0..2] of TPoint;
|
|
iBoxWidth, iBoxHeight: Integer;
|
|
iBoxSkewPosX, iBoxSkewPosY: Integer;
|
|
iBoxX, iBoxY: Integer;
|
|
iX, iY: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
|
|
iBoxWidth := Round(W / Horz_Count);
|
|
iBoxHeight := Round(H / Vert_Count);
|
|
iBoxSkewPosX := (iBoxWidth - MulDiv(iBoxWidth, Step, 1024)) div 2;
|
|
iBoxSkewPosY := (iBoxHeight - MulDiv(iBoxHeight, Step, 1024)) div 2;
|
|
|
|
for iY := 0 to Vert_Count - 1 do
|
|
for iX := 0 to Horz_Count - 1 do
|
|
begin
|
|
{
|
|
PlgBlt requires a pointer to an array of three points that identify three corners of the destination parallelogram
|
|
Pts[0] : upper-left corner of the source rectangle
|
|
Pts[1] : upper-right corner
|
|
Pts[2] : lower-left corner
|
|
Implied : lower-right corner of the source rectangle is mapped to the implicit fourth point in the parallelogram.
|
|
}
|
|
iBoxX := iX * iBoxWidth;
|
|
iBoxY := iY * iBoxHeight;
|
|
Pts[0] := Point(iBoxX + iBoxSkewPosX, iBoxY + iBoxSkewPosY);
|
|
Pts[1] := Point(iBoxX + iBoxWidth, iBoxY - 1);
|
|
Pts[2] := Point(iBoxX - 1, iBoxY + iBoxHeight);
|
|
PlgBlt(DestCanvas.Handle, Pts, Image.Canvas.Handle, iBoxX, iBoxY, iBoxWidth, iBoxHeight, 0, 0, 0);
|
|
end;
|
|
end;
|
|
|
|
// Multiple Twist Out
|
|
procedure MultipleAngledTwistOut(DestCanvas: TCanvas; Screen, Image: TBitmap; const ARect: TRect; Progress: Integer; Step : Integer);
|
|
const
|
|
Horz_Count = 6;
|
|
Vert_Count = 4;
|
|
var
|
|
W, H, X, Y: Integer;
|
|
Pts: array [0..2] of TPoint;
|
|
iBoxWidth, iBoxHeight: Integer;
|
|
iBoxSkewPosX, iBoxSkewPosY: Integer;
|
|
iBoxX, iBoxY: Integer;
|
|
iX, iY: Integer;
|
|
begin
|
|
CalcParams(ARect, Progress, W, H, X, Y);
|
|
|
|
iBoxWidth := Round(W / Horz_Count);
|
|
iBoxHeight := Round(H / Vert_Count);
|
|
iBoxSkewPosX := MulDiv(iBoxWidth, Step, 1024) div 2;
|
|
iBoxSkewPosY := MulDiv(iBoxHeight, Step, 1024) div 2;
|
|
|
|
BitBlt(DestCanvas.Handle, 0, 0, W, H,
|
|
Image.Canvas.Handle, 0, 0,
|
|
SRCCOPY);
|
|
|
|
for iY := 0 to Vert_Count - 1 do
|
|
for iX := 0 to Horz_Count - 1 do
|
|
begin
|
|
{
|
|
PlgBlt requires a pointer to an array of three points that identify three corners of the destination parallelogram
|
|
Pts[0] : upper-left corner of the source rectangle
|
|
Pts[1] : upper-right corner
|
|
Pts[2] : lower-left corner
|
|
Implied : lower-right corner of the source rectangle is mapped to the implicit fourth point in the parallelogram.
|
|
}
|
|
iBoxX := iX * iBoxWidth;
|
|
iBoxY := iY * iBoxHeight;
|
|
Pts[0] := Point(iBoxX + iBoxSkewPosX, iBoxY + iBoxSkewPosY);
|
|
Pts[1] := Point(iBoxX + iBoxWidth, iBoxY {- 1});
|
|
Pts[2] := Point(iBoxX {- 1}, iBoxY + iBoxHeight);
|
|
PlgBlt(DestCanvas.Handle, Pts, Screen.Canvas.Handle, iBoxX, iBoxY, iBoxWidth, iBoxHeight, 0, 0, 0);
|
|
end;
|
|
end;
|
|
|
|
|
|
// Perform one of the "Extra" transitionEffects
|
|
procedure PerformExtraTransitionEffect(Effect : TIETransitionType; ACanvas: TCanvas; ASourceBitmap, ATargetBitmap: TBitmap; const ARect: TRect; iStep: Integer);
|
|
var
|
|
iProgress: Integer;
|
|
begin
|
|
iProgress := Round(iStep / 1024 * 100);
|
|
|
|
case Effect of
|
|
iettExpandFromLeft : ExpandFromLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExpandFromRight : ExpandFromRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExpandFromTop : ExpandFromTopEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExpandFromBottom : ExpandFromBottomEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExpandFromTopLeft : ExpandFromTopLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExpandFromTopRight : ExpandFromTopRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExpandFromBottomLeft : ExpandFromBottomLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExpandFromBottomRight : ExpandFromBottomRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExpandInFromLeft : ExpandInFromLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExpandInFromRight : ExpandInFromRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExpandInFromTop : ExpandInFromTopEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExpandInFromBottom : ExpandInFromBottomEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExpandInToVerticalCenter : ExpandInToVerticalCenterEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExpandInToHorizon : ExpandInToHorizonEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExpandInFromSides : ExpandInFromSidesEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExpandInFromTopAndBottom : ExpandInFromTopAndBottomEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExpandOutFromHorizon : ExpandOutFromHorizonEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExpandOutFromVerticalCenter : ExpandOutFromVerticalCenterEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettWipeFromTopLeft : WipeFromTopLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettWipeFromTopRight : WipeFromTopRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettWipeFromBottomLeft : WipeFromBottomLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettWipeFromBottomRight : WipeFromBottomRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettWipeInFromTopAndBottom : WipeInFromTopAndBottomEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettWipeFromHorizon : WipeFromHorizonEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettWipeInFromSides : WipeInFromSidesEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettWipeOutFromVerticalCenter : WipeOutFromVerticalCenterEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettBuildUpFromLeft : BuildUpFromLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettBuildUpFromRight : BuildUpFromRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettBuildUpFromTop : BuildUpFromTopEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettBuildUpFromBottom : BuildUpFromBottomEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettUnrollFromLeft : UnrollFromLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettUnrollFromRight : UnrollFromRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettUnrollFromTop : UnrollFromTopEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettUnrollFromBottom : UnrollFromBottomEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettSlideInFromLeft : SlideInFromLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettSlideInFromRight : SlideInFromRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettSlideInFromTop : SlideInFromTopEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettSlideInFromBottom : SlideInFromBottomEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettShrinkToTopLeft : ShrinkToTopLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettShrinkToTopRight : ShrinkToTopRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettShrinkToBottomLeft : ShrinkToBottomLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettShrinkToBottomRight : ShrinkToBottomRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettShrinkToCenter : ShrinkToCenterEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettQuartersWipeInToCenter : QuartersWipeInToCenterEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettQuartersExpandToCenter : QuartersExpandToCenterEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettQuartersSlideInToCenter : QuartersSlideInToCenterEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettCurvedWipeFromLeft : CurvedWipeFromLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettCurvedWipeFromRight : CurvedWipeFromRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettCurvedWipeFromTop : CurvedWipeFromTopEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettCurvedWipeFromBottom : CurvedWipeFromBottomEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettCurvedWipeFromTopLeft : CurvedWipeFromTopLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettCurvedWipeFromTopRight : CurvedWipeFromTopRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettCurvedWipeFromBottomLeft : CurvedWipeFromBottomLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettCurvedWipeFromBottomRight : CurvedWipeFromBottomRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettBarsInFromLeft : BarsInFromLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettBarsInFromRight : BarsInFromRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettBarsFromTop : BarsFromTopEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettBarsFromBottom : BarsFromBottomEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettBarsLeftThenRight : BarsLeftThenRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettBarsRightThenLeft : BarsRightThenLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettBarsTopThenBottom : BarsTopThenBottomEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettBarsBottomThenTop : BarsBottomThenTopEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettBarsFromBothSides : BarsFromBothSidesEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettBarsFromTopAndBottom : BarsFromTopAndBottomEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettShreddedFromLeft : ShreddedFromLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettShreddedFromRight : ShreddedFromRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettShreddedFromTop : ShreddedFromTopEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettShreddedFromBottom : ShreddedFromBottomEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettShreddedFromTopAndLeft : ShreddedFromTopAndLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettShreddedFromTopAndRight : ShreddedFromTopAndRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettShreddedFromBottomAndLeft : ShreddedFromBottomAndLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettShreddedFromBottomAndRight : ShreddedFromBottomAndRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettShreddedFromHorizonAndLeft : ShreddedFromHorizonAndLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettShreddedFromHorizonAndRight : ShreddedFromHorizonAndRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettShreddedFromTopAndVerticalCenter : ShreddedFromTopAndVerticalCenterEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettShreddedFromBottomAndVerticalCenter : ShreddedFromBottomAndVerticalCenterEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettShreddedFromCenter : ShreddedFromCenterEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettShreddedToCenter : ShreddedToCenterEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettShreddedInToHorizon : ShreddedInToHorizonEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettShreddedInToVerticalCenter : ShreddedInToVerticalCenterEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettShreddedOutFromHorizon : ShreddedOutFromHorizonEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettShreddedOutFromVerticalCenter : ShreddedOutFromVerticalCenterEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettExpandingRectangles : ExpandingRectanglesEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExpandingTriangles : ExpandingTrianglesEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExpandingCircles : ExpandingCirclesEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExpandingDiamonds : ExpandingDiamondsEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettCircularWipeFromCenter : CircularWipeFromCenterEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettCircularWipeToCenter : CircularWipeToCenterEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettCrisscrossWipeFromTopLeft : CrisscrossWipeFromTopLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettCrisscrossWipeFromTopRight : CrisscrossWipeFromTopRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettCrisscrossWipeFromBottomLeft : CrisscrossWipeFromBottomLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettCrisscrossWipeFromBottomRight : CrisscrossWipeFromBottomRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettCrisscrossWipeBounceFromTopLeft : CrisscrossWipeBounceFromTopLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettCrisscrossWipeBounceFromTopRight : CrisscrossWipeBounceFromTopRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettCrisscrossWipeBounceFromBottomLeft : CrisscrossWipeBounceFromBottomLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettCrisscrossWipeBounceFromBottomRight : CrisscrossWipeBounceFromBottomRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettCrisscrossWipeFromLeftRightAndTop : CrisscrossWipeFromLeftRightAndTopEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettCrisscrossWipeFromLeftRightAndBottom : CrisscrossWipeFromLeftRightAndBottomEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettCrisscrossWipeFromLeftTopAndBottom : CrisscrossWipeFromLeftTopAndBottomEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettCrisscrossWipeFromTopLeftRightAndBottom : CrisscrossWipeFromTopLeftRightAndBottomEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettCrisscrossWipeFromRightTopAndBottom : CrisscrossWipeFromRightTopAndBottomEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettCrisscrossWipeFromBottomLeftTopRight : CrisscrossWipeFromBottomLeftTopRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettWipeDiagonalFromTopLeft : WipeDiagonalFromTopLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettWipeDiagonalFromTopRight : WipeDiagonalFromTopRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettWipeDiagonalFromBottomLeft : WipeDiagonalFromBottomLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettWipeDiagonalFromBottomRight : WipeDiagonalFromBottomRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettDiagonalSweepClockwise : DiagonalSweepClockwiseEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettDiagonalSweepCounterClockwise : DiagonalSweepCounterClockwiseEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettSweepClockwise : HalfSweepClockwise(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettSweepCounterClockwise : HalfSweepAntiClockwise(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettStarburstClockwiseFromCenter : StarburstClockwiseFromCenterEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettStarburstCounterClockwiseFromCenter : StarburstCounterClockwiseFromCenterEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettRotationalRectangle : RotationalRectangleEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress, True);
|
|
iettRotationalRectangleCounterClockwise : RotationalRectangleEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress, False);
|
|
iettRotationalStar : RotationalStarEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress, True);
|
|
iettRotationalStarCounterClockwise : RotationalStarEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress, False);
|
|
|
|
iettSpeckledWipeFromLeft : SpeckledWipeFromLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettSpeckledWipeFromRight : SpeckledWipeFromRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettSpeckledWipeFromTop : SpeckledWipeFromTopEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettSpeckledWipeFromBottom : SpeckledWipeFromBottomEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettPushLeftAndSlideOut : PushLeftAndSlideOutEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettPushRightAndSlideOut : PushRightAndSlideOutEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettPushUpAndSlideOut : PushUpAndSlideOutEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettPushDownAndSlideOut : PushDownAndSlideOutEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettPushAndSqueezeLeft : PushAndSqueezeLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettPushAndSqueezeRight : PushAndSqueezeRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettPushAndSqueezeUp : PushAndSqueezeUpEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettPushAndSqueezeDown : PushAndSqueezeDownEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettHorizontalBlinds : HorizontalBlindsEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettVerticalBlinds : VerticalBlindsEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettUnevenBlindsFromLeft : UnevenBlindsFromLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettUnevenBlindsFromRight : UnevenBlindsFromRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettUnevenBlindsFromTop : UnevenBlindsFromTopEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettUnevenBlindsFromBottom : UnevenBlindsFromBottomEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettRectanglesFromTheLeft : WideBarsFromLeft(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettRectanglesFromTheRight : WideBarsFromRight(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettRectanglesFromTheTop : WideBarsFromTop(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettRectanglesFromTheBottom : WideBarsFromBottom(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettSpirallingRectangleClockwise : SpirallingRectangleEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress, True);
|
|
iettSpirallingRectangleCounterClockwise : SpirallingRectangleEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress, False);
|
|
|
|
iettArrowWipeFromLeft : ArrowWipeFromLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettArrowWipeFromRight : ArrowWipeFromRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettArrowWipeFromTop : ArrowWipeFromTopEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettArrowWipeFromBottom : ArrowWipeFromBottomEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettHorizontalBowTieWipe : HorizontalBowTieWipeEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettVerticalBowTieWipe : VerticalBowTieWipeEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettDiagonalCrossFromCenter : DiagonalCrossFromCenterEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettDiagonalCrossToCenter : DiagonalCrossToCenterEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettZigzagWipeFromHorizon : ZigzagWipeFromHorizonEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettZigzagWipeFromVerticalCenter : ZigzagWipeFromVerticalCenterEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettDiamondWipeFromCenter : DiamondWipeFromCenterEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettDiamondWipeToCenter : DiamondWipeToCenterEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettDiagonalBoxWipe : DiagonalBoxWipeEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettTriangularWipe : RotationalTriangularWipeEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettRandomBigBoxes : RandomBigBoxesEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettZigzagWipeToHorizon : ZigzagWipeToHorizonEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettZigzagWipeToVerticalCenter : ZigzagWipeToVerticalCenter (ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettRandomHearts : RandomHeartsEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettRandomStar5s : RandomStar5sEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettRandomStar6s : RandomStar6sEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettRandomExplosions : RandomExplosionsEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExpandingHearts : ExpandingHeartsEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExpandingStar5 : ExpandingStar5sEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExpandingStar6 : ExpandingStar6sEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExpandingExplosions : ExpandingExplosionsEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExpandingLightningBolts : ExpandingLightningBoltsEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettHeartWipeOut : HeartWipeOutEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettHeartWipeIn : HeartWipeInEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettStar5WipeOut : Star5WipeOutEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettStar5WipeIn : Star5WipeInEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettStar6WipeOut : Star6WipeOutEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettStar6WipeIn : Star6WipeInEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExplosionWipeOut : ExplosionWipeOutEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExplosionWipeIn : ExplosionWipeInEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettCrossWipeOut : CrossWipeOutEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettCrossWipeIn : CrossWipeInEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettHeartWipeInAndOut : HeartWipeInAndOutEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettStar5WipeInAndOut : Star5WipeInAndOutEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettStar6WipeInAndOut : Star6WipeInAndOutEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExplosionWipeInAndOut : ExplosionWipeInAndOutEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettAngledTwistIn : AngledTwistIn(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettAngledTwistOut : AngledTwistOut(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettMultipleAngledTwistIn : MultipleAngledTwistIn(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress, iStep);
|
|
iettMultipleAngledTwistOut : MultipleAngledTwistOut(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress, iStep);
|
|
iettRandomPuzzlePieces : RandomPuzzlePiecesEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettPacmanFromLeft : PacmanFromLeftEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettPacmanFromRight : PacmanFromRightEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettPacman3Row : Pacman3RowEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettPacman4Row : Pacman4RowEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettPacman2SimRow : Pacman2SimRowEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettPacman4SimRow : Pacman4SimRowEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettPacman6SimRow : Pacman6SimRowEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettFullSweepClockwise : FullSweepClockwise(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExpandingSweepClockwise : FullExpandingSweepClockwise(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
iettRandomBoxesWithWord : RandomBoxesWithWordEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettRandomWord : RandomWordEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettExpandingWord : ExpandingWordEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettWordWipeOut : WordWipeOutEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettWordWipeIn : WordWipeInEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettWordWipeInAndOut : WordWipeInAndOutEffect(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettWordHalfSweep : WordHalfSweep(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettWordFullSweep : WordFullSweep(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
iettWordFullExpandingSweep : WordFullExpandingSweep(ACanvas, ASourceBitmap, ATargetBitmap, ARect, iProgress);
|
|
|
|
else raise EIEException.create('Unknown Transition!');
|
|
|
|
end;
|
|
end;
|
|
|
|
{$endif}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////////////////////////////////
|
|
// TIETransitionEffects
|
|
|
|
//
|
|
|
|
constructor TIETransitionEffects.Create(Owner: TWinControl);
|
|
begin
|
|
inherited Create;
|
|
//
|
|
if assigned( Owner ) and not ( Owner is TIEView ) then
|
|
raise EIEException.create('Invalid Owner');
|
|
|
|
fOwner := Owner;
|
|
fSourceShot := TBitmap.Create;
|
|
fSourceShot.Width := 1;
|
|
fSourceShot.Height := 1;
|
|
fSourceShot.PixelFormat := pf24bit;
|
|
fTargetShot := TBitmap.Create;
|
|
fTargetShot.Width := 1;
|
|
fTargetShot.Height := 1;
|
|
fTargetShot.PixelFormat := pf24bit;
|
|
fCurrentView := TBitmap.Create;
|
|
fCurrentView.Width := 1;
|
|
fCurrentView.Height := 1;
|
|
fCurrentView.PixelFormat := pf24bit;
|
|
fRunning := false;
|
|
fTransition := iettNone;
|
|
fDuration := 1000;
|
|
fSourceShotLines := nil;
|
|
fTargetShotLines := nil;
|
|
fCurrentViewLines := nil;
|
|
fUpdateOnStop := false;
|
|
fTimer := TTimer.Create(fOwner);
|
|
fTimer.Enabled := false;
|
|
fTimer.OnTimer := TimerEvent;
|
|
fTimer.Interval := 20;
|
|
fFullImage := nil;
|
|
fOnTransitionStop := nil;
|
|
fOnTransitionStep := nil;
|
|
fTiming := iettLinear;
|
|
end;
|
|
|
|
destructor TIETransitionEffects.Destroy;
|
|
begin
|
|
if fSourceShotLines <> nil then
|
|
freemem(fSourceShotLines);
|
|
if fTargetShotLines <> nil then
|
|
freemem(fTargetShotLines);
|
|
if fCurrentViewLines <> nil then
|
|
freemem(fCurrentViewLines);
|
|
fSourceShotLines := nil;
|
|
fTargetShotLines := nil;
|
|
fCurrentViewLines := nil;
|
|
FreeAndNil(fTimer);
|
|
FreeAndNil(fSourceShot);
|
|
FreeAndNil(fTargetShot);
|
|
FreeAndNil(fCurrentView);
|
|
//
|
|
inherited;
|
|
end;
|
|
|
|
procedure TIETransitionEffects.SetFullImage(const Value: TObject);
|
|
begin
|
|
if ( Value is TIEBitmap ) = False then
|
|
raise EIEException.create('Must be TIEBitmap');
|
|
|
|
fFullImage := Value;
|
|
end;
|
|
|
|
procedure TIETransitionEffects.SetOnTransitionPaint(const Value: TIEOnTransitionPaint);
|
|
begin
|
|
fOnTransitionPaint := Value;
|
|
end;
|
|
|
|
procedure TIETransitionEffects.SetSizes(Width, Height: integer);
|
|
begin
|
|
Stop;
|
|
fWidth := Width;
|
|
fHeight := Height;
|
|
fCurrentView.Width := fWidth;
|
|
fCurrentView.Height := fHeight;
|
|
fSourceShot.Width := fWidth;
|
|
fSourceShot.Height := fHeight;
|
|
fTargetShot.Width := fWidth;
|
|
fTargetShot.Height := fHeight;
|
|
fMinLeft := 0;
|
|
fMaxRight := 0;
|
|
end;
|
|
|
|
procedure TIETransitionEffects.Run(UpdateOnStop: boolean);
|
|
var
|
|
q: integer;
|
|
begin
|
|
if fTransition = iettNone then
|
|
exit;
|
|
if fRunning then
|
|
TIEView( fOwner ).NPUnLockPaint;
|
|
fUpdateOnStop := UpdateOnStop;
|
|
fRunning := true;
|
|
fStep := 0;
|
|
fFirstStep := True;
|
|
fAccum1 := 0;
|
|
fFrames := 0;
|
|
if ((fWidth < 2) and (fHeight < 2)) or (fHeight<>fSourceShot.Height) then
|
|
begin
|
|
fRunning := false;
|
|
exit;
|
|
end;
|
|
TIEView( fOwner ).LockPaint;
|
|
if fSourceShotLines <> nil then
|
|
freemem(fSourceShotLines);
|
|
if fTargetShotLines <> nil then
|
|
freemem(fTargetShotLines);
|
|
if fCurrentViewLines <> nil then
|
|
freemem(fCurrentViewLines);
|
|
getmem(fSourceShotLines, sizeof(pointer) * fHeight);
|
|
getmem(fTargetShotLines, sizeof(pointer) * fHeight);
|
|
getmem(fCurrentViewLines, sizeof(pointer) * fHeight);
|
|
for q := 0 to fHeight - 1 do
|
|
begin
|
|
fSourceShotLines[q] := fSourceShot.Scanline[q];
|
|
fTargetShotLines[q] := fTargetShot.Scanline[q];
|
|
fCurrentViewLines[q] := fCurrentView.Scanline[q];
|
|
end;
|
|
fStartTick := GetTickCount;
|
|
fTimer.Enabled := true;
|
|
end;
|
|
|
|
procedure TIETransitionEffects.PrepareBitmap(OriginalBitmap, TargetBitmap : TBitmap);
|
|
var
|
|
q: Integer;
|
|
begin
|
|
if fTransition=iettNone then
|
|
exit;
|
|
fRunning := true;
|
|
fStep := 0;
|
|
fFirstStep := True;
|
|
fAccum1 := 0;
|
|
fFrames := 0;
|
|
|
|
SetSizes(OriginalBitmap.Width, OriginalBitmap.Height);
|
|
|
|
fSourceShot.assign(OriginalBitmap);
|
|
fCurrentView.assign(OriginalBitmap);
|
|
fTargetShot.assign(TargetBitmap);
|
|
|
|
if ((fWidth < 2) and (fHeight < 2)) or (fHeight <> fSourceShot.Height) then
|
|
begin
|
|
fRunning := false;
|
|
exit;
|
|
end;
|
|
|
|
if fSourceShotLines <> nil then
|
|
freemem(fSourceShotLines);
|
|
if fTargetShotLines <> nil then
|
|
freemem(fTargetShotLines);
|
|
if fCurrentViewLines <> nil then
|
|
freemem(fCurrentViewLines);
|
|
getmem(fSourceShotLines, sizeof(pointer) * fHeight);
|
|
getmem(fTargetShotLines, sizeof(pointer) * fHeight);
|
|
getmem(fCurrentViewLines, sizeof(pointer) * fHeight);
|
|
for q := 0 to fHeight - 1 do
|
|
begin
|
|
fSourceShotLines[q] := fSourceShot.Scanline[q];
|
|
fTargetShotLines[q] := fTargetShot.Scanline[q];
|
|
fCurrentViewLines[q] := fCurrentView.Scanline[q];
|
|
end;
|
|
end;
|
|
|
|
procedure TIETransitionEffects.Stop;
|
|
begin
|
|
if not fRunning then
|
|
exit;
|
|
if fTransition = iettNone then
|
|
exit;
|
|
fTimer.Enabled := false;
|
|
fRunning := false;
|
|
fCurrentView.Width := 1;
|
|
fCurrentView.Height := 1;
|
|
fSourceShot.Width := 1;
|
|
fSourceShot.Height := 1;
|
|
fTargetShot.Width := 1;
|
|
fTargetShot.Height := 1;
|
|
|
|
if assigned( fOwner ) then
|
|
begin
|
|
TIEView( fOwner ).NPUnLockPaint;
|
|
if fUpdateOnStop then
|
|
TIEView( fOwner ).Update;
|
|
if assigned(fOnTransitionStop) then
|
|
fOnTransitionStop(fOwner);
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TIETransitionEffects.MakeTransition(DestCanvas : TCanvas; bExplicitUpdate : Boolean = False);
|
|
const
|
|
Transitions_That_Use_CurrentViewLines = [iettRandomPoints ,
|
|
iettFadeIn ,
|
|
iettFadeOut ,
|
|
iettCrossDissolve ,
|
|
iettMoveLeftRight1 ,
|
|
iettMoveLeftRight2 ,
|
|
iettMoveRightLeft1 ,
|
|
iettMoveRightLeft2 ,
|
|
iettMoveUpDown1 ,
|
|
iettMoveUpDown2 ,
|
|
iettMoveDownUp1 ,
|
|
iettMoveDownUp2
|
|
{$ifdef IEINCLUDEEXTRATRANSITIONS}
|
|
,iettPageFlip2 ,
|
|
iettReversePageFlip2 ,
|
|
iettCubeRotateFromLeft ,
|
|
iettCubeRotateFromRight ,
|
|
iettCubeRotateFromTop ,
|
|
iettCubeRotateFromBottom ,
|
|
iettSoftWipeFromLeft ,
|
|
iettSoftWipeFromRight ,
|
|
iettSoftWipeFromTop ,
|
|
iettSoftWipeFromBottom ,
|
|
iettCubeRotateFromLeft2 ,
|
|
iettCubeRotateFromRight2 ,
|
|
iettCubeRotateFromTop2 ,
|
|
iettCubeRotateFromBottom2
|
|
{$endif}
|
|
];
|
|
var
|
|
q: Integer;
|
|
begin
|
|
// Output transition to fCurrentView or fCurrentViewLines
|
|
case fTransition of
|
|
|
|
iettNone : begin { Nothing to do } end;
|
|
|
|
iettCrossDissolve : CrossDissolve(fStep);
|
|
iettFadeOut : FadeOut(fStep);
|
|
iettFadeIn : FadeIn(fStep);
|
|
iettFadeOutIn : FadeOutIn(fStep);
|
|
iettLeftRight1 : LeftRight1(fStep);
|
|
iettLeftRight2 : LeftRight2(fStep);
|
|
iettRightLeft1 : RightLeft1(fStep);
|
|
iettRightLeft2 : RightLeft2(fStep);
|
|
iettUpDown1 : UpDown1(fStep);
|
|
iettUpDown2 : UpDown2(fStep);
|
|
iettDownUp1 : DownUp1(fStep);
|
|
iettDownUp2 : DownUp2(fStep);
|
|
iettMoveLeftRight1 : MoveLeftRight1(fStep);
|
|
iettMoveLeftRight2 : MoveLeftRight2(fStep);
|
|
iettMoveRightLeft1 : MoveRightLeft1(fStep);
|
|
iettMoveRightLeft2 : MoveRightLeft2(fStep);
|
|
iettMoveUpDown1 : MoveUpDown1(fStep);
|
|
iettMoveUpDown2 : MoveUpDown2(fStep);
|
|
iettMoveDownUp1 : MoveDownUp1(fStep);
|
|
iettMoveDownUp2 : MoveDownUp2(fStep);
|
|
iettRandomPoints : RandomPoints(fStep);
|
|
iettFromUpLeft : FromUpLeft(fStep);
|
|
iettFromUpRight : FromUpRight(fStep);
|
|
iettFromBottomLeft : FromBottomLeft(fStep);
|
|
iettFromBottomRight : FromBottomRight(fStep);
|
|
iettRandomBoxes : RandomBoxes(fStep);
|
|
iettCenter1 : Center1(fStep);
|
|
iettCenter2 : Center2(fStep);
|
|
iettCenterZoom1 : CenterZoom1(fStep);
|
|
iettCenterZoom2 : CenterZoom2(fStep);
|
|
iettPanZoom : PanZoom(fStep);
|
|
|
|
{$ifdef IEINCLUDEEXTRATRANSITIONS}
|
|
|
|
iettPageFlip : PageFlipEffect(fStep, True);
|
|
iettPageFlip2 : PageFlipEffect3D(fStep, True);
|
|
iettReversePageFlip : PageFlipEffect(fStep, False);
|
|
iettReversePageFlip2 : PageFlipEffect3D(fStep, False);
|
|
|
|
iettCubeRotateFromLeft : CubeRotateFromLeft(fStep);
|
|
iettCubeRotateFromRight : CubeRotateFromRight(fStep);
|
|
iettCubeRotateFromTop : CubeRotateFromTop(fStep);
|
|
iettCubeRotateFromBottom : CubeRotateFromBottom(fStep);
|
|
|
|
iettSoftWipeFromLeft : SoftWipeFromLeft(fStep);
|
|
iettSoftWipeFromRight : SoftWipeFromRight(fStep);
|
|
iettSoftWipeFromTop : SoftWipeFromTop(fStep);
|
|
iettSoftWipeFromBottom : SoftWipeFromBottom(fStep);
|
|
|
|
iettCubeRotateFromLeft2 : CubeRotateFromLeft3D(fStep);
|
|
iettCubeRotateFromRight2 : CubeRotateFromRight3D(fStep);
|
|
iettCubeRotateFromTop2 : CubeRotateFromTop3D(fStep);
|
|
iettCubeRotateFromBottom2 : CubeRotateFromBottom3D(fStep);
|
|
|
|
else
|
|
begin
|
|
// Support for Extra Transition effects
|
|
if (fStep = 0) or fFirstStep then
|
|
begin
|
|
fCurrentView.assign(fSourceShot);
|
|
fTransitionInitialized := False;
|
|
end;
|
|
|
|
if (fStep > 0) then
|
|
begin
|
|
SetStretchBltMode(fCurrentView.Canvas.Handle, HALFTONE);
|
|
PerformExtraTransitionEffect(fTransition,
|
|
fCurrentView.Canvas,
|
|
fSourceShot,
|
|
fTargetShot,
|
|
Rect(0, 0, fCurrentView.Width, fCurrentView.Height),
|
|
fStep);
|
|
end;
|
|
end;
|
|
{$endif}
|
|
end;
|
|
|
|
// Force update of fCurrentView
|
|
if bExplicitUpdate and (fTransition in Transitions_That_Use_CurrentViewLines) then
|
|
for q := 0 to fCurrentView.Height - 1 do
|
|
CopyMemory(fCurrentView.Scanline[q], fCurrentViewLines[q], IEBitmapRowLen(fCurrentView.Width, 24, 32));
|
|
|
|
// paint result
|
|
BitBlt(DestCanvas.handle, 0, 0, fWidth, fHeight, fCurrentView.Canvas.Handle, 0, 0, SRCCOPY);
|
|
end;
|
|
|
|
|
|
procedure TIETransitionEffects.TimerEvent(Sender: TObject);
|
|
var
|
|
elap: dword;
|
|
begin
|
|
if not fRunning then
|
|
exit;
|
|
if assigned(fOnTransitionStep) then
|
|
fOnTransitionStep(fOwner, fStep);
|
|
inc(fFrames);
|
|
|
|
MakeTransition( TIEView( fOwner ).GetCanvas );
|
|
|
|
if Assigned(FOnTransitionPaint) then
|
|
fOnTransitionPaint(fOwner, FCurrentView, Self, fStep);
|
|
//
|
|
elap := GetTickCount - fStartTick;
|
|
if elap >= dword(fDuration) then
|
|
begin
|
|
if FUpdateOnStop and (fTransition<>iettPanZoom) then
|
|
begin
|
|
BitBlt( TIEView( fOwner ).GetCanvas.handle, 0, 0, fWidth, fHeight, fTargetShot.Canvas.Handle, 0, 0, SRCCOPY);
|
|
if Assigned(FOnTransitionPaint) then
|
|
fOnTransitionPaint(fOwner, fTargetShot, Self, 1024);
|
|
end;
|
|
Stop;
|
|
end;
|
|
|
|
case fTiming of
|
|
iettLinear: fStep := Trunc((elap / fDuration) * 1024); // linear
|
|
iettExponential: fStep := Trunc( exp((elap/fDuration)*5-2.718)/10 * 1024); // exponential
|
|
iettLogarithmic: fStep := Trunc( (ln((elap/fDuration)*10)+2.718)/5 * 1024 ); // logarithmic
|
|
end;
|
|
|
|
if fStep > 1024 then
|
|
fStep := 1024;
|
|
fFirstStep := False;
|
|
end;
|
|
|
|
// TransitionProgress: The percentage that it is has progressed from the start image to the end image (ranging from 0.0 to 100.0)
|
|
procedure TIETransitionEffects.CreateBitmap(TransitionProgress : Single; DestBitmap : TBitmap);
|
|
// NPC: 24/10/11
|
|
begin
|
|
// Removed v5.0.7. Already handled by PrepareBitmap. Causes A/V on memory copy
|
|
// if (TransitionProgress = 0) or fFirstStep then
|
|
// fCurrentView.assign(fSourceShot);
|
|
|
|
DestBitmap.width := fWidth;
|
|
DestBitmap.Height := fHeight;
|
|
DestBitmap.pixelformat := pf24bit;
|
|
|
|
FStep := Round(1024 * TransitionProgress / 100);
|
|
if fStep > 1024 then
|
|
fStep := 1024;
|
|
if fStep < 0 then
|
|
fStep := 0;
|
|
|
|
inc(fFrames);
|
|
|
|
// make transition
|
|
MakeTransition(DestBitmap.Canvas, True);
|
|
fFirstStep := False;
|
|
end;
|
|
|
|
procedure TIETransitionEffects.RandomPoints(Step: integer);
|
|
var
|
|
y, fRowLen: integer;
|
|
px1, px2: PRGBROW;
|
|
r, rr: integer;
|
|
s, q: integer;
|
|
begin
|
|
fRowLen := IEBitmapRowLen(fWidth, 24, 32);
|
|
if (fStep = 0) or fFirstStep then
|
|
CopyMemory(fCurrentViewLines[fHeight - 1], fSourceShotLines[fHeight - 1], fRowLen * fHeight);
|
|
|
|
if fStep > 0 then
|
|
begin
|
|
q := round(Step * fWidth * (Step / 180) / 1024);
|
|
s := q - fAccum1;
|
|
fAccum1 := q;
|
|
for y := 0 to fHeight - 1 do
|
|
begin
|
|
px1 := fCurrentViewLines[y];
|
|
px2 := fTargetShotLines[y];
|
|
for q := 0 to s - 1 do
|
|
begin
|
|
r := random(fWidth);
|
|
px1^[r].r := px2^[r].r;
|
|
px1^[r].b := px2^[r].b;
|
|
px1^[r].g := px2^[r].g;
|
|
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
begin
|
|
for rr := 1 to 5 do
|
|
if r + rr < fWidth then
|
|
begin
|
|
px1^[r + rr].r := px2^[r + rr].r;
|
|
px1^[r + rr].b := px2^[r + rr].b;
|
|
px1^[r + rr].g := px2^[r + rr].g;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
// fade from background
|
|
procedure TIETransitionEffects.FadeIn(Step: integer);
|
|
var
|
|
x, y: integer;
|
|
ppx, ppx3: pRGB;
|
|
c1: integer;
|
|
rr, gg, bb: integer;
|
|
begin
|
|
c1 := 1024 - Step;
|
|
with TColor2TRGB(FBackground) do
|
|
begin
|
|
rr := r * c1;
|
|
gg := g * c1;
|
|
bb := b * c1;
|
|
end;
|
|
for y := 0 to fHeight - 1 do
|
|
begin
|
|
ppx := fTargetShotLines[y];
|
|
ppx3 := fCurrentViewLines[y];
|
|
for x := 0 to fWidth - 1 do
|
|
begin
|
|
with ppx3^ do
|
|
begin
|
|
r := (ppx^.r * Step + rr) shr 10;
|
|
g := (ppx^.g * Step + gg) shr 10;
|
|
b := (ppx^.b * Step + bb) shr 10;
|
|
end;
|
|
inc(ppx);
|
|
inc(ppx3);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TIETransitionEffects.FadeOutIn(Step: integer);
|
|
begin
|
|
if Step < 512 then
|
|
FadeOut(Step * 2)
|
|
else
|
|
FadeIn((Step - 512) * 2);
|
|
end;
|
|
|
|
// dissolve to background
|
|
procedure TIETransitionEffects.FadeOut(Step: integer);
|
|
var
|
|
x, y: integer;
|
|
ppx, ppx3: pRGB;
|
|
c1: integer;
|
|
rr, gg, bb: integer;
|
|
begin
|
|
c1 := 1024 - Step;
|
|
with TColor2TRGB(FBackground) do
|
|
begin
|
|
rr := r * Step;
|
|
gg := g * Step;
|
|
bb := b * Step;
|
|
end;
|
|
for y := 0 to fHeight - 1 do
|
|
begin
|
|
ppx := fSourceShotLines[y];
|
|
ppx3 := fCurrentViewLines[y];
|
|
for x := 0 to fWidth - 1 do
|
|
begin
|
|
with ppx3^ do
|
|
begin
|
|
r := (ppx^.r * c1 + rr) shr 10;
|
|
g := (ppx^.g * c1 + gg) shr 10;
|
|
b := (ppx^.b * c1 + bb) shr 10;
|
|
end;
|
|
inc(ppx);
|
|
inc(ppx3);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TIETransitionEffects.CrossDissolve(Step: integer);
|
|
var
|
|
x, y: integer;
|
|
ppx, ppx2, ppx3: pRGB;
|
|
c1: integer;
|
|
begin
|
|
c1 := 1024 - Step;
|
|
for y := 0 to fHeight - 1 do
|
|
begin
|
|
ppx := fSourceShotLines[y];
|
|
ppx2 := fTargetShotLines[y];
|
|
ppx3 := fCurrentViewLines[y];
|
|
for x := 0 to fWidth - 1 do
|
|
begin
|
|
with ppx3^ do
|
|
begin
|
|
r := (ppx^.r * c1 + ppx2^.r * Step) shr 10;
|
|
g := (ppx^.g * c1 + ppx2^.g * Step) shr 10;
|
|
b := (ppx^.b * c1 + ppx2^.b * Step) shr 10;
|
|
end;
|
|
inc(ppx);
|
|
inc(ppx2);
|
|
inc(ppx3);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TIETransitionEffects.LeftRight1(Step: integer);
|
|
begin
|
|
if (Step = 0) or fFirstStep then
|
|
fCurrentView.Canvas.Draw(0, 0, fSourceShot);
|
|
BitBlt(fCurrentView.Canvas.Handle, 0, 0, ((Step * fWidth) shr 10), fHeight, fTargetShot.Canvas.Handle, 0, 0, SRCCOPY);
|
|
end;
|
|
|
|
procedure TIETransitionEffects.LeftRight2(Step: integer);
|
|
var
|
|
sx: integer;
|
|
begin
|
|
sx := (Step * fWidth) shr 10;
|
|
if (Step = 0) or fFirstStep then
|
|
fCurrentView.Canvas.Draw(0, 0, fSourceShot);
|
|
BitBlt(fCurrentView.Canvas.Handle, 0, 0, sx, fHeight, fTargetShot.Canvas.Handle, 0, 0, SRCCOPY);
|
|
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
begin
|
|
fCurrentView.Canvas.Pen.color := clGray;
|
|
fCurrentView.Canvas.Pen.Width := 2;
|
|
end
|
|
else
|
|
begin
|
|
fCurrentView.Canvas.Pen.color := clRed;
|
|
fCurrentView.Canvas.Pen.Width := 1;
|
|
end;
|
|
fCurrentView.Canvas.MoveTo(sx, 0);
|
|
fCurrentView.canvas.LineTo(sx, fHeight);
|
|
end;
|
|
|
|
procedure TIETransitionEffects.RightLeft1(Step: integer);
|
|
var
|
|
sx, sx2: integer;
|
|
begin
|
|
sx := round(((1024 - Step) * fWidth) / 1024);
|
|
sx2 := round((Step * fWidth) / 1024);
|
|
if (Step = 0) or fFirstStep then
|
|
fCurrentView.Canvas.Draw(0, 0, fSourceShot);
|
|
BitBlt(fCurrentView.Canvas.Handle, sx, 0, sx2, fHeight, fTargetShot.Canvas.Handle, sx, 0, SRCCOPY);
|
|
end;
|
|
|
|
procedure TIETransitionEffects.RightLeft2(Step: integer);
|
|
var
|
|
sx, sx2: integer;
|
|
begin
|
|
sx := round(((1024 - Step) * fWidth) / 1024);
|
|
sx2 := round((Step * fWidth) / 1024);
|
|
if (Step = 0) or fFirstStep then
|
|
fCurrentView.Canvas.Draw(0, 0, fSourceShot);
|
|
BitBlt(fCurrentView.Canvas.Handle, sx, 0, sx2, fHeight, fTargetShot.Canvas.Handle, sx, 0, SRCCOPY);
|
|
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
begin
|
|
fCurrentView.Canvas.Pen.color := clGray;
|
|
fCurrentView.Canvas.Pen.Width := 2;
|
|
end
|
|
else
|
|
begin
|
|
fCurrentView.Canvas.Pen.color := clRed;
|
|
fCurrentView.Canvas.Pen.Width := 1;
|
|
end;
|
|
fCurrentView.Canvas.MoveTo(sx, 0);
|
|
fCurrentView.canvas.LineTo(sx, fHeight);
|
|
end;
|
|
|
|
procedure TIETransitionEffects.UpDown1(Step: integer);
|
|
var
|
|
sy: integer;
|
|
begin
|
|
sy := round((Step * fHeight) / 1024);
|
|
if (Step = 0) or fFirstStep then
|
|
fCurrentView.Canvas.Draw(0, 0, fSourceShot);
|
|
BitBlt(fCurrentView.Canvas.Handle, 0, 0, fWidth, sy, fTargetShot.Canvas.Handle, 0, 0, SRCCOPY);
|
|
end;
|
|
|
|
procedure TIETransitionEffects.UpDown2(Step: integer);
|
|
var
|
|
sy: integer;
|
|
begin
|
|
sy := round((Step * fHeight) / 1024);
|
|
if (Step = 0) or fFirstStep then
|
|
fCurrentView.Canvas.Draw(0, 0, fSourceShot);
|
|
BitBlt(fCurrentView.Canvas.Handle, 0, 0, fWidth, sy, fTargetShot.Canvas.Handle, 0, 0, SRCCOPY);
|
|
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
begin
|
|
fCurrentView.Canvas.Pen.color := clGray;
|
|
fCurrentView.Canvas.Pen.Width := 2;
|
|
end
|
|
else
|
|
begin
|
|
fCurrentView.Canvas.Pen.color := clRed;
|
|
fCurrentView.Canvas.Pen.Width := 1;
|
|
end;
|
|
fCurrentView.Canvas.MoveTo(0, sy);
|
|
fCurrentView.Canvas.LineTo(fWidth, sy);
|
|
end;
|
|
|
|
procedure TIETransitionEffects.DownUp1(Step: integer);
|
|
var
|
|
sy, sy2: integer;
|
|
begin
|
|
sy := round(((1024 - Step) * fHeight) / 1024);
|
|
sy2 := round((Step * fHeight) / 1024);
|
|
if (Step = 0) or fFirstStep then
|
|
fCurrentView.Canvas.Draw(0, 0, fSourceShot);
|
|
BitBlt(fCurrentView.Canvas.Handle, 0, sy, fWidth, sy2, fTargetShot.Canvas.Handle, 0, sy, SRCCOPY);
|
|
end;
|
|
|
|
procedure TIETransitionEffects.DownUp2(Step: integer);
|
|
var
|
|
sy, sy2: integer;
|
|
begin
|
|
sy := round(((1024 - Step) * fHeight) / 1024);
|
|
sy2 := round((Step * fHeight) / 1024);
|
|
if (Step = 0) or fFirstStep then
|
|
fCurrentView.Canvas.Draw(0, 0, fSourceShot);
|
|
BitBlt(fCurrentView.Canvas.Handle, 0, sy, fWidth, sy2, fTargetShot.Canvas.Handle, 0, sy, SRCCOPY);
|
|
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
begin
|
|
fCurrentView.Canvas.Pen.color := clGray;
|
|
fCurrentView.Canvas.Pen.Width := 2;
|
|
end
|
|
else
|
|
begin
|
|
fCurrentView.Canvas.Pen.color := clRed;
|
|
fCurrentView.Canvas.Pen.Width := 1;
|
|
end;
|
|
fCurrentView.Canvas.MoveTo(0, sy);
|
|
fCurrentView.Canvas.LineTo(fWidth, sy);
|
|
end;
|
|
|
|
procedure TIETransitionEffects.MoveLeftRight1(Step: integer);
|
|
var
|
|
sx, y: integer;
|
|
ppx, ppx2: PRGB;
|
|
begin
|
|
sx := Step * fWidth shr 10;
|
|
for y := 0 to fHeight - 1 do
|
|
begin
|
|
ppx := fCurrentViewLines[y];
|
|
ppx2 := fTargetShotLines[y];
|
|
inc(ppx2, fWidth - sx);
|
|
CopyMemory(ppx, ppx2, sx * 3);
|
|
inc(ppx, sx);
|
|
CopyMemory(ppx, fSourceShotLines[y], (fWidth - sx) * 3);
|
|
end;
|
|
end;
|
|
|
|
procedure TIETransitionEffects.MoveLeftRight2(Step: integer);
|
|
var
|
|
sx, y: integer;
|
|
ppx: PRGB;
|
|
begin
|
|
sx := Step * fWidth shr 10;
|
|
for y := 0 to fHeight - 1 do
|
|
begin
|
|
ppx := fCurrentViewLines[y];
|
|
CopyMemory(ppx, fTargetShotLines[y], sx * 3);
|
|
inc(ppx, sx);
|
|
CopyMemory(ppx, fSourceShotLines[y], (fWidth - sx) * 3);
|
|
end;
|
|
end;
|
|
|
|
procedure TIETransitionEffects.MoveRightLeft1(Step: integer);
|
|
var
|
|
sx, y: integer;
|
|
ppx, ppx2: PRGB;
|
|
begin
|
|
sx := (1024 - Step) * fWidth shr 10;
|
|
for y := 0 to fHeight - 1 do
|
|
begin
|
|
ppx := fCurrentViewLines[y];
|
|
ppx2 := fSourceShotLines[y];
|
|
inc(ppx2, fWidth - sx);
|
|
CopyMemory(ppx, ppx2, sx * 3);
|
|
inc(ppx, sx);
|
|
CopyMemory(ppx, fTargetShotLines[y], (fWidth - sx) * 3);
|
|
end;
|
|
end;
|
|
|
|
procedure TIETransitionEffects.MoveRightLeft2(Step: integer);
|
|
var
|
|
sx, y: integer;
|
|
ppx: PRGB;
|
|
begin
|
|
sx := (1024 - Step) * fWidth shr 10;
|
|
for y := 0 to fHeight - 1 do
|
|
begin
|
|
ppx := fCurrentViewLines[y];
|
|
CopyMemory(ppx, fSourceShotLines[y], sx * 3);
|
|
inc(ppx, sx);
|
|
CopyMemory(ppx, fTargetShotLines[y], (fWidth - sx) * 3);
|
|
end;
|
|
end;
|
|
|
|
procedure TIETransitionEffects.MoveUpDown1(Step: integer);
|
|
var
|
|
sy, fRowLen, y: integer;
|
|
begin
|
|
sy := Step * fHeight shr 10;
|
|
fRowLen := IEBitmapRowLen(fWidth, 24, 32);
|
|
for y := 0 to sy - 1 do
|
|
CopyMemory(fCurrentViewLines[y], fTargetShotLines[fHeight - sy + y], fRowLen);
|
|
for y := sy to fHeight - 1 do
|
|
CopyMemory(fCurrentViewLines[y], fSourceShotLines[y - sy], fRowLen);
|
|
end;
|
|
|
|
// source image go away
|
|
|
|
procedure TIETransitionEffects.MoveUpDown2(Step: integer);
|
|
var
|
|
sy, fRowLen, y: integer;
|
|
begin
|
|
sy := Step * fHeight shr 10;
|
|
fRowLen := IEBitmapRowLen(fWidth, 24, 32);
|
|
for y := 0 to sy - 1 do
|
|
CopyMemory(fCurrentViewLines[y], fTargetShotLines[y], fRowLen);
|
|
for y := sy to fHeight - 1 do
|
|
CopyMemory(fCurrentViewLines[y], fSourceShotLines[y - sy], fRowLen);
|
|
end;
|
|
|
|
procedure TIETransitionEffects.MoveDownUp1(Step: integer);
|
|
var
|
|
sy, fRowLen, y: integer;
|
|
begin
|
|
sy := (1024 - Step) * fHeight shr 10;
|
|
fRowLen := IEBitmapRowLen(fWidth, 24, 32);
|
|
for y := 0 to sy - 1 do
|
|
CopyMemory(fCurrentViewLines[y], fSourceShotLines[fHeight - sy + y], fRowLen);
|
|
for y := sy to fHeight - 1 do
|
|
CopyMemory(fCurrentViewLines[y], fTargetShotLines[y - sy], fRowLen);
|
|
end;
|
|
|
|
// source image go away
|
|
|
|
procedure TIETransitionEffects.MoveDownUp2(Step: integer);
|
|
var
|
|
sy, fRowLen, y: integer;
|
|
begin
|
|
sy := (1024 - Step) * fHeight shr 10;
|
|
fRowLen := IEBitmapRowLen(fWidth, 24, 32);
|
|
for y := 0 to sy - 1 do
|
|
CopyMemory(fCurrentViewLines[y], fSourceShotLines[fHeight - sy + y], fRowLen);
|
|
for y := sy to fHeight - 1 do
|
|
CopyMemory(fCurrentViewLines[y], fTargetShotLines[y], fRowLen);
|
|
end;
|
|
|
|
procedure TIETransitionEffects.FromUpLeft(Step: integer);
|
|
var
|
|
sx, sy: integer;
|
|
begin
|
|
sx := (1024 - Step) * fWidth shr 10;
|
|
sy := (1024 - Step) * fHeight shr 10;
|
|
if Step = 0 then
|
|
fCurrentView.Canvas.Draw(0, 0, fSourceShot);
|
|
fCurrentView.Canvas.Draw(-sx, -sy, fTargetShot)
|
|
end;
|
|
|
|
procedure TIETransitionEffects.FromUpRight(Step: integer);
|
|
var
|
|
sx, sy: integer;
|
|
begin
|
|
sx := (1024 - Step) * fWidth shr 10;
|
|
sy := (1024 - Step) * fHeight shr 10;
|
|
if (Step = 0) or fFirstStep then
|
|
fCurrentView.Canvas.Draw(0, 0, fSourceShot);
|
|
fCurrentView.Canvas.Draw(sx, -sy, fTargetShot);
|
|
end;
|
|
|
|
procedure TIETransitionEffects.FromBottomLeft(Step: integer);
|
|
var
|
|
sx, sy: integer;
|
|
begin
|
|
sx := (1024 - Step) * fWidth shr 10;
|
|
sy := (1024 - Step) * fHeight shr 10;
|
|
if (Step = 0) or fFirstStep then
|
|
fCurrentView.Canvas.Draw(0, 0, fSourceShot);
|
|
fCurrentView.Canvas.Draw(-sx, sy, fTargetShot);
|
|
end;
|
|
|
|
procedure TIETransitionEffects.FromBottomRight(Step: integer);
|
|
var
|
|
sx, sy: integer;
|
|
begin
|
|
sx := (1024 - Step) * fWidth shr 10;
|
|
sy := (1024 - Step) * fHeight shr 10;
|
|
if (Step = 0) or fFirstStep then
|
|
fCurrentView.Canvas.Draw(0, 0, fSourceShot);
|
|
fCurrentView.Canvas.Draw(sx, sy, fTargetShot);
|
|
end;
|
|
|
|
procedure TIETransitionEffects.RandomBoxes(Step: integer);
|
|
const
|
|
Box_Value = 8;
|
|
var
|
|
s, q, x, y: integer;
|
|
iBoxDims: integer;
|
|
begin
|
|
iBoxDims := Box_Value;
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
iBoxDims := 2 * Box_Value;
|
|
|
|
if fStep = 0 then
|
|
fCurrentView.Canvas.Draw(0, 0, fSourceShot)
|
|
else
|
|
begin
|
|
q := round(Step * (fWidth * fHeight div (iBoxDims * iBoxDims)) * (Step / 180) / 1024);
|
|
s := q - fAccum1;
|
|
fAccum1 := q;
|
|
for q := 0 to s - 1 do
|
|
begin
|
|
x := random(fWidth) and $FFFFFFF8;
|
|
y := random(fheight) and $FFFFFFF8;
|
|
BitBlt(fCurrentView.Canvas.Handle, x, y, iBoxDims, iBoxDims, fTargetShot.Canvas.Handle, x, y, SRCCOPY);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
// the new image begin from center
|
|
procedure TIETransitionEffects.Center1(Step: integer);
|
|
var
|
|
sx, sy: integer;
|
|
sx2, sy2: integer;
|
|
cx, cy: integer;
|
|
begin
|
|
cx := fWidth shr 1;
|
|
cy := fheight shr 1;
|
|
sx := (Step * cx) shr 10;
|
|
sx2 := Step * fWidth shr 10;
|
|
sy := (Step * cy) shr 10;
|
|
sy2 := step * fHeight shr 10;
|
|
if (Step = 0) or fFirstStep then
|
|
fCurrentView.Canvas.Draw(0, 0, fSourceShot);
|
|
BitBlt(fCurrentView.Canvas.Handle, cx - sx, cy - sy, sx2, sy2, fTargetShot.Canvas.Handle, cx - sx, cy - sy, SRCCOPY);
|
|
end;
|
|
|
|
// the old image collapse in the center
|
|
procedure TIETransitionEffects.Center2(Step: integer);
|
|
var
|
|
sx, sy: integer;
|
|
sx2, sy2: integer;
|
|
cx, cy: integer;
|
|
begin
|
|
cx := fWidth shr 1;
|
|
cy := fheight shr 1;
|
|
sx := ((1024 - Step) * cx) shr 10;
|
|
sx2 := (1024 - Step) * fWidth shr 10;
|
|
sy := ((1024 - Step) * cy) shr 10;
|
|
sy2 := (1024 - step) * fHeight shr 10;
|
|
fCurrentView.Canvas.Draw(0, 0, fTargetShot);
|
|
BitBlt(fCurrentView.Canvas.Handle, cx - sx, cy - sy, sx2, sy2, fSourceShot.Canvas.Handle, cx - sx, cy - sy, SRCCOPY);
|
|
end;
|
|
|
|
procedure TIETransitionEffects.CenterZoom1(Step: integer);
|
|
var
|
|
sx, sy: integer;
|
|
sx2, sy2: integer;
|
|
cx, cy: integer;
|
|
begin
|
|
cx := fWidth shr 1;
|
|
cy := fheight shr 1;
|
|
sx := (Step * cx) shr 10;
|
|
sx2 := Step * fWidth shr 10;
|
|
sy := (Step * cy) shr 10;
|
|
sy2 := step * fHeight shr 10;
|
|
if (Step = 0) or fFirstStep then
|
|
fCurrentView.Canvas.Draw(0, 0, fSourceShot);
|
|
SetStretchBltMode(fCurrentView.Canvas.Handle, HALFTONE);
|
|
StretchBlt(fCurrentView.Canvas.Handle, cx - sx, cy - sy, sx2, sy2, fTargetShot.Canvas.Handle, 0, 0, fWidth, fHeight, SRCCOPY);
|
|
end;
|
|
|
|
procedure TIETransitionEffects.CenterZoom2(Step: integer);
|
|
var
|
|
sx, sy: integer;
|
|
sx2, sy2: integer;
|
|
cx, cy: integer;
|
|
begin
|
|
cx := fWidth shr 1;
|
|
cy := fheight shr 1;
|
|
sx := ((1024 - Step) * cx) shr 10;
|
|
sx2 := (1024 - Step) * fWidth shr 10;
|
|
sy := ((1024 - Step) * cy) shr 10;
|
|
sy2 := (1024 - step) * fHeight shr 10;
|
|
fCurrentView.Canvas.Draw(0, 0, fTargetShot);
|
|
SetStretchBltMode(fCurrentView.Canvas.Handle, HALFTONE);
|
|
StretchBlt(fCurrentView.Canvas.Handle, cx - sx, cy - sy, sx2, sy2, fSourceShot.Canvas.Handle, 0, 0, fWidth, fHeight, SRCCOPY);
|
|
end;
|
|
|
|
|
|
procedure TIETransitionEffects.PanZoom(Step: integer);
|
|
var
|
|
bHasBorders: boolean;
|
|
xdst, ydst, dxdst, dydst: Integer;
|
|
xSrc, ySrc, dxSrc, dySrc: Integer;
|
|
q: double;
|
|
iSetLeft, iSetTop, iSetRight, iSetBottom : Integer;
|
|
aRect: TRect;
|
|
aBitmap: TBitmap;
|
|
blendFunc: _BLENDFUNCTION;
|
|
FullImage : TIEBitmap;
|
|
|
|
procedure ResetMinMaxVals;
|
|
begin
|
|
fMinLeft := round(xSrc);
|
|
fMaxLeft := round(xSrc);
|
|
fMinTop := round(ySrc);
|
|
fMaxTop := round(ySrc);
|
|
fMinRight := Trunc(xSrc + dxSrc);
|
|
fMaxRight := Trunc(xSrc + dxSrc);
|
|
fMinBottom := Trunc(ySrc + dySrc);
|
|
fMaxBottom := Trunc(ySrc + dySrc);
|
|
end;
|
|
|
|
procedure UpdateMinMaxVals;
|
|
begin
|
|
if iSetLeft < fMinLeft then fMinLeft := iSetLeft;
|
|
if iSetLeft > fMaxLeft then fMaxLeft := iSetLeft;
|
|
if iSetTop < fMinTop then fMinTop := iSetTop;
|
|
if iSetTop > fMaxTop then fMaxTop := iSetTop;
|
|
if iSetRight < fMinRight then fMinRight := iSetRight;
|
|
if iSetRight > fMaxRight then fMaxRight := iSetRight;
|
|
if iSetBottom < fMinBottom then fMinBottom := iSetBottom;
|
|
if iSetBottom > fMaxBottom then fMaxBottom := iSetBottom;
|
|
end;
|
|
|
|
begin
|
|
bHasBorders := false;
|
|
aBitmap := TBitmap.create;
|
|
aBitmap.Width := fCurrentView.Width;
|
|
aBitmap.Height := fCurrentView.Height;
|
|
aBitmap.PixelFormat := fCurrentView.PixelFormat;
|
|
|
|
FullImage := TIEBitmap( fFullImage );
|
|
|
|
xdst := 0;
|
|
ydst := 0;
|
|
dxdst := fWidth;
|
|
dydst := fHeight;
|
|
|
|
q := ( StartRect.Left - EndRect.Left ) / 1024;
|
|
xSrc := Trunc( StartRect.Left - q * Step );
|
|
q := ( StartRect.Top - EndRect.Top ) / 1024;
|
|
ySrc := Trunc( StartRect.Top- q * Step );
|
|
q := ( StartRect.Right - EndRect.Right ) / 1024;
|
|
dxSrc := Trunc( StartRect.Right - q * Step) - xSrc;
|
|
q := ( StartRect.Bottom- EndRect.Bottom ) / 1024;
|
|
dySrc := Trunc( StartRect.Bottom - q * Step ) - ySrc;
|
|
|
|
// Are we showing some border area?
|
|
if xSrc < 0 then
|
|
begin
|
|
xSrc := 0;
|
|
bHasBorders := true;
|
|
end;
|
|
|
|
if dxSrc > FullImage.width then
|
|
begin
|
|
dxSrc := FullImage.width;
|
|
bHasBorders := true;
|
|
end;
|
|
|
|
if xSrc + dxSrc > FullImage.width then
|
|
begin
|
|
xSrc := FullImage.width - dxSrc;
|
|
bHasBorders := true;
|
|
end;
|
|
|
|
if ySrc < 0 then
|
|
begin
|
|
ySrc := 0;
|
|
bHasBorders := true;
|
|
end;
|
|
|
|
if ySrc + dySrc > FullImage.Height then
|
|
begin
|
|
ySrc := FullImage.Height - dySrc;
|
|
bHasBorders := true;
|
|
end;
|
|
|
|
if dySrc > FullImage.height then
|
|
begin
|
|
dySrc := FullImage.height;
|
|
bHasBorders := true;
|
|
end;
|
|
|
|
if bHasBorders then
|
|
begin
|
|
// Center the visible image portion within the window (and maintain the aspect ratio)
|
|
aRect := GetImageRectWithinArea( dxSrc, dySrc, fwidth, fheight );
|
|
xdst := aRect.Left;
|
|
ydst := aRect.Top;
|
|
dxdst := aRect.Right - aRect.Left;
|
|
dydst := aRect.Bottom - aRect.Top;
|
|
|
|
// Draw the background
|
|
if assigned(fOwner) and (fOwner is TImageEnView) then
|
|
TImageEnView(fOwner).DrawBackgroundToCanvas(aBitmap.Canvas)
|
|
else
|
|
begin
|
|
aBitmap.Canvas.Brush.color := fBackground;
|
|
aBitmap.Canvas.FillRect(rect(0, 0, aBitmap.width, aBitmap.height));
|
|
end;
|
|
end;
|
|
|
|
if (Step = 0) or
|
|
(fFirstStep) or
|
|
(fMinLeft = 0) or
|
|
(fMaxRight = 0) or
|
|
(bHasBorders) then
|
|
ResetMinMaxVals;
|
|
|
|
// Smooth pan zoom motion
|
|
if StartRect.Left > EndRect.Left then
|
|
// Getting Smaller
|
|
iSetLeft := min(fMinLeft, round(xSrc))
|
|
else
|
|
// Getting Larger
|
|
iSetLeft := max(fMaxLeft, round(xSrc));
|
|
|
|
if StartRect.Top > EndRect.Top then
|
|
// Getting Smaller
|
|
iSetTop := min(fMinTop, round(ySrc))
|
|
else
|
|
// Getting Larger
|
|
iSetTop := max(fMaxTop, round(ySrc));
|
|
|
|
if StartRect.Right > EndRect.Right then
|
|
// Getting Smaller
|
|
iSetRight := min(fMinRight, iSetLeft + Trunc(dxSrc))
|
|
else
|
|
// Getting Larger
|
|
iSetRight := max(fMaxRight, iSetLeft + Trunc(dxSrc));
|
|
|
|
if StartRect.Bottom > EndRect.Bottom then
|
|
// Getting Smaller
|
|
iSetBottom := min(fMinBottom, iSetTop + Trunc(dySrc))
|
|
else
|
|
// Getting Larger
|
|
iSetBottom := max(fMaxBottom, iSetTop + Trunc(dySrc));
|
|
|
|
FullImage.RenderToTBitmapEx(aBitmap,
|
|
round(xdst), round(ydst),
|
|
Trunc(dxdst), Trunc(dydst),
|
|
iSetLeft, iSetTop,
|
|
iSetRight - iSetLeft, iSetBottom - iSetTop,
|
|
True, 255,
|
|
IEGlobalSettings().PanZoomQualityFilter,
|
|
ielNormal);
|
|
|
|
{$ifdef IEHASNOTWINDOWSALPHABLEND}
|
|
fCurrentView.assign( aBitmap );
|
|
{$else}
|
|
if fFirstStep or ( Step = 0 ) or ( fSmoothing < 1 ) or ( fSmoothing > 254 )then
|
|
fCurrentView.assign( aBitmap )
|
|
else
|
|
begin
|
|
// Blend the result for smoothness
|
|
blendFunc.BlendOp := AC_SRC_OVER;
|
|
blendFunc.BlendFlags := 0;
|
|
blendFunc.SourceConstantAlpha := fSmoothing;
|
|
blendFunc.AlphaFormat := 0;
|
|
AlphaBlend( fCurrentView.Canvas.handle, 0, 0, fWidth, fHeight, aBitmap.Canvas.Handle, 0, 0, fWidth, fHeight, blendFunc );
|
|
end;
|
|
{$endif}
|
|
|
|
UpdateMinMaxVals;
|
|
aBitmap.free;
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
{$ifdef IEINCLUDEEXTRATRANSITIONS}
|
|
procedure TIETransitionEffects.SoftWipeHorizontalEx(Step: integer; bForward : Boolean);
|
|
var
|
|
x, y: integer;
|
|
ppx, ppx2, ppx3: pRGB;
|
|
iTransLevel: integer;
|
|
iBlendEndPos: Integer;
|
|
iDistance: Integer;
|
|
iBlendWidth: Integer;
|
|
begin
|
|
if bForward = False then
|
|
Step := 1024 - Step;
|
|
|
|
iBlendWidth := FWidth div 8;
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
iBlendWidth := FWidth div 4;
|
|
|
|
iBlendEndPos := MulDiv(FWidth + iBlendWidth, Step, 1024);
|
|
for y := 0 to fHeight - 1 do
|
|
begin
|
|
if bForward then
|
|
begin
|
|
ppx := fSourceShotLines[y];
|
|
ppx2 := fTargetShotLines[y];
|
|
end
|
|
else
|
|
begin
|
|
ppx := fTargetShotLines[y];
|
|
ppx2 := fSourceShotLines[y];
|
|
end;
|
|
ppx3 := fCurrentViewLines[y];
|
|
for x := 0 to fWidth - 1 do
|
|
begin
|
|
if X > iBlendEndPos then
|
|
iTransLevel := 0
|
|
else
|
|
begin
|
|
iDistance := iBlendEndPos - X;
|
|
iTransLevel := MulDiv(1024, iDistance, iBlendWidth);
|
|
if iTransLevel > 1024 then
|
|
iTransLevel := 1024;
|
|
end;
|
|
|
|
with ppx3^ do
|
|
begin
|
|
r := (ppx^.r * (1024 - iTransLevel) + ppx2^.r * iTransLevel) shr 10;
|
|
g := (ppx^.g * (1024 - iTransLevel) + ppx2^.g * iTransLevel) shr 10;
|
|
b := (ppx^.b * (1024 - iTransLevel) + ppx2^.b * iTransLevel) shr 10;
|
|
end;
|
|
inc(ppx);
|
|
inc(ppx2);
|
|
inc(ppx3);
|
|
end;
|
|
end;
|
|
end;
|
|
{$endif}
|
|
|
|
|
|
{$ifdef IEINCLUDEEXTRATRANSITIONS}
|
|
procedure TIETransitionEffects.SoftWipeFromRight(Step: integer);
|
|
begin
|
|
SoftWipeHorizontalEx(Step, False);
|
|
end;
|
|
{$endif}
|
|
|
|
|
|
{$ifdef IEINCLUDEEXTRATRANSITIONS}
|
|
procedure TIETransitionEffects.SoftWipeFromLeft(Step: integer);
|
|
begin
|
|
SoftWipeHorizontalEx(Step, True);
|
|
end;
|
|
{$endif}
|
|
|
|
|
|
{$ifdef IEINCLUDEEXTRATRANSITIONS}
|
|
procedure TIETransitionEffects.SoftWipeVerticalEx(Step: integer; bForward : Boolean);
|
|
var
|
|
x, y: integer;
|
|
ppx, ppx2, ppx3: pRGB;
|
|
iTransLevel: integer;
|
|
iBlendEndPos: Integer;
|
|
iDistance: Integer;
|
|
iBlendHeight: Integer;
|
|
begin
|
|
if bForward = False then
|
|
Step := 1024 - Step;
|
|
|
|
iBlendHeight := FHeight div 8;
|
|
if IEGlobalSettings().TransitionsDrawAlternative then
|
|
iBlendHeight := FHeight div 4;
|
|
|
|
iBlendEndPos := MulDiv(fHeight + iBlendHeight, Step, 1024);
|
|
for y := 0 to fHeight - 1 do
|
|
begin
|
|
if bForward then
|
|
begin
|
|
ppx := fSourceShotLines[y];
|
|
ppx2 := fTargetShotLines[y];
|
|
end
|
|
else
|
|
begin
|
|
ppx := fTargetShotLines[y];
|
|
ppx2 := fSourceShotLines[y];
|
|
end;
|
|
ppx3 := fCurrentViewLines[y];
|
|
|
|
if Y > iBlendEndPos then
|
|
iTransLevel := 0
|
|
else
|
|
begin
|
|
iDistance := iBlendEndPos - Y;
|
|
iTransLevel := MulDiv(1024, iDistance, iBlendHeight);
|
|
if iTransLevel > 1024 then
|
|
iTransLevel := 1024;
|
|
end;
|
|
|
|
for x := 0 to fWidth - 1 do
|
|
begin
|
|
with ppx3^ do
|
|
begin
|
|
r := (ppx^.r * (1024 - iTransLevel) + ppx2^.r * iTransLevel) shr 10;
|
|
g := (ppx^.g * (1024 - iTransLevel) + ppx2^.g * iTransLevel) shr 10;
|
|
b := (ppx^.b * (1024 - iTransLevel) + ppx2^.b * iTransLevel) shr 10;
|
|
end;
|
|
inc(ppx);
|
|
inc(ppx2);
|
|
inc(ppx3);
|
|
end;
|
|
end;
|
|
end;
|
|
{$endif}
|
|
|
|
|
|
{$ifdef IEINCLUDEEXTRATRANSITIONS}
|
|
procedure TIETransitionEffects.SoftWipeFromTop(Step: integer);
|
|
begin
|
|
SoftWipeVerticalEx(Step, True);
|
|
end;
|
|
{$endif}
|
|
|
|
|
|
{$ifdef IEINCLUDEEXTRATRANSITIONS}
|
|
procedure TIETransitionEffects.SoftWipeFromBottom(Step: integer);
|
|
begin
|
|
SoftWipeVerticalEx(Step, False);
|
|
end;
|
|
{$endif}
|
|
|
|
|
|
{$ifdef IEINCLUDEEXTRATRANSITIONS}
|
|
procedure TIETransitionEffects.PageFlipDarkenEdges(iCurrentPosition, Step : Integer; bForward: Boolean);
|
|
const
|
|
Initial_Darken_Level = 0.25;
|
|
Darkness_Reduction = 0.5;
|
|
var
|
|
iX, iY: integer;
|
|
ppx: pRGB;
|
|
rr, gg, bb: integer;
|
|
iFadeStep: integer;
|
|
bDoDarken: Boolean;
|
|
begin
|
|
if Step < 512 then
|
|
iFadeStep := Round(Step + Round(1024 * Initial_Darken_Level) / Darkness_Reduction)
|
|
else
|
|
iFadeStep := Round(1024 - Step + Round(1024 * Initial_Darken_Level) / Darkness_Reduction);
|
|
|
|
if iFadeStep > 1024 then
|
|
iFadeStep := 1024;
|
|
|
|
with TColor2TRGB(fBackground) do
|
|
begin
|
|
rr := r * (1024 - iFadeStep);
|
|
gg := g * (1024 - iFadeStep);
|
|
bb := b * (1024 - iFadeStep);
|
|
end;
|
|
for iY := 0 to fHeight - 1 do
|
|
begin
|
|
ppx := fCurrentViewLines[iY];
|
|
for iX := 0 to fWidth - 1 do
|
|
begin
|
|
if Step < 512 then
|
|
bDoDarken := iX > iCurrentPosition
|
|
else
|
|
bDoDarken := iX < iCurrentPosition;
|
|
if bForward = False then
|
|
bDoDarken := not bDoDarken;
|
|
|
|
if bDoDarken then
|
|
with ppx^ do
|
|
begin
|
|
r := (ppx^.r * iFadeStep + rr) shr 10;
|
|
g := (ppx^.g * iFadeStep + gg) shr 10;
|
|
b := (ppx^.b * iFadeStep + bb) shr 10;
|
|
end;
|
|
|
|
inc(ppx);
|
|
end;
|
|
end;
|
|
|
|
fCurrentView.Canvas.MoveTo(iCurrentPosition, 0);
|
|
fCurrentView.Canvas.LineTo(iCurrentPosition, fHeight);
|
|
end;
|
|
{$endif}
|
|
|
|
|
|
{$ifdef IEINCLUDEEXTRATRANSITIONS}
|
|
// Page Flip Transition
|
|
procedure TIETransitionEffects.PageFlipEffect(Step: Integer; bForward: Boolean);
|
|
var
|
|
W, H, X: Integer;
|
|
begin
|
|
W := fCurrentView.Width;
|
|
H := fCurrentView.Height;
|
|
|
|
if (Step = 0) or fFirstStep then
|
|
StretchBlt(fCurrentView.Canvas.Handle, 0, 0, W, H,
|
|
FSourceShot.Canvas.Handle, 0, 0, W, H,
|
|
SRCCOPY);
|
|
|
|
if Step = 0 then
|
|
exit;
|
|
|
|
SetStretchBltMode(fCurrentView.Canvas.Handle, HALFTONE);
|
|
|
|
fCurrentView.Canvas.Pen.Color := clBlack;
|
|
fCurrentView.Canvas.Pen.Width := 1;
|
|
fCurrentView.Canvas.Pen.Style := psSolid;
|
|
|
|
if bForward then
|
|
begin
|
|
// draw the new image on the RHS
|
|
StretchBlt(fCurrentView.Canvas.Handle, w div 2, 0, w div 2, H,
|
|
FTargetShot.Canvas.Handle, w div 2, 0, W div 2, H,
|
|
SRCCOPY);
|
|
|
|
if Step <= 512 then
|
|
begin
|
|
X := MulDiv(W, 512 - Step, 1024);
|
|
|
|
// Right Hand fCurrentView.Canvas
|
|
StretchBlt(fCurrentView.Canvas.Handle, w div 2, 0, X, H,
|
|
FSourceShot.Canvas.Handle, w div 2, 0, W div 2, H,
|
|
SRCCOPY);
|
|
|
|
if IEGlobalSettings().TransitionsDrawAlternative = False then
|
|
PageFlipDarkenEdges(w div 2 + X, Step, True);
|
|
end
|
|
else
|
|
begin
|
|
X := MulDiv(W, Step - 512, 512) div 2;
|
|
|
|
if IEGlobalSettings().TransitionsDrawAlternative = False then
|
|
StretchBlt(fCurrentView.Canvas.Handle, 0, 0, W div 2, H,
|
|
FSourceShot.Canvas.Handle, 0, 0, W div 2, H,
|
|
SRCCOPY);
|
|
|
|
// Left Hand side
|
|
StretchBlt(fCurrentView.Canvas.Handle, W div 2 - X, 0, X, H,
|
|
FTargetShot.Canvas.Handle, 0, 0, W div 2, H,
|
|
SRCCOPY);
|
|
|
|
if IEGlobalSettings().TransitionsDrawAlternative = False then
|
|
PageFlipDarkenEdges(w div 2 - X, Step, True);
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
// draw the New image on the LHS
|
|
StretchBlt(fCurrentView.Canvas.Handle, 0, 0, w div 2, H,
|
|
FTargetShot.Canvas.Handle, 0, 0, W div 2, H,
|
|
SRCCOPY);
|
|
|
|
if Step <= 512 then
|
|
begin
|
|
X := MulDiv(W, Step, 1024);
|
|
|
|
// Left Hand side
|
|
StretchBlt(fCurrentView.Canvas.Handle, X, 0, w div 2 - X, H,
|
|
FSourceShot.Canvas.Handle, 0, 0, W div 2, H,
|
|
SRCCOPY);
|
|
|
|
if IEGlobalSettings().TransitionsDrawAlternative = False then
|
|
PageFlipDarkenEdges(X, Step, False);
|
|
end
|
|
else
|
|
begin
|
|
X := MulDiv(W, Step - 512, 512) div 2;
|
|
|
|
// draw the old image on the RHS
|
|
StretchBlt(fCurrentView.Canvas.Handle, w div 2, 0, w div 2, H,
|
|
FSourceShot.Canvas.Handle, w div 2, 0, W div 2, H,
|
|
SRCCOPY);
|
|
|
|
// Right Hand Side
|
|
StretchBlt(fCurrentView.Canvas.Handle, W div 2, 0, X, H,
|
|
FTargetShot.Canvas.Handle, w div 2, 0, W div 2, H,
|
|
SRCCOPY);
|
|
|
|
if IEGlobalSettings().TransitionsDrawAlternative = False then
|
|
PageFlipDarkenEdges(w div 2 + X, Step, False);
|
|
end;
|
|
end;
|
|
end;
|
|
{$endif}
|
|
|
|
|
|
{$ifdef IEINCLUDEEXTRATRANSITIONS}
|
|
// 3D Page Flip Transition
|
|
procedure TIETransitionEffects.PageFlipEffect3D(Step: Integer; bForward: Boolean);
|
|
const
|
|
Inset_Factor = 10; // 1/10 the height
|
|
var
|
|
W, H, X, iInset: Integer;
|
|
IECurrentView : TIEBitmap;
|
|
IESourceShotLHS, IESourceShotRHS : TIEBitmap;
|
|
IETargetShotLHS, IETargetShotRHS : TIEBitmap;
|
|
iEdgeInset: Integer;
|
|
iAlpha: Integer;
|
|
begin
|
|
W := fCurrentView.Width;
|
|
H := fCurrentView.Height;
|
|
|
|
if (Step = 0) or fFirstStep then
|
|
StretchBlt(fCurrentView.Canvas.Handle, 0, 0, W, H,
|
|
FSourceShot.Canvas.Handle, 0, 0, W, H,
|
|
SRCCOPY);
|
|
|
|
if Step = 0 then
|
|
exit;
|
|
|
|
if Step <= 512 then
|
|
iInset := MulDiv(H, Step, 512 * Inset_Factor)
|
|
else
|
|
iInset := MulDiv(H, 1024 - Step, 512 * Inset_Factor);
|
|
iEdgeInset := iInset div 2;
|
|
|
|
fCurrentView.Canvas.Brush.Color := fBackground;
|
|
fCurrentView.Canvas.fillRect(Rect(0, 0, fCurrentView.Width, fCurrentView.height));
|
|
|
|
SetStretchBltMode(fCurrentView.Canvas.Handle, HALFTONE);
|
|
|
|
fCurrentView.Canvas.Pen.Color := clBlack;
|
|
fCurrentView.Canvas.Pen.Width := 1;
|
|
fCurrentView.Canvas.Pen.Style := psSolid;
|
|
|
|
IECurrentView := TIEBitmap.create;
|
|
IESourceShotLHS := TIEBitmap.create(fSourceShot, Rect(0, 0, W div 2, H));
|
|
IESourceShotRHS := TIEBitmap.create(fSourceShot, Rect(W div 2, 0, W, H));
|
|
IETargetShotLHS := TIEBitmap.create(fTargetShot, Rect(0, 0, W div 2, H));
|
|
IETargetShotRHS := TIEBitmap.create(fTargetShot, Rect(w div 2, 0, W, H));
|
|
try
|
|
IECurrentView.EncapsulateTBitmap(fCurrentView, False);
|
|
|
|
if bForward then
|
|
begin
|
|
// FORWARD PAGE FLIP
|
|
|
|
// Draw old image on LHS
|
|
IEPerspectiveTransform(IESourceShotLHS,
|
|
IECurrentView,
|
|
iEdgeInset, iEdgeInset, // Top-Left
|
|
W div 2, iInset, // Top-Right
|
|
W div 2, H - iInset, // Bottom-Right
|
|
iEdgeInset, H - iEdgeInset, // Bottom-Left
|
|
-1, -1, True);
|
|
|
|
// Draw new image on the RHS
|
|
IEPerspectiveTransform(IETargetShotRHS,
|
|
IECurrentView,
|
|
w div 2, iInset, // Top-Left
|
|
W - iEdgeInset, iEdgeInset, // Top-Right
|
|
W - iEdgeInset, H - iEdgeInset, // Bottom-Right
|
|
w div 2, H - iInset, // Bottom-Left
|
|
-1, -1, True);
|
|
|
|
if Step <= 512 then
|
|
begin
|
|
X := MulDiv(W, 512 - Step, 1024);
|
|
|
|
// Draw old image flipping on RHS
|
|
IEPerspectiveTransform(IESourceShotRHS,
|
|
IECurrentView,
|
|
w div 2, iInset, // Top-Left
|
|
W div 2 + X, 0, // Top-Right
|
|
W div 2 + X, H , // Bottom-Right
|
|
w div 2, H - iInset, // Bottom-Left
|
|
-1, -1, True);
|
|
end
|
|
else
|
|
begin
|
|
X := MulDiv(W, Step - 512, 512) div 2;
|
|
|
|
// Draw New image flipping on LHS
|
|
IEPerspectiveTransform(IETargetShotLHS,
|
|
IECurrentView,
|
|
W div 2 - X, 0, // Top-Left
|
|
W div 2, iInset, // Top-Right
|
|
W div 2, H - iInset, // Bottom-Right
|
|
w div 2 - X, H , // Bottom-Left
|
|
-1, -1, True);
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
// REVERSE PAGE FLIP
|
|
|
|
// Draw new image on the LHS
|
|
IEPerspectiveTransform(IETargetShotLHS,
|
|
IECurrentView,
|
|
iEdgeInset, 0, // Top-Left
|
|
W div 2, iInset, // Top-Right
|
|
W div 2, H - iInset, // Bottom-Right
|
|
iEdgeInset, H, // Bottom-Left
|
|
-1, -1, True);
|
|
|
|
// Draw old image on RHS
|
|
IEPerspectiveTransform(IESourceShotRHS,
|
|
IECurrentView,
|
|
w div 2, iInset, // Top-Left
|
|
W - iEdgeInset, 0, // Top-Right
|
|
W - iEdgeInset, H, // Bottom-Right
|
|
w div 2, H - iInset, // Bottom-Left
|
|
-1, -1, True);
|
|
|
|
if Step <= 512 then
|
|
begin
|
|
X := MulDiv(W, Step, 1024);
|
|
|
|
// Draw old image flipping on LHS
|
|
IEPerspectiveTransform(IESourceShotLHS,
|
|
IECurrentView,
|
|
X, 0, // Top-Left
|
|
W div 2, iInset, // Top-Right
|
|
W div 2, H - iInset, // Bottom-Right
|
|
X, H, // Bottom-Left
|
|
-1, -1, True);
|
|
end
|
|
else
|
|
begin
|
|
X := MulDiv(W, Step - 512, 512) div 2;
|
|
|
|
// Draw new image flipping on RHS
|
|
IEPerspectiveTransform(IETargetShotRHS,
|
|
IECurrentView,
|
|
w div 2, iInset, // Top-Left
|
|
W div 2 + X, 0, // Top-Right
|
|
W div 2 + X, H, // Bottom-Right
|
|
w div 2, H - iInset, // Bottom-Left
|
|
-1, -1, True);
|
|
end;
|
|
end;
|
|
|
|
finally
|
|
FreeAndNil(IESourceShotLHS);
|
|
FreeAndNil(IESourceShotRHS);
|
|
FreeAndNil(IETargetShotLHS);
|
|
FreeAndNil(IETargetShotRHS);
|
|
FreeAndNil(IECurrentView);
|
|
end;
|
|
|
|
// Darken half shown pages
|
|
if bForward then
|
|
begin
|
|
if Step <= 512 then
|
|
PageFlipDarkenEdges(w div 2 + X, Step, True)
|
|
else
|
|
PageFlipDarkenEdges(w div 2 - X, Step, True);
|
|
end
|
|
else
|
|
begin
|
|
if Step <= 512 then
|
|
PageFlipDarkenEdges(X, Step, False)
|
|
else
|
|
PageFlipDarkenEdges(w div 2 + X, Step, False);
|
|
end;
|
|
|
|
// DRAW PAGE CENTER LINE
|
|
|
|
if IEGlobalSettings().TransitionsDrawAlternative = False then
|
|
begin
|
|
if Step <= 512 then
|
|
iAlpha := MulDiv(Step, 255, 1024)
|
|
else
|
|
iAlpha := MulDiv(1024 - Step, 255, 1024);
|
|
ColorBlend(fCurrentView.Canvas.Handle,
|
|
Rect(w div 2, 0, w div 2 + 1, fHeight),
|
|
fBackground,
|
|
iAlpha);
|
|
end;
|
|
end;
|
|
{$endif}
|
|
|
|
|
|
{$ifdef IEINCLUDEEXTRATRANSITIONS}
|
|
procedure TIETransitionEffects.CubeRotateDarkenEdges(bVertical, bForward: Boolean; iCurrentPosition, Step : Integer);
|
|
const
|
|
Initial_Darken_Level = 0.15;
|
|
Darkness_Reduction = 0.6;
|
|
var
|
|
iX, iY: integer;
|
|
ppx: pRGB;
|
|
rr1, gg1, bb1: integer;
|
|
rr2, gg2, bb2: integer;
|
|
bFirstHalf: Boolean;
|
|
iFadeStep1, iFadeStep2 : integer;
|
|
begin
|
|
if bForward then
|
|
begin
|
|
iFadeStep1 := Round(Step + Round(1024 * Initial_Darken_Level) / Darkness_Reduction);
|
|
iFadeStep2 := Round(1024 - Step + Round(1024 * Initial_Darken_Level) / Darkness_Reduction);
|
|
end
|
|
else
|
|
begin
|
|
iFadeStep1 := Round(1024 - Step + Round(1024 * Initial_Darken_Level) / Darkness_Reduction);
|
|
iFadeStep2 := Round(Step + Round(1024 * Initial_Darken_Level) / Darkness_Reduction);
|
|
end;
|
|
|
|
if iFadeStep1 > 1024 then
|
|
iFadeStep1 := 1024;
|
|
if iFadeStep2 > 1024 then
|
|
iFadeStep2 := 1024;
|
|
|
|
with TColor2TRGB(fBackground) do
|
|
begin
|
|
rr1 := r * iFadeStep1;
|
|
gg1 := g * iFadeStep1;
|
|
bb1 := b * iFadeStep1;
|
|
end;
|
|
with TColor2TRGB(fBackground) do
|
|
begin
|
|
rr2 := r * iFadeStep2;
|
|
gg2 := g * iFadeStep2;
|
|
bb2 := b * iFadeStep2;
|
|
end;
|
|
|
|
for iY := 0 to fCurrentView.Height - 1 do
|
|
begin
|
|
ppx := fCurrentViewLines[iY];
|
|
for iX := 0 to fCurrentView.Width - 1 do
|
|
begin
|
|
if bVertical then
|
|
bFirstHalf := (iY < iCurrentPosition)
|
|
else
|
|
bFirstHalf := (iX < iCurrentPosition);
|
|
|
|
if bFirstHalf then
|
|
begin
|
|
// Darken LHS/Top
|
|
with ppx^ do
|
|
begin
|
|
r := (ppx^.r * iFadeStep1 + rr1) shr 10;
|
|
g := (ppx^.g * iFadeStep1 + gg1) shr 10;
|
|
b := (ppx^.b * iFadeStep1 + bb1) shr 10;
|
|
end
|
|
end
|
|
else
|
|
begin
|
|
// Darken RHS/Bottom
|
|
with ppx^ do
|
|
begin
|
|
r := (ppx^.r * iFadeStep2 + rr2) shr 10;
|
|
g := (ppx^.g * iFadeStep2 + gg2) shr 10;
|
|
b := (ppx^.b * iFadeStep2 + bb2) shr 10;
|
|
end;
|
|
end;
|
|
|
|
inc(ppx);
|
|
end;
|
|
end;
|
|
end;
|
|
{$endif}
|
|
|
|
|
|
{$ifdef IEINCLUDEEXTRATRANSITIONS}
|
|
procedure TIETransitionEffects.CubeRotateFromRight(Step: integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
W := fCurrentView.Width;
|
|
H := fCurrentView.Height;
|
|
if W >= H then
|
|
X := W - MulDiv(W, Step, 1024)
|
|
else
|
|
begin
|
|
Y := MulDiv(H, Step, 1024);
|
|
X := W - MulDiv(Y, W, H);
|
|
end;
|
|
|
|
SetStretchBltMode(fCurrentView.Canvas.Handle, HALFTONE);
|
|
|
|
// LHS
|
|
StretchBlt(fCurrentView.Canvas.Handle, 0, 0, X, H,
|
|
fSourceShot.Canvas.Handle, 0, 0, W, H,
|
|
SRCCOPY);
|
|
|
|
// RHS
|
|
StretchBlt(fCurrentView.Canvas.Handle, X, 0, W - X, H,
|
|
fTargetShot.Canvas.Handle, 0, 0, W, H,
|
|
SRCCOPY);
|
|
|
|
// Now fade the half shown sides
|
|
if IEGlobalSettings().TransitionsDrawAlternative = False then
|
|
CubeRotateDarkenEdges(False, False, X, Step);
|
|
end;
|
|
{$endif}
|
|
|
|
|
|
{$ifdef IEINCLUDEEXTRATRANSITIONS}
|
|
procedure TIETransitionEffects.CubeRotateFromRight3D(Step: integer);
|
|
const
|
|
Inset_Factor = 4; // 1/4 of height is inset
|
|
var
|
|
W, H, X, Y: Integer;
|
|
iLeftInset, iRightInset: Integer;
|
|
IECurrentView, IESourceShot, IETargetShot: TIEBitmap;
|
|
begin
|
|
W := fCurrentView.Width;
|
|
H := fCurrentView.Height;
|
|
if W >= H then
|
|
X := W - MulDiv(W, Step, 1024)
|
|
else
|
|
begin
|
|
Y := MulDiv(H, Step, 1024);
|
|
X := W - MulDiv(Y, W, H);
|
|
end;
|
|
|
|
iLeftInset := MulDiv(H, Step, 1024 * Inset_Factor);
|
|
iRightInset := MulDiv(H, 1024 - Step, 1024 * Inset_Factor);
|
|
|
|
fCurrentView.Canvas.Brush.Color := fBackground;
|
|
fCurrentView.Canvas.fillRect(Rect(0, 0, fCurrentView.Width, fCurrentView.height));
|
|
|
|
SetStretchBltMode(fCurrentView.Canvas.Handle, HALFTONE);
|
|
|
|
IESourceShot := TIEBitmap.create;
|
|
IECurrentView := TIEBitmap.create;
|
|
IETargetShot := TIEBitmap.create;
|
|
|
|
try
|
|
IESourceShot.EncapsulateTBitmap(fSourceShot, False);
|
|
IECurrentView.EncapsulateTBitmap(fCurrentView, False);
|
|
IETargetShot.EncapsulateTBitmap(fTargetShot, False);
|
|
|
|
// LHS
|
|
IEPerspectiveTransform(IESourceShot,
|
|
IECurrentView,
|
|
0, iLeftInset, // Top-Left
|
|
X, 0, // Top-Right
|
|
X, H, // Bottom-Right
|
|
0, H - iLeftInset, // Bottom-Left
|
|
-1, -1, True);
|
|
|
|
// RHS
|
|
IEPerspectiveTransform(IETargetShot,
|
|
IECurrentView,
|
|
X, 0, // Top-Left
|
|
W, iRightInset, // Top-Right
|
|
W, H - iRightInset, // Bottom-Right
|
|
X, H, // Bottom-Left
|
|
-1, -1, True);
|
|
|
|
finally
|
|
FreeAndNil(IESourceShot);
|
|
FreeAndNil(IECurrentView);
|
|
FreeAndNil(IETargetShot);
|
|
end;
|
|
|
|
// Now fade the half shown sides
|
|
if IEGlobalSettings().TransitionsDrawAlternative = False then
|
|
CubeRotateDarkenEdges(False, False, X, Step);
|
|
end;
|
|
{$endif}
|
|
|
|
|
|
{$ifdef IEINCLUDEEXTRATRANSITIONS}
|
|
procedure TIETransitionEffects.CubeRotateFromLeft(Step: integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
W := fCurrentView.Width;
|
|
H := fCurrentView.Height;
|
|
if W >= H then
|
|
X := MulDiv(W, Step, 1024)
|
|
else
|
|
begin
|
|
Y := MulDiv(H, Step, 1024);
|
|
X := MulDiv(Y, W, H);
|
|
end;
|
|
|
|
SetStretchBltMode(fCurrentView.Canvas.Handle, HALFTONE);
|
|
|
|
// Draw LHS
|
|
StretchBlt(fCurrentView.Canvas.Handle, 0, 0, X, H,
|
|
fTargetShot.Canvas.Handle, 0, 0, W, H,
|
|
SRCCOPY);
|
|
|
|
// Draw RHS
|
|
StretchBlt(fCurrentView.Canvas.Handle, X, 0, W - X, H,
|
|
fSourceShot.Canvas.Handle, 0, 0, W, H,
|
|
SRCCOPY);
|
|
|
|
// Now fade the half shown sides
|
|
if IEGlobalSettings().TransitionsDrawAlternative = False then
|
|
CubeRotateDarkenEdges(False, True, X, Step);
|
|
end;
|
|
{$endif}
|
|
|
|
|
|
{$ifdef IEINCLUDEEXTRATRANSITIONS}
|
|
procedure TIETransitionEffects.CubeRotateFromLeft3D(Step: integer);
|
|
const
|
|
Inset_Factor = 4; // 1/4 of height is inset
|
|
var
|
|
W, H, X, Y: Integer;
|
|
iLeftInset, iRightInset: Integer;
|
|
IECurrentView, IESourceShot, IETargetShot: TIEBitmap;
|
|
begin
|
|
W := fCurrentView.Width;
|
|
H := fCurrentView.Height;
|
|
if W >= H then
|
|
X := MulDiv(W, Step, 1024)
|
|
else
|
|
begin
|
|
Y := MulDiv(H, Step, 1024);
|
|
X := MulDiv(Y, W, H);
|
|
end;
|
|
|
|
iLeftInset := MulDiv(H, 1024 - Step, 1024 * Inset_Factor);
|
|
iRightInset := MulDiv(H, Step, 1024 * Inset_Factor);
|
|
|
|
fCurrentView.Canvas.Brush.Color := fBackground;
|
|
fCurrentView.Canvas.fillRect(Rect(0, 0, fCurrentView.Width, fCurrentView.height));
|
|
|
|
SetStretchBltMode(fCurrentView.Canvas.Handle, HALFTONE);
|
|
|
|
IESourceShot := TIEBitmap.create;
|
|
IECurrentView := TIEBitmap.create;
|
|
IETargetShot := TIEBitmap.create;
|
|
|
|
try
|
|
IESourceShot.EncapsulateTBitmap(fSourceShot, False);
|
|
IECurrentView.EncapsulateTBitmap(fCurrentView, False);
|
|
IETargetShot.EncapsulateTBitmap(fTargetShot, False);
|
|
|
|
// LHS
|
|
IEPerspectiveTransform(IETargetShot,
|
|
IECurrentView,
|
|
0, iLeftInset, // Top-Left
|
|
X, 0, // Top-Right
|
|
X, H, // Bottom-Right
|
|
0, H - iLeftInset, // Bottom-Left
|
|
-1, -1, True);
|
|
|
|
// RHS
|
|
IEPerspectiveTransform(IESourceShot,
|
|
IECurrentView,
|
|
X, 0, // Top-Left
|
|
W, iRightInset, // Top-Right
|
|
W, H - iRightInset, // Bottom-Right
|
|
X, H, // Bottom-Left
|
|
-1, -1, True);
|
|
|
|
finally
|
|
FreeAndNil(IESourceShot);
|
|
FreeAndNil(IECurrentView);
|
|
FreeAndNil(IETargetShot);
|
|
end;
|
|
|
|
// Now fade the half shown sides
|
|
if IEGlobalSettings().TransitionsDrawAlternative = False then
|
|
CubeRotateDarkenEdges(False, True, X, Step);
|
|
end;
|
|
{$endif}
|
|
|
|
|
|
{$ifdef IEINCLUDEEXTRATRANSITIONS}
|
|
procedure TIETransitionEffects.CubeRotateFromBottom(Step: integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
W := fCurrentView.Width;
|
|
H := fCurrentView.Height;
|
|
|
|
if W >= H then
|
|
begin
|
|
X := MulDiv(W, Step, 1024);
|
|
Y := H - MulDiv(X, H, W);
|
|
end
|
|
else
|
|
begin
|
|
Y := H - MulDiv(H, Step, 1024);
|
|
end;
|
|
|
|
SetStretchBltMode(fCurrentView.Canvas.Handle, HALFTONE);
|
|
|
|
// Draw Top
|
|
StretchBlt(fCurrentView.Canvas.Handle, 0, 0, W, Y,
|
|
fSourceShot.Canvas.Handle, 0, 0, W, H,
|
|
SRCCOPY);
|
|
|
|
// Draw Bottom
|
|
StretchBlt(fCurrentView.Canvas.Handle, 0, Y, W, H - Y,
|
|
fTargetShot.Canvas.Handle, 0, 0, W, H,
|
|
SRCCOPY);
|
|
|
|
|
|
// Now fade the half shown sides
|
|
if IEGlobalSettings().TransitionsDrawAlternative = False then
|
|
CubeRotateDarkenEdges(True, False, Y, Step);
|
|
end;
|
|
{$endif}
|
|
|
|
|
|
{$ifdef IEINCLUDEEXTRATRANSITIONS}
|
|
procedure TIETransitionEffects.CubeRotateFromBottom3D(Step: integer);
|
|
const
|
|
Inset_Factor = 4; // 1/4 of height is inset
|
|
var
|
|
W, H, X, Y: Integer;
|
|
iTopInset, iBottomInset: Integer;
|
|
IECurrentView, IESourceShot, IETargetShot: TIEBitmap;
|
|
begin
|
|
W := fCurrentView.Width;
|
|
H := fCurrentView.Height;
|
|
if W >= H then
|
|
begin
|
|
X := MulDiv(W, Step, 1024);
|
|
Y := H - MulDiv(X, H, W);
|
|
end
|
|
else
|
|
begin
|
|
Y := H - MulDiv(H, Step, 1024);
|
|
end;
|
|
|
|
iTopInset := MulDiv(W, Step, 1024 * Inset_Factor);
|
|
iBottomInset := MulDiv(W, 1024 - Step, 1024 * Inset_Factor);
|
|
|
|
fCurrentView.Canvas.Brush.Color := fBackground;
|
|
fCurrentView.Canvas.fillRect(Rect(0, 0, fCurrentView.Width, fCurrentView.height));
|
|
|
|
SetStretchBltMode(fCurrentView.Canvas.Handle, HALFTONE);
|
|
|
|
IESourceShot := TIEBitmap.create;
|
|
IECurrentView := TIEBitmap.create;
|
|
IETargetShot := TIEBitmap.create;
|
|
|
|
try
|
|
IESourceShot.EncapsulateTBitmap(fSourceShot, False);
|
|
IECurrentView.EncapsulateTBitmap(fCurrentView, False);
|
|
IETargetShot.EncapsulateTBitmap(fTargetShot, False);
|
|
|
|
// Top
|
|
IEPerspectiveTransform(IESourceShot,
|
|
IECurrentView,
|
|
iTopInset, 0, // Top-Left
|
|
W - iTopInset, 0, // Top-Right
|
|
W, Y, // Bottom-Right
|
|
0, Y, // Bottom-Left
|
|
-1, -1, True);
|
|
|
|
// Bottom
|
|
IEPerspectiveTransform(IETargetShot,
|
|
IECurrentView,
|
|
0, Y, // Top-Left
|
|
W, Y, // Top-Right
|
|
W - iBottomInset, H, // Bottom-Right
|
|
iBottomInset, H, // Bottom-Left
|
|
-1, -1, True);
|
|
|
|
finally
|
|
FreeAndNil(IESourceShot);
|
|
FreeAndNil(IECurrentView);
|
|
FreeAndNil(IETargetShot);
|
|
end;
|
|
|
|
// Now fade the half shown sides
|
|
if IEGlobalSettings().TransitionsDrawAlternative = False then
|
|
CubeRotateDarkenEdges(True, False, Y, Step);
|
|
end;
|
|
{$endif}
|
|
|
|
|
|
|
|
{$ifdef IEINCLUDEEXTRATRANSITIONS}
|
|
procedure TIETransitionEffects.CubeRotateFromTop(Step: integer);
|
|
var
|
|
W, H, X, Y: Integer;
|
|
begin
|
|
W := fCurrentView.Width;
|
|
H := fCurrentView.Height;
|
|
|
|
if W >= H then
|
|
begin
|
|
X := MulDiv(W, Step, 1024);
|
|
Y := MulDiv(X, H, W);
|
|
end
|
|
else
|
|
begin
|
|
Y := MulDiv(H, Step, 1024);
|
|
end;
|
|
|
|
SetStretchBltMode(fCurrentView.Canvas.Handle, HALFTONE);
|
|
|
|
// Draw Top
|
|
StretchBlt(fCurrentView.Canvas.Handle, 0, 0, W, Y,
|
|
fTargetShot.Canvas.Handle, 0, 0, W, H,
|
|
SRCCOPY);
|
|
|
|
// Draw Bottom
|
|
StretchBlt(fCurrentView.Canvas.Handle, 0, Y, W, H - Y,
|
|
fSourceShot.Canvas.Handle, 0, 0, W, H,
|
|
SRCCOPY);
|
|
|
|
|
|
// Now fade the half shown sides
|
|
if IEGlobalSettings().TransitionsDrawAlternative = False then
|
|
CubeRotateDarkenEdges(True, True, Y, Step);
|
|
end;
|
|
{$endif}
|
|
|
|
|
|
{$ifdef IEINCLUDEEXTRATRANSITIONS}
|
|
procedure TIETransitionEffects.CubeRotateFromTop3D(Step: integer);
|
|
const
|
|
Inset_Factor = 4; // 1/4 of height is inset
|
|
var
|
|
W, H, X, Y: Integer;
|
|
iTopInset, iBottomInset: Integer;
|
|
IECurrentView, IESourceShot, IETargetShot: TIEBitmap;
|
|
begin
|
|
W := fCurrentView.Width;
|
|
H := fCurrentView.Height;
|
|
if W >= H then
|
|
begin
|
|
X := MulDiv(W, Step, 1024);
|
|
Y := MulDiv(X, H, W);
|
|
end
|
|
else
|
|
begin
|
|
Y := MulDiv(H, Step, 1024);
|
|
end;
|
|
|
|
iTopInset := MulDiv(W, 1024 - Step, 1024 * Inset_Factor);
|
|
iBottomInset := MulDiv(W, Step, 1024 * Inset_Factor);
|
|
|
|
fCurrentView.Canvas.Brush.Color := fBackground;
|
|
fCurrentView.Canvas.fillRect(Rect(0, 0, fCurrentView.Width, fCurrentView.height));
|
|
|
|
SetStretchBltMode(fCurrentView.Canvas.Handle, HALFTONE);
|
|
|
|
IESourceShot := TIEBitmap.create;
|
|
IECurrentView := TIEBitmap.create;
|
|
IETargetShot := TIEBitmap.create;
|
|
|
|
try
|
|
IESourceShot.EncapsulateTBitmap(fSourceShot, False);
|
|
IECurrentView.EncapsulateTBitmap(fCurrentView, False);
|
|
IETargetShot.EncapsulateTBitmap(fTargetShot, False);
|
|
|
|
// Top
|
|
IEPerspectiveTransform(IETargetShot,
|
|
IECurrentView,
|
|
iTopInset, 0, // Top-Left
|
|
W - iTopInset, 0, // Top-Right
|
|
W, Y, // Bottom-Right
|
|
0, Y, // Bottom-Left
|
|
-1, -1, True);
|
|
|
|
// Bottom
|
|
IEPerspectiveTransform(IESourceShot,
|
|
IECurrentView,
|
|
0, Y, // Top-Left
|
|
W, Y, // Top-Right
|
|
W - iBottomInset, H, // Bottom-Right
|
|
iBottomInset, H, // Bottom-Left
|
|
-1, -1, True);
|
|
|
|
finally
|
|
FreeAndNil(IESourceShot);
|
|
FreeAndNil(IECurrentView);
|
|
FreeAndNil(IETargetShot);
|
|
end;
|
|
|
|
// Now fade the half shown sides
|
|
if IEGlobalSettings().TransitionsDrawAlternative = False then
|
|
CubeRotateDarkenEdges(True, True, Y, Step);
|
|
end;
|
|
|
|
{$endif}
|
|
|
|
// Convert a TIEPanZoomType effect type to a starting and ending position
|
|
procedure GetPanZoomEffectStartEndRects(iIEClientWidth, iIEClientHeight : Integer; // ClientWidth and ClientHeight of the display window
|
|
iBitmapWidth, iBitmapHeight : Integer; // Width and Height of the Bitmap
|
|
PanZoomEffect : TIEPanZoomType; // Effect to use
|
|
iMaxZoom : Integer; // For zoom effects, how much should we zoom in/out, e.g. 20 for 20%
|
|
out StartRect: TRect; // Will be filled with the first display position
|
|
out EndRect: TRect); // Will be filled with the last display position
|
|
|
|
function RectWidth(ARect: Trect): Integer;
|
|
begin
|
|
result := ARect.right - ARect.left;
|
|
end;
|
|
|
|
function RectHeight(ARect: Trect): Integer;
|
|
begin
|
|
result := ARect.bottom - ARect.top;
|
|
end;
|
|
|
|
function AreSimilar(val1, val2 : Double): boolean;
|
|
begin
|
|
result := abs(val1 - val2) <= 0.01;
|
|
end;
|
|
|
|
const
|
|
_ipsTopLeft = 0;
|
|
_ipsTop = 1;
|
|
_ipsTopRight = 2;
|
|
_ipsLeft = 3;
|
|
_ipsCenter = 4;
|
|
_ipsRight = 5;
|
|
_ipsBottomLeft = 6;
|
|
_ipsBottom = 7;
|
|
_ipsBottomRight = 8;
|
|
|
|
Buffer_Zone = 2; // avoid display of a 1 pixel border
|
|
Default_Zoom_Level = 20;
|
|
var
|
|
VisibleImageRect : TRect;
|
|
BigPic : TPoint; // A portion of the image at full width or height of the image
|
|
bCroppedToAspectRatio : Boolean; // Image has same aspect ratio as display window
|
|
bIsPortraitImage : boolean; // Original image portrait or landscape? Use to determine the best way to display some effects
|
|
|
|
function _GetRect(iPos : Integer; iWidth, iHeight : Integer): TRect;
|
|
var
|
|
iTop: Integer;
|
|
iLeft: Integer;
|
|
begin
|
|
|
|
// HORIZONTAL POS
|
|
case iPos of
|
|
|
|
_ipsTopLeft,
|
|
_ipsLeft,
|
|
_ipsBottomLeft : iLeft := VisibleImageRect.Left;
|
|
|
|
_ipsTopRight,
|
|
_ipsRight,
|
|
_ipsBottomRight : iLeft := VisibleImageRect.Left + RectWidth(VisibleImageRect) - iWidth;
|
|
|
|
{_ipsTop,
|
|
_ipsCenter,
|
|
_ipsBottom }
|
|
else iLeft := VisibleImageRect.Left + (RectWidth(VisibleImageRect) - iWidth) div 2;
|
|
|
|
end;
|
|
|
|
// VERTICAL POS
|
|
case iPos of
|
|
|
|
_ipsTopLeft,
|
|
_ipsTop,
|
|
_ipsTopRight : iTop := VisibleImageRect.Top;
|
|
|
|
_ipsBottomLeft,
|
|
_ipsBottom,
|
|
_ipsBottomRight : iTop := VisibleImageRect.Top + RectHeight(VisibleImageRect) - iHeight;
|
|
|
|
{_ipsLeft,
|
|
_ipsCenter,
|
|
_ipsRight }
|
|
else iTop := VisibleImageRect.Top + (RectHeight(VisibleImageRect) - iHeight) div 2;
|
|
|
|
end;
|
|
|
|
result := Rect(iLeft, iTop, iLeft + iWidth, iTop + iHeight);
|
|
end;
|
|
|
|
function _GetSmallRect(iPos: Integer): Trect;
|
|
begin
|
|
result := _GetRect(iPos,
|
|
MulDiv(BigPic.X, 100 - iMaxZoom, 100),
|
|
MulDiv(BigPic.Y, 100 - iMaxZoom, 100));
|
|
end;
|
|
|
|
function _GetBigRect(iPos: Integer): Trect;
|
|
begin
|
|
result := _GetRect(iPos, BigPic.X, BigPic.Y);
|
|
end;
|
|
|
|
// The rect to display a full image
|
|
function _GetFullImageRect: Trect;
|
|
begin
|
|
result := _GetRect(_ipsCenter, RectWidth(VisibleImageRect), RectHeight(VisibleImageRect));
|
|
end;
|
|
|
|
function _GetFullImageSmallRect(iPos: Integer): Trect;
|
|
begin
|
|
result := _GetRect(iPos,
|
|
MulDiv(RectWidth(VisibleImageRect), 100 - iMaxZoom, 100),
|
|
MulDiv(RectHeight(VisibleImageRect), 100 - iMaxZoom, 100));
|
|
end;
|
|
|
|
begin
|
|
VisibleImageRect := Rect(Buffer_Zone, Buffer_Zone, iBitmapWidth - 2 * Buffer_Zone, iBitmapHeight - 2 * Buffer_Zone);
|
|
bCroppedToAspectRatio := AreSimilar(RectWidth(VisibleImageRect) / RectHeight(VisibleImageRect), iIEClientwidth / iIEClientheight); // Image is cropped or matches the output aspect ratio
|
|
bIsPortraitImage := iBitmapHeight > iBitmapWidth;
|
|
if iMaxZoom < 2 then
|
|
iMaxZoom := Default_Zoom_Level;
|
|
|
|
if (RectHeight(VisibleImageRect) / iIEClientheight) > (RectWidth(VisibleImageRect) / iIEClientwidth) then
|
|
begin
|
|
// Vertical Slide - PIC IS AS WIDE AS THE IMAGE
|
|
BigPic.X := RectWidth(VisibleImageRect);
|
|
BigPic.Y := round(BigPic.X * iIEClientHeight/iIEClientWidth);
|
|
end
|
|
ELSE
|
|
begin
|
|
// Horizontal Slide - PIC IS AS HIGH AS THE IMAGE
|
|
BigPic.Y := RectHeight(VisibleImageRect);
|
|
BigPic.X := round(BigPic.Y * iIEClientWidth/iIEClientHeight);
|
|
end;
|
|
|
|
case PanZoomEffect of
|
|
|
|
iepzPanTopLeftToBottomRight, iepzPanBottomRightToTopLeft:
|
|
begin
|
|
StartRect := _GetSmallRect(_ipsTopLeft);
|
|
EndRect := _GetSmallRect(_ipsBottomRight);
|
|
end;
|
|
|
|
iepzPanTopRightToBottomLeft, iepzPanBottomLeftToTopRight:
|
|
begin
|
|
StartRect := _GetSmallRect(_ipsTopRight);
|
|
EndRect := _GetSmallRect(_ipsBottomLeft);
|
|
end;
|
|
|
|
iepzPanTopLeftToCenter, iepzPanCenterToTopLeft:
|
|
begin
|
|
StartRect := _GetSmallRect(_ipsTopLeft);
|
|
EndRect := _GetSmallRect(_ipsCenter);
|
|
end;
|
|
|
|
iepzPanTopRightToCenter, iepzPanCenterToTopRight:
|
|
begin
|
|
StartRect := _GetSmallRect(_ipsTopRight);
|
|
EndRect := _GetSmallRect(_ipsCenter);
|
|
end;
|
|
|
|
iepzPanBottomLeftToCenter, iepzPanCenterToBottomLeft:
|
|
begin
|
|
StartRect := _GetSmallRect(_ipsBottomLeft);
|
|
EndRect := _GetSmallRect(_ipsCenter);
|
|
end;
|
|
|
|
iepzPanBottomRightToCenter, iepzPanCenterToBottomRight:
|
|
begin
|
|
StartRect := _GetSmallRect(_ipsBottomRight);
|
|
EndRect := _GetSmallRect(_ipsCenter);
|
|
end;
|
|
|
|
iepzPanLeftToRightOrTopToBottom, iepzPanRightToLeftOrBottomToTop:
|
|
begin
|
|
// Output image has same dimensions as the display area?
|
|
if bCroppedToAspectRatio and bIsPortraitImage then
|
|
// Zoomed vertical Slide
|
|
begin
|
|
StartRect := _GetSmallRect(_ipsTop);
|
|
EndRect := _GetSmallRect(_ipsBottom);
|
|
end
|
|
ELSE
|
|
if bCroppedToAspectRatio and (bIsPortraitImage = false) then
|
|
// Zoomed horizontal Slide
|
|
begin
|
|
StartRect := _GetSmallRect(_ipsLeft);
|
|
EndRect := _GetSmallRect(_ipsRight);
|
|
end
|
|
ELSE
|
|
if (RectHeight(VisibleImageRect) / iIEClientheight) > (RectWidth(VisibleImageRect) / iIEClientwidth) then
|
|
// Vertical Slide
|
|
begin
|
|
StartRect := _GetBigRect(_ipsTop);
|
|
EndRect := _GetBigRect(_ipsBottom);
|
|
end
|
|
ELSE
|
|
// Horizontal Slide
|
|
begin
|
|
StartRect := _GetBigRect(_ipsLeft);
|
|
EndRect := _GetBigRect(_ipsRight);
|
|
end;
|
|
end;
|
|
|
|
iepzPanLeftToCenterOrTopToCenter, iepzPanCenterToLeftToOrCenterToTop:
|
|
begin
|
|
// Output image has same dimensions as the display area?
|
|
if bCroppedToAspectRatio and bIsPortraitImage then
|
|
// Zoomed vertical Slide
|
|
begin
|
|
StartRect := _GetSmallRect(_ipsTop);
|
|
EndRect := _GetSmallRect(_ipsCenter);
|
|
end
|
|
ELSE
|
|
if bCroppedToAspectRatio and (bIsPortraitImage = false) then
|
|
// Zoomed horizontal Slide
|
|
begin
|
|
StartRect := _GetSmallRect(_ipsLeft);
|
|
EndRect := _GetSmallRect(_ipsCenter);
|
|
end
|
|
ELSE
|
|
if (RectHeight(VisibleImageRect) / iIEClientheight) > (RectWidth(VisibleImageRect) / iIEClientwidth) then
|
|
// Vertical Slide
|
|
begin
|
|
StartRect := _GetBigRect(_ipsTop);
|
|
EndRect := _GetBigRect(_ipsCenter);
|
|
end
|
|
ELSE
|
|
// Horizontal Slide
|
|
begin
|
|
StartRect := _GetBigRect(_ipsLeft);
|
|
EndRect := _GetBigRect(_ipsCenter);
|
|
end;
|
|
end;
|
|
|
|
iepzPanRightToCenterOrBottomToCenter, iepzPanCenterToRightOrCenterToBottom:
|
|
begin
|
|
// Output image has same dimensions as the display area?
|
|
if bCroppedToAspectRatio and bIsPortraitImage then
|
|
// Zoomed vertical Slide
|
|
begin
|
|
StartRect := _GetSmallRect(_ipsBottom);
|
|
EndRect := _GetSmallRect(_ipsCenter);
|
|
end
|
|
ELSE
|
|
if bCroppedToAspectRatio and (bIsPortraitImage = false) then
|
|
// Zoomed horizontal Slide
|
|
begin
|
|
StartRect := _GetSmallRect(_ipsRight);
|
|
EndRect := _GetSmallRect(_ipsCenter);
|
|
end
|
|
ELSE
|
|
if (RectHeight(VisibleImageRect) / iIEClientheight) > (RectWidth(VisibleImageRect) / iIEClientwidth) then
|
|
// Vertical Slide
|
|
begin
|
|
StartRect := _GetBigRect(_ipsBottom);
|
|
EndRect := _GetBigRect(_ipsCenter);
|
|
end
|
|
ELSE
|
|
// Horizontal Slide
|
|
begin
|
|
StartRect := _GetBigRect(_ipsRight);
|
|
EndRect := _GetBigRect(_ipsCenter);
|
|
end;
|
|
end;
|
|
|
|
iepzZoomInToTopLeft, iepzZoomOutFromTopLeft:
|
|
begin
|
|
StartRect := _GetBigRect(_ipsTopLeft);
|
|
EndRect := _GetSmallRect(_ipsTopLeft);
|
|
end;
|
|
|
|
iepzZoomInToTopRight, iepzZoomOutFromTopRight:
|
|
begin
|
|
StartRect := _GetBigRect(_ipsTopRight);
|
|
EndRect := _GetSmallRect(_ipsTopRight);
|
|
end;
|
|
|
|
iepzZoomInToBottomLeft, iepzZoomOutFromBottomLeft:
|
|
begin
|
|
StartRect := _GetBigRect(_ipsBottomLeft);
|
|
EndRect := _GetSmallRect(_ipsBottomLeft);
|
|
end;
|
|
|
|
iepzZoomInToBottomRight, iepzZoomOutFromBottomRight:
|
|
begin
|
|
StartRect := _GetBigRect(_ipsBottomRight);
|
|
EndRect := _GetSmallRect(_ipsBottomRight);
|
|
end;
|
|
|
|
iepzZoomInToCenter, iepzZoomOutFromCenter:
|
|
begin
|
|
StartRect := _GetBigRect(_ipsCenter);
|
|
EndRect := _GetSmallRect(_ipsCenter);
|
|
end;
|
|
|
|
iepzFullZoomInToTopLeft, iepzFullZoomOutFromTopLeft:
|
|
begin
|
|
StartRect := _GetFullImageRect;
|
|
EndRect := _GetFullImageSmallRect(_ipsTopLeft);
|
|
end;
|
|
|
|
iepzFullZoomInToTop, iepzFullZoomOutFromTop:
|
|
begin
|
|
StartRect := _GetFullImageRect;
|
|
EndRect := _GetFullImageSmallRect(_ipsTop);
|
|
end;
|
|
|
|
iepzFullZoomInToTopRight, iepzFullZoomOutFromTopRight:
|
|
begin
|
|
StartRect := _GetFullImageRect;
|
|
EndRect := _GetFullImageSmallRect(_ipsTopRight);
|
|
end;
|
|
|
|
|
|
iepzFullZoomInToLeft, iepzFullZoomOutFromLeft:
|
|
begin
|
|
StartRect := _GetFullImageRect;
|
|
EndRect := _GetFullImageSmallRect(_ipsLeft);
|
|
end;
|
|
|
|
iepzFullZoomInToCenter, iepzFullZoomOutFromCenter:
|
|
begin
|
|
StartRect := _GetFullImageRect;
|
|
EndRect := _GetFullImageSmallRect(_ipsCenter);
|
|
end;
|
|
|
|
iepzFullZoomInToRight, iepzFullZoomOutFromRight:
|
|
begin
|
|
StartRect := _GetFullImageRect;
|
|
EndRect := _GetFullImageSmallRect(_ipsRight);
|
|
end;
|
|
|
|
|
|
iepzFullZoomInToBottomLeft, iepzFullZoomOutFromBottomLeft:
|
|
begin
|
|
StartRect := _GetFullImageRect;
|
|
EndRect := _GetFullImageSmallRect(_ipsBottomLeft);
|
|
end;
|
|
|
|
iepzFullZoomInToBottom, iepzFullZoomOutFromBottom:
|
|
begin
|
|
StartRect := _GetFullImageRect;
|
|
EndRect := _GetFullImageSmallRect(_ipsBottom);
|
|
end;
|
|
|
|
iepzFullZoomInToBottomRight, iepzFullZoomOutFromBottomRight:
|
|
begin
|
|
StartRect := _GetFullImageRect;
|
|
EndRect := _GetFullImageSmallRect(_ipsBottomRight);
|
|
end;
|
|
|
|
end;
|
|
|
|
// REVERSE THE RECTS?
|
|
if PanZoomEffect in [iepzPanBottomRightToTopLeft,
|
|
iepzPanBottomLeftToTopRight,
|
|
iepzPanCenterToTopLeft,
|
|
iepzPanCenterToTopRight,
|
|
iepzPanCenterToBottomLeft,
|
|
iepzPanCenterToBottomRight,
|
|
iepzPanRightToLeftOrBottomToTop,
|
|
iepzPanCenterToLeftToOrCenterToTop,
|
|
iepzPanCenterToRightOrCenterToBottom,
|
|
iepzZoomOutFromTopLeft,
|
|
iepzZoomOutFromTopRight,
|
|
iepzZoomOutFromBottomLeft,
|
|
iepzZoomOutFromBottomRight,
|
|
iepzZoomOutFromCenter,
|
|
iepzFullZoomOutFromTopLeft,
|
|
iepzFullZoomOutFromTop,
|
|
iepzFullZoomOutFromTopRight,
|
|
iepzFullZoomOutFromLeft,
|
|
iepzFullZoomOutFromCenter,
|
|
iepzFullZoomOutFromRight,
|
|
iepzFullZoomOutFromBottomLeft,
|
|
iepzFullZoomOutFromBottom,
|
|
iepzFullZoomOutFromBottomRight] then
|
|
IESwap( StartRect, EndRect );
|
|
end;
|
|
|
|
|
|
// end of TIETransitionEffects
|
|
/////////////////////////////////////////////////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
end.
|
|
|
|
|
|
|
|
|