Package orxanimeditor.ui.animationviewer

Source Code of orxanimeditor.ui.animationviewer.ContentProvider

package orxanimeditor.ui.animationviewer;

import java.awt.Point;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.SwingUtilities;

import com.sun.org.apache.xml.internal.utils.StopParseException;

import orxanimeditor.data.v1.Frame;

public class ContentProvider {
  FrameSequence sequence;
  FrameDisplay  display;
 
  Timer    timer = new Timer();
  Point    accumulatedOffset = new Point(0, 0);
  int nextFrameIndex;
 
  boolean enabled = false;
 
  public void enable() {
    enabled = true;
    restart();
  }

  public void disable() {
    enabled = false;
    stop();
  }
 
  private void stop() {
    timer.cancel();
    timer = new Timer();   
  }

  public ContentProvider(FrameSequence sequence, FrameDisplay display) {
    this.display = display;
    this.sequence = sequence;
  }
  Frame getCurrentFrame() {
    return null;
  }
 
  private void setupNextFrame() {
    timer.schedule(new TimerTask() { public void run() {
        SwingUtilities.invokeLater(new Runnable() { public void run() {
          if(!enabled) return;
          if(sequence.getFrameCount()==0) return;
          if(nextFrameIndex>=sequence.getFrameCount()-1)
            restart();
          else {
            nextFrameIndex++;
            Frame frame = sequence.getFrame(nextFrameIndex);
            Point offset = frame.getOffset();
            accumulatedOffset.x += offset.x; accumulatedOffset.y += offset.y;
            display.display(frame, accumulatedOffset);
            setupNextFrame();
          }
      }});
    }}, sequence.getFrameDelay(nextFrameIndex));
  }
 
  public void restart() {
    if(!enabled) return;
    timer.cancel();
    timer = new Timer();
    nextFrameIndex = 0;
    accumulatedOffset.x = 0; accumulatedOffset.y = 0;
    if(sequence.getFrameCount()>0) {
      Frame frame = sequence.getFrame(nextFrameIndex);
      accumulatedOffset = frame.getOffset();
      setupNextFrame();
    }
    pushFrame();
  }
 
  public void pushFrame() {
    if(sequence.getFrameCount()>0)
      display.display(sequence.getFrame(nextFrameIndex), accumulatedOffset);
    else
      display.clear();
  }
}
TOP

Related Classes of orxanimeditor.ui.animationviewer.ContentProvider

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.