no.eirikb.bomberman.client.ui.game.Keyboard.java Source code

Java tutorial

Introduction

Here is the source code for no.eirikb.bomberman.client.ui.game.Keyboard.java

Source

/*
 * ----------------------------------------------------------------------------
 * "THE BEER-WARE LICENSE" (Revision 42):
 * <eirikb@eirikb.no> wrote this file. As long as you retain this notice you
 * can do whatever you want with this stuff. If we meet some day, and you think
 * this stuff is worth it, you can buy me a beer in return Eirik Brandtzg
 * ----------------------------------------------------------------------------
 */
package no.eirikb.bomberman.client.ui.game;

import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.WindowCloseListener;

/**
 *
 * @author Eirik Brandtzg <eirikb@eirikb.no>
 */
public final class Keyboard {

    public interface HackishKeyListener {

        void onKeyDown(char keyCode);

        void onKeyPress(char keyCode);

        void onKeyUp(char keyCode);
    }

    private static HackishKeyListener hackishKeyListener;

    private static final class WindowCloseListenerImpl implements WindowCloseListener {

        public native void onWindowClosed() /*-{ $doc.onkeydown = null; $doc.onkeypress = null; $doc.onkeyup = null; }-*/;

        public String onWindowClosing() {
            return null;
        }

        private native void init() /*-{ $doc.onkeydown = function(evt)  {
                                   @no.eirikb.bomberman.client.ui.game.Keyboard::onKeyDown(Lcom/google/gwt/user/client/Event;)(evt || $wnd.event);
                                   }
                                   $doc.onkeypress = function(evt) {
                                   @no.eirikb.bomberman.client.ui.game.Keyboard::onKeyPress(Lcom/google/gwt/user/client/Event;)(evt || $wnd.event);
                                   }
                                   $doc.onkeyup = function(evt) {
                                   @no.eirikb.bomberman.client.ui.game.Keyboard::onKeyUp(Lcom/google/gwt/user/client/Event;)(evt || $wnd.event);
                                   } }-*/;
    }

    static {
        WindowCloseListenerImpl closeListener = new WindowCloseListenerImpl();
        Window.addWindowCloseListener(closeListener);
        closeListener.init();
    }

    /** * Can be called from your code to force installation of * the event handling hooks. */
    public static void forceStaticInit(HackishKeyListener hackishKeyListener2) {
        hackishKeyListener = hackishKeyListener2;
    }

    private static void onKeyDown(Event event) {
        char keyCode = (char) DOM.eventGetKeyCode(event);
        hackishKeyListener.onKeyDown(keyCode);
    }

    private static void onKeyPress(Event event) {
        char keyCode = (char) DOM.eventGetKeyCode(event);
        hackishKeyListener.onKeyPress(keyCode);
    }

    private static void onKeyUp(Event event) {
        char keyCode = (char) DOM.eventGetKeyCode(event);
        hackishKeyListener.onKeyUp(keyCode);
    }

    /** * Prevent instantiation. */
    private Keyboard() {
    }
}