Package com.sencha.gxt.chart.client.draw

Source Code of com.sencha.gxt.chart.client.draw.DrawFx

/**
* Sencha GXT 3.0.0 - Sencha for GWT
* Copyright(c) 2007-2012, Sencha, Inc.
* licensing@sencha.com
*
* http://www.sencha.com/products/gxt/license/
*/
package com.sencha.gxt.chart.client.draw;

import java.util.List;

import com.sencha.gxt.chart.client.draw.path.CurveTo;
import com.sencha.gxt.chart.client.draw.path.MoveTo;
import com.sencha.gxt.chart.client.draw.path.PathCommand;
import com.sencha.gxt.chart.client.draw.path.PathSprite;
import com.sencha.gxt.chart.client.draw.sprite.RectangleSprite;
import com.sencha.gxt.chart.client.draw.sprite.Sprite;
import com.sencha.gxt.core.client.util.PreciseRectangle;
import com.sencha.gxt.fx.client.animation.Animator;

/**
* Class that provides utility functions for creating sprite animations.
*/
public class DrawFx {

  /**
   * Returns an {@link Animator} that will animate the given {@link PathSprite}
   * to the given list of {@link PathCommand}s.
   *
   * @param origin the path sprite
   * @param commands the target path commands
   * @return the animator
   */
  public static Animator createCommandsAnimator(final PathSprite origin, List<PathCommand> commands) {
    List<PathSprite> sourceDelta = PathSprite.findDelta(origin, commands);
    final PathSprite source = sourceDelta.get(0);
    final PathSprite delta = sourceDelta.get(1);
    return new Animator() {
      @Override
      protected void onUpdate(double progress) {
        PathSprite start = new PathSprite(source);
        for (int i = 0; i < start.size(); i++) {
          if (start.getCommand(i) instanceof MoveTo) {
            MoveTo move1 = (MoveTo) start.getCommand(i);
            MoveTo move2 = (MoveTo) delta.getCommand(i);
            move1.setX(move1.getX() + (move2.getX() * progress));
            move1.setY(move1.getY() + (move2.getY() * progress));
          } else if (start.getCommand(i) instanceof CurveTo) {
            CurveTo curve1 = (CurveTo) start.getCommand(i);
            CurveTo curve2 = (CurveTo) delta.getCommand(i);
            curve1.setX(curve1.getX() + (curve2.getX() * progress));
            curve1.setY(curve1.getY() + (curve2.getY() * progress));
            curve1.setX1(curve1.getX1() + (curve2.getX1() * progress));
            curve1.setY1(curve1.getY1() + (curve2.getY1() * progress));
            curve1.setX2(curve1.getX2() + (curve2.getX2() * progress));
            curve1.setY2(curve1.getY2() + (curve2.getY2() * progress));
          }
        }
        origin.setCommands(start.getCommands());
        origin.redraw();
      }
    };
  }

  /**
   * Returns an {@link Animator} that will animate the given {@link Sprite} to
   * the given degrees of rotation.
   *
   * @param sprite the sprite to be animated
   * @param degrees the target degrees of rotation
   * @return the animator
   */
  public static Animator createDegreesAnimator(final Sprite sprite, double degrees) {
    final Rotation rot = sprite.getRotation();
    final double deltaDegrees = degrees - rot.getDegrees();
    return new Animator() {
      @Override
      protected void onUpdate(double progress) {
        sprite.setRotation(rot.getDegrees() + (deltaDegrees * progress));
        sprite.redraw();
      }
    };
  }

  /**
   * Returns an {@link Animator} that will animate the given {@link Sprite} to
   * the given opacity.
   *
   * @param sprite the sprite to be animated
   * @param opacity the target opacity
   * @return the animator
   */
  public static Animator createOpacityAnimator(final Sprite sprite, double opacity) {
    final double origin;
    if (Double.isNaN(sprite.getOpacity())) {
      origin = 1;
    } else {
      origin = sprite.getOpacity();
    }
    final double delta = opacity - origin;
    return new Animator() {
      @Override
      protected void onUpdate(double progress) {
        sprite.setOpacity(origin + (delta * progress));
        sprite.redraw();
      }
    };
  }

  /**
   * Returns an {@link Animator} that will animate the given
   * {@link RectangleSprite} to the given {@link PreciseRectangle} attributes.
   *
   * @param sprite the rectangle sprite
   * @param rectangle the target rectangle attributes
   * @return the animator used to run the animation
   */
  public static Animator createRectangleAnimator(final RectangleSprite sprite, PreciseRectangle rectangle) {
    final PreciseRectangle origin = new PreciseRectangle(sprite.getX(), sprite.getY(), sprite.getWidth(),
        sprite.getHeight());
    final PreciseRectangle delta = new PreciseRectangle(rectangle.getX() - sprite.getX(), rectangle.getY()
        - sprite.getY(), rectangle.getWidth() - sprite.getWidth(), rectangle.getHeight() - sprite.getHeight());
    return new Animator() {
      @Override
      protected void onUpdate(double progress) {
        sprite.setX(origin.getX() + delta.getX() * progress);
        sprite.setY(origin.getY() + delta.getY() * progress);
        sprite.setWidth(origin.getWidth() + delta.getWidth() * progress);
        sprite.setHeight(origin.getHeight() + delta.getHeight() * progress);
        sprite.redraw();
      }
    };
  }

  /**
   * Returns an {@link Animator} that will animate the given {@link Sprite} to
   * the given rotation.
   *
   * @param sprite the sprite to be animated
   * @param x the target rotation on the x-axis
   * @param y the target rotation on the y-axis
   * @param degrees the degrees of rotation
   * @return the animator
   */
  public static Animator createRotationAnimator(final Sprite sprite, double x, double y, double degrees) {
    final Rotation rot = sprite.getRotation();
    final double deltaX = x - rot.getX();
    final double deltaY = y - rot.getY();
    final double deltaDegrees = degrees - rot.getDegrees();
    return new Animator() {
      @Override
      protected void onUpdate(double progress) {
        sprite.setRotation(new Rotation(rot.getX() + (deltaX * progress), rot.getY() + (deltaY * progress),
            rot.getDegrees() + (deltaDegrees * progress)));
        sprite.redraw();
      }
    };
  }

  /**
   * Returns an {@link Animator} that will animate the given {@link Sprite} to
   * the given {@link Scaling}.
   *
   * @param sprite the sprite to be animated
   * @param scaling the target scaling
   * @return the animator
   */
  public static Animator createScalingAnimator(final Sprite sprite, Scaling scaling) {
    if (sprite.getScaling() == null) {
      sprite.setScaling(1);
    }
    final Scaling origin = sprite.getScaling();
    final Scaling delta = new Scaling(scaling.getX() - origin.getX(), scaling.getY() - origin.getY(),
        scaling.getCenterX() - origin.getCenterX(), scaling.getCenterY() - origin.getCenterY());
    return new Animator() {
      @Override
      protected void onUpdate(double progress) {
        sprite.setScaling(new Scaling(origin.getX() + (delta.getX() * progress), origin.getY()
            + (delta.getY() * progress), origin.getCenterX() + (delta.getCenterX() * progress), origin.getCenterY()
            + (delta.getCenterY() * progress)));
        sprite.redraw();
      }
    };
  }

  /**
   * Returns an {@link Animator} that will animate the given {@link Sprite} to
   * the given stroke width.
   *
   * @param sprite the sprite to be animated
   * @param strokeWidth the target stroke width
   * @return the animator
   */
  public static Animator createStrokeWidthAnimator(final Sprite sprite, double strokeWidth) {
    final double origin;
    if (Double.isNaN(sprite.getStrokeWidth())) {
      origin = 0;
    } else {
      origin = sprite.getStrokeWidth();
    }
    final double deltaWidth = strokeWidth - origin;
    return new Animator() {
      @Override
      protected void onUpdate(double progress) {
        sprite.setStrokeWidth(origin + (deltaWidth * progress));
        sprite.redraw();
      }
    };
  }

  /**
   * Returns an {@link Animator} that will animate the given {@link Sprite} to
   * the given {@link Translation} coordinates.
   *
   * @param sprite the sprite to be animated
   * @param x the target translation x-coordinate
   * @param y the target translation y-coordinate
   * @return the animator
   */
  public static Animator createTranslationAnimator(final Sprite sprite, double x, double y) {
    final Translation trans = sprite.getTranslation();
    final double deltaX = x - trans.getX();
    final double deltaY = y - trans.getY();
    return new Animator() {
      @Override
      protected void onUpdate(double progress) {
        sprite.setTranslation(trans.getX() + (deltaX * progress), trans.getY() + (deltaY * progress));
        sprite.redraw();
      }
    };
  }

}
TOP

Related Classes of com.sencha.gxt.chart.client.draw.DrawFx

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.