All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.gwt.touch.client.Momentum Maven / Gradle / Ivy

There is a newer version: 2.10.0
Show newest version
/*
 * Copyright 2011 Google Inc.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package com.google.gwt.touch.client;

/**
 * Describes the momentum of a gesture after the gesture has been completed. You
 * can use it to control the speed of scrolling for scrollable widgets affected
 * by {@link TouchScroller}.
 */
public interface Momentum {

  /**
   * A snapshot of the current state.
   */
  public static class State {

    private int cumulativeElapsedMillis = 0;
    private int elapsedMillis = 0;
    private final Point initialPosition;
    private final Point initialVelocity;
    private Point position;
    private Point velocity;

    /**
     * Construct a new {@link State}.
     * 
     * @param initialPosition the initial position, which is also set to the
     *          current position
     * @param initialVelocity the initial velocity in pixels per millisecond,
     *          which is also set to the current velocity
     */
    public State(Point initialPosition, Point initialVelocity) {
      this.initialPosition = initialPosition;
      this.initialVelocity = initialVelocity;
      this.position = new Point(initialPosition);
      this.velocity = new Point(initialVelocity);
    }

    /**
     * Get the cumulative elapsed time in milliseconds since momentum took over.
     * 
     * @return the elapsed time in milliseconds
     */
    public int getCumulativeElapsedMillis() {
      return cumulativeElapsedMillis;
    }

    /**
     * Get the elapsed time in milliseconds since the last time the state was
     * updated.
     * 
     * @return the elapsed time in milliseconds
     */
    public int getElapsedMillis() {
      return elapsedMillis;
    }

    /**
     * Get the initial position when the momentum took over.
     * 
     * @return the initial position
     */
    public Point getInitialPosition() {
      return initialPosition;
    }

    /**
     * Get the initial velocity in pixels per millisecond when the momentum took
     * over.
     * 
     * @return the initial velocity
     */
    public Point getInitialVelocity() {
      return initialVelocity;
    }

    /**
     * Get the current position.
     * 
     * @return the current position
     */
    public Point getPosition() {
      return position;
    }

    /**
     * Get the current velocity in pixels per millisecond.
     * 
     * @return the current velocity
     */
    public Point getVelocity() {
      return velocity;
    }

    /**
     * Set the current position.
     * 
     * @param position set the current position
     */
    public void setPosition(Point position) {
      this.position = position;
    }

    /**
     * Get the current velocity in pixels per millisecond.
     * 
     * @param velocity set the current velocity
     */
    public void setVelocity(Point velocity) {
      this.velocity = velocity;
    }

    /**
     * Set the cumulative elapsed time in milliseconds since momentum took over.
     * 
     * @return the elapsed time in milliseconds
     */
    void setCumulativeElapsedMillis(int cumulativeElapsedMillis) {
      this.cumulativeElapsedMillis = cumulativeElapsedMillis;
    }

    /**
     * Set the elapsed time in milliseconds since the last time the state was
     * updated.
     * 
     * @return the elapsed time
     */
    void setElapsedMillis(int elapsedMillis) {
      this.elapsedMillis = elapsedMillis;
    }
  }

  /**
   * Create a {@link State} instance. The {@link State} instance will be passed
   * to {@link Momentum#updateState(State)} until the momentum is depleted.
   * 
   * @param initialPosition the initial position
   * @param initialVelocity the initial velocity in pixels per millisecond
   */
  State createState(Point initialPosition, Point initialVelocity);

  /**
   * 

* Update the state based on the specified {@link State}. When no more * momentum remains, this method should return false to stop future calls. *

*

* The {@link State} instance is created by a call to * {@link #createState(Point, Point)}, and the same instance if used for the * duration of the momentum. This method should modify the existing state by * calling {@link State#setPosition(Point)} and/or * {@link State#setVelocity(Point)}. *

* * @param state the current state * @return true to continue momentum, false if no momentum remains */ boolean updateState(State state); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy