blob: 93e218bc7ebcf7345f44c3afcf9da8d477ce95bd [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.draw2d;
/**
* Animates some aspect of a figure. Each animator will capture some of the
* effects of validation of the figures.
* <P>
* Animators must be hooked to figure in special ways. Refer to each
* implementation for the specific requirements. Animators are generally
* stateless, which allows them to be shared and prevents them from leaking
* memory.
*
* @since 3.2
*/
public abstract class Animator {
Animator() {
}
/**
* Captures the final state of the given figure. This method is called once
* after the update manager has completed validation of all invalid figures.
*
* @param figure
* the container
* @since 3.2
*/
public void capture(IFigure figure) {
recordFinalState(figure);
}
/**
* Returns an object encapsulating the current state of the figure. This
* method is called to capture both the initial and final states.
*
* @param figure
* the figure
* @return the current state
* @since 3.2
*/
protected abstract Object getCurrentState(IFigure figure);
/**
* Plays back the animation for the given figure and returns
* <code>true</code> if successful. This method does nothing by default and
* return <code>false</code>.
*
* @param figure
* the figure being animated
* @return <code>true</code> if playback was successful
* @since 3.2
*/
protected boolean playback(IFigure figure) {
return false;
}
/**
* Sent as playback is starting for a given figure.
*
* @param figure
* the figure
* @since 3.2
*/
public void playbackStarting(IFigure figure) {
}
/**
* Records the final state information for a figure.
*
* @param figure
* the figure
* @since 3.2
*/
protected void recordFinalState(IFigure figure) {
Animation.putFinalState(this, figure, getCurrentState(figure));
}
/**
* Records initial state information for the given figure.
*
* @param figure
* the container.
* @since 3.2
*/
protected void recordInitialState(IFigure figure) {
Animation.putInitialState(this, figure, getCurrentState(figure));
}
/**
* Sets up the animator for the given figure to be animated. This method is
* called exactly once time prior to any layouts happening. The animator can
* capture the figure's current state, and set any animation-time settings
* for the figure. Changes made to the figure should be reverted in
* {@link #tearDown(IFigure)}.
*
* @param figure
* the animated figure
* @since 3.2
*/
public void init(IFigure figure) {
recordInitialState(figure);
}
/**
* Reverts any temporary changes made to the figure during animation. This
* method is called exactly once after all animation has been completed.
* Subclasses should extend this method to revert any changes.
*
* @param figure
* the animated figure
* @since 3.2
* @see #init(IFigure)
*/
public void tearDown(IFigure figure) {
}
}