Package org.gephi.visualization.scheduler

Source Code of org.gephi.visualization.scheduler.SimpleFPSAnimator

/*
Copyright 2008-2010 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org

This file is part of Gephi.

Gephi is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.

Gephi is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with Gephi.  If not, see <http://www.gnu.org/licenses/>.
*/
package org.gephi.visualization.scheduler;

import org.gephi.visualization.apiimpl.Scheduler;
import java.util.concurrent.atomic.AtomicBoolean;
import org.gephi.visualization.swing.GraphDrawableImpl;

/**
*
* @author Mathieu Bastian
*/
public class SimpleFPSAnimator extends Thread {

    private Scheduler scheduler;
    private GraphDrawableImpl drawable;
    private long delay;
    private AtomicBoolean animating;
    private final Object lock = new Object();
    private boolean displayCall = false;
    private long startTime;

    public SimpleFPSAnimator(Scheduler scheduler, GraphDrawableImpl drawble, float fps) {
        super("SimpleFPSAnimator");
        setDaemon(true);
        this.drawable = drawble;
        this.scheduler = scheduler;
        this.animating = new AtomicBoolean();

        setFps(fps);
        animating.set(true);
    }

    @Override
    public void run() {

        try {
            while (animating.get()) {
                startTime = System.currentTimeMillis();
                scheduler.updateWorld();
                scheduler.updatePosition();
                displayCall = true;
                drawable.display();
                displayCall = false;
                long timeout;
                while ((timeout = delay - System.currentTimeMillis() + startTime) > 0) {
                    //Wait only if the time spent in display is inferior than delay
                    //Otherwise the render loop acts as a 'as fast as you can' loop
                    synchronized (this.lock) {
                        this.lock.wait(timeout);
                    }
                }
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public void shutdown() {
        animating.set(false);
    }

    public boolean isAnimating() {
        return animating.get();
    }

    public void setFps(float fps) {
        delay = (long) (1000.0f / fps);
        synchronized (this.lock) {
            startTime = 0;
            this.lock.notify();
        }
    }

    public boolean isDisplayCall() {
        return displayCall;
    }
}
TOP

Related Classes of org.gephi.visualization.scheduler.SimpleFPSAnimator

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.