/*
* Copyright 2012 Daniel Kurka
*
* 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.googlecode.mgwt.ui.client.widget.touch;
import com.google.gwt.user.client.ui.UIObject;
import com.googlecode.mgwt.dom.client.event.touch.HasTouchHandlers;
import com.googlecode.mgwt.dom.client.recognizer.TapRecognizer;
import com.googlecode.mgwt.dom.client.recognizer.longtap.LongTapRecognizer;
import com.googlecode.mgwt.dom.client.recognizer.pinch.PinchRecognizer;
import com.googlecode.mgwt.dom.client.recognizer.pinch.UIObjectToOffsetProvider;
import com.googlecode.mgwt.dom.client.recognizer.swipe.SwipeRecognizer;
/**
* {@link GestureUtility} is a utility class for adding standard recognizers to a widget
*
* @author Daniel Kurka
*
*/
public class GestureUtility {
private TapRecognizer tapRecognizer;
private final HasTouchHandlers source;
private LongTapRecognizer longTapRecognizer;
private SwipeRecognizer swipeRecognizer;
private PinchRecognizer pinchRecognizer;
public GestureUtility(HasTouchHandlers source) {
assert source != null;
this.source = source;
}
/**
* ensure that there is a registered {@link TapRecognizer} on the source
*/
public void ensureTapRecognizer() {
if (tapRecognizer != null)
return;
tapRecognizer = new TapRecognizer(source);
source.addTouchHandler(tapRecognizer);
}
/**
* ensure that there is a registered {@link LongTapRecognizer} on the source
*/
public void ensureLongTapRecognizer() {
if (longTapRecognizer != null) {
return;
}
longTapRecognizer = new LongTapRecognizer(source);
source.addTouchHandler(longTapRecognizer);
}
/**
* ensure that there is a registered {@link SwipeRecognizer} on the source
*/
public void ensureSwipeRecognizer() {
if (swipeRecognizer != null) {
return;
}
swipeRecognizer = new SwipeRecognizer(source);
source.addTouchHandler(swipeRecognizer);
}
/**
* ensure that there is a registered {@link PinchRecognizer} on the source
*
* @param object the {@link UIObject} that is used for offset
*
*/
public void ensurePinchRecognizer(UIObject object) {
if (pinchRecognizer != null) {
return;
}
pinchRecognizer = new PinchRecognizer(source, new UIObjectToOffsetProvider(object));
source.addTouchHandler(pinchRecognizer);
}
/**
* ensure that there is a registered {@link LongTapRecognizer} on the source
*/
public void ensureLongTapHandler() {
if (longTapRecognizer != null) {
return;
}
longTapRecognizer = new LongTapRecognizer(source);
source.addTouchHandler(longTapRecognizer);
}
}