Package com.denisk.appengine.nl.client.thirdparty.com.reveregroup.carousel.client

Source Code of com.denisk.appengine.nl.client.thirdparty.com.reveregroup.carousel.client.MouseBehavior

package com.denisk.appengine.nl.client.thirdparty.com.reveregroup.carousel.client;

import java.util.ArrayList;
import java.util.List;

import com.denisk.appengine.nl.client.thirdparty.com.reveregroup.carousel.client.events.PhotoClickEvent;
import com.denisk.appengine.nl.client.thirdparty.com.reveregroup.carousel.client.events.PhotoClickHandler;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.event.dom.client.MouseDownEvent;
import com.google.gwt.event.dom.client.MouseDownHandler;
import com.google.gwt.event.dom.client.MouseMoveEvent;
import com.google.gwt.event.dom.client.MouseMoveHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.Event.NativePreviewEvent;
/**
* Copied from http://code.google.com/p/spiral-carousel-gwt/
*/

public class MouseBehavior {
  private final double maxVelocity = .03;
 
  private Carousel target;
  int lastXValue;
  long lastTime;
  boolean mouseDown = false;
 
  int avgDist;
  int avgTime;

  protected List<HandlerRegistration> eventHandlers = new ArrayList<HandlerRegistration>(4);
 
  public MouseBehavior(Carousel carousel) {
    this.target = carousel;
  }
 
  public void start() {
    if (eventHandlers.size() > 0)
      return; //already started
   
    //rotate when mouse dragged
    eventHandlers.add(target.addMouseDownHandler(new MouseDownHandler() {
      public void onMouseDown(MouseDownEvent event) {
        mouseDown = true;
        if ((event.getNativeButton() & NativeEvent.BUTTON_LEFT) != 0) {
          lastXValue = event.getX();
          lastTime = System.currentTimeMillis();
          avgDist = 0;
          avgTime = 0;
          target.setVelocity(0.0);
        }
      }
    }));
    eventHandlers.add(target.addMouseMoveHandler(new MouseMoveHandler() {
      public void onMouseMove(MouseMoveEvent event) {
        if (mouseDown == true) {
          long curTime = System.currentTimeMillis();
          int distance = event.getX() - lastXValue;
          int ticks = (int) (curTime - lastTime);
          lastTime = curTime;
         
          if ((distance < 0 && avgDist > 0) || (distance > 0 && avgDist < 0)) {
            avgDist = distance;
          } else {
            avgDist = (avgDist == 0) ? distance : ((4 * avgDist + distance) / 5);
          }
          avgTime = (avgTime == 0) ? ticks : ((4 * avgTime + ticks) / 5);
         
          //Utils.log(distance + ":" + avgDist + " / " + ticks + ":" + avgTime);

          if (avgTime != 0) {
            double velocity = avgDist / ((double)avgTime) / ((double)target.getOffsetWidth()) * -4.0;
            if (velocity > maxVelocity)
              velocity = maxVelocity;
            if (velocity < -maxVelocity)
              velocity = -maxVelocity;
            target.setVelocity(velocity);
          }
          lastXValue = event.getX();
        }
      }
    }));
    eventHandlers.add(Event.addNativePreviewHandler(new Event.NativePreviewHandler() {
      public void onPreviewNativeEvent(NativePreviewEvent event) {
        if (event.getTypeInt() == Event.ONMOUSEUP) {
          mouseDown = false;
        }
      }
    }));
   
    //Rotate to an image when clicked.
    eventHandlers.add(target.addPhotoClickHandler(new PhotoClickHandler() {
      public void photoClicked(PhotoClickEvent event) {
        target.rotateTo(event.getPhotoIndex());
      }
    }));
  }
 
  public void stop() {
    for (HandlerRegistration handler : eventHandlers) {
      handler.removeHandler();
    }
    eventHandlers.clear();
  }
}
TOP

Related Classes of com.denisk.appengine.nl.client.thirdparty.com.reveregroup.carousel.client.MouseBehavior

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.