/* * @(#)ScaleTransition2D.java * * $Date: 2014-06-06 20:04:49 +0200 (P, 06 jún. 2014) $ * * Copyright (c) 2011 by Jeremy Wood. * All rights reserved. * * The copyright of this software is owned by Jeremy Wood. * You may not use, copy or modify this software, except in * accordance with the license agreement you entered into with * Jeremy Wood. For details see accompanying license terms. * * This software is probably, but not necessarily, discussed here: * https://javagraphics.java.net/ * * That site should also contain the most recent official version * of this software. (See the SVN repository for more details.) */ package com.bric.image.transition; import java.awt.Dimension; import java.awt.geom.AffineTransform; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import com.bric.geom.RectangularTransform; /** This zooms one frame in/out from the center. Here are playback samples: * <p><table summary="Sample Animations of ScaleTransition2D" cellspacing="50" border="0"><tr> * <td align="center"> * <img src="https://javagraphics.java.net/resources/transition/ScaleTransition2D/ScaleIn.gif" alt="Scale In"> * <p>Scale In * </td> * <td align="center"> * <img src="https://javagraphics.java.net/resources/transition/ScaleTransition2D/ScaleOut.gif" alt="Scale Out"> * <p>Scale Out * </td> * </tr></table> * */ public class ScaleTransition2D extends Transition2D { /** This public static method is used by the * {@link com.bric.image.transition.Transition2DDemoHelper} * class to create sample animations of this transition. * @return the transitions that should be used to demonstrate this * transition. */ public static Transition[] getDemoTransitions() { return new Transition[] { new ScaleTransition2D(IN), new ScaleTransition2D(OUT) }; } int type; /** Creates a new ScaleTransition2D that scales out */ public ScaleTransition2D() { this(OUT); } /** Creates a new ScaleTransition2D * * @param type must be IN or OUT */ public ScaleTransition2D(int type) { if(!(type==IN || type==OUT)) throw new IllegalArgumentException("type must be IN or OUT"); this.type = type; } @Override public Transition2DInstruction[] getInstructions(float progress, Dimension size) { Point2D center = new Point2D.Float(size.width/2f, size.height/2f); AffineTransform transform; if(type==OUT) { progress = 1-progress; } float w = size.width*progress; float h = size.height*progress; transform = RectangularTransform.create( new Rectangle2D.Float(0,0,size.width,size.height), new Rectangle2D.Double(center.getX()-w/2,center.getY()-h/2,w,h)); return new ImageInstruction[] { new ImageInstruction(type==IN), new ImageInstruction(type!=IN,transform,null) }; } @Override public String toString() { if(type==IN) { return "Scale In"; } else { return "Scale Out"; } } }