package com.akjava.gwt.html5.client.pointerlock;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NativeEvent;
/**
* Pointer Lock API
* see
* https://developer.mozilla.org/ja/docs/API/Pointer_Lock_API
* @author aki
*
*/
public class PointerLock {
public final static native boolean havePointerLock()/*-{
return 'pointerLockElement' in $wnd.document || 'mozPointerLockElement' in $wnd.document || 'webkitPointerLockElement' in $wnd.document;
}-*/;
public final static native boolean isPointerLockElement(Element element)/*-{
return $wnd.document.pointerLockElement === element || $wnd.document.mozPointerLockElement === element || $wnd.document.webkitPointerLockElement === element;
}-*/;
public final static native boolean isPointerLocked()/*-{
return $wnd.document.pointerLockElement || $wnd.document.mozPointerLockElement || $wnd.document.webkitPointerLockElement ;
}-*/;
/*
* usually Body as RootPanel.getBodyElement()
*/
public final static native boolean requestPointerLock(Element element)/*-{
element.requestPointerLock();
}-*/;
public final static void addPointerLockChange(PointerLockListener listener){
_addPointerLockChange(wrapPointerLockListener(listener));
}
private final static native void _addPointerLockChange(JavaScriptObject jsfunction)/*-{
$wnd.document.addEventListener( 'pointerlockchange', jsfunction, false );
$wnd.document.addEventListener( 'mozpointerlockchange', jsfunction, false );
$wnd.document.addEventListener( 'webkitpointerlockchange', jsfunction, false );
}-*/;
public static interface PointerLockListener {
void pointerLockChanged(NativeEvent event);
}
private native static JavaScriptObject wrapPointerLockListener(PointerLockListener callback) /*-{
return function(event)
{
callback.@com.akjava.gwt.html5.client.pointerlock.PointerLock.PointerLockListener::pointerLockChanged(Lcom/google/gwt/dom/client/NativeEvent;)(event);
};
}-*/;
//TODO error
}