Package org.jdesktop.wonderland.modules.celleditor.client

Source Code of org.jdesktop.wonderland.modules.celleditor.client.MouseCursorManager

/**
* Copyright (c) 2014, WonderBuilders, Inc., All Rights Reserved
*/

package org.jdesktop.wonderland.modules.celleditor.client;

import java.awt.Cursor;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.net.MalformedURLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.SwingUtilities;
import org.jdesktop.mtgame.Entity;
import org.jdesktop.wonderland.client.cell.Cell;
import org.jdesktop.wonderland.client.cell.asset.AssetUtils;
import org.jdesktop.wonderland.client.input.Event;
import org.jdesktop.wonderland.client.input.EventClassListener;
import org.jdesktop.wonderland.client.jme.JmeClientMain;
import org.jdesktop.wonderland.client.scenemanager.event.EnterExitEvent;

/**
*
* manages the cursor for an object hover effect
*
* @author Abhishek Upadhyay
*/
public class MouseCursorManager extends EventClassListener {

    private boolean enableGlobalCursor = false;
    private Image globalCursor = null;

    public MouseCursorManager() {
    }

    @Override
    public Class[] eventClassesToConsume() {
        return new Class[]{EnterExitEvent.class};
    }

    @Override
    public void commitEvent(Event event) {
        EnterExitEvent eee = (EnterExitEvent) event;
        Entity entity = eee.getPrimaryEntity();
        Cell cell = EnterExitEvent.getCellForEntity(entity);

        if (eee.isEnter()) {
            enter(cell);
        } else {
            exit(cell);
        }
    }

    private void enter(Cell cell) {
        if (enableGlobalCursor) {
            changeCursor(globalCursor);
        } else {
            if (cell != null) {
                NewInteractionComponent nic = cell.getComponent(NewInteractionComponent.class);
                if (nic != null && nic.isCursorEnable()) {
                    if (!nic.getCursorFilePath().equals("")) {
                        changeCursor(nic.getCursorFilePath());
                    }
                }
            }
        }
    }

    private void exit(Cell cell) {
        JmeClientMain.getFrame().getCanvas().setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
    }

    private void changeCursor(String cursorFilePath) {
        Image img = null;
        Cursor cur = null;
        if (cursorFilePath.contains("wlcontent://")) {
            try {
                img = Toolkit.getDefaultToolkit().createImage(AssetUtils
                        .getAssetURL(cursorFilePath));
                cur = Toolkit.getDefaultToolkit().createCustomCursor(img, new Point(0, 0), "new");
            } catch (MalformedURLException ex) {
                Logger.getLogger(MouseCursorManager.class.getName()).log(Level.SEVERE, null, ex);
            }
        } else {
            img = Toolkit.getDefaultToolkit().createImage(getClass()
                    .getResource(cursorFilePath));
            cur = Toolkit.getDefaultToolkit().createCustomCursor(img, new Point(0, 0), "new");
        }
        final Cursor cursor = cur;
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JmeClientMain.getFrame().getCanvas().setCursor(cursor);
            }
        });
    }

    private void changeCursor(Image image) {
        if (image != null) {
            final Cursor cursor = Toolkit.getDefaultToolkit().createCustomCursor(image, new Point(0, 0), "new");
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    JmeClientMain.getFrame().getCanvas().setCursor(cursor);
                }
            });
        }
    }

    public boolean isEnableGlobalCursor() {
        return enableGlobalCursor;
    }

    public void enableGlobalCursor() {
        this.enableGlobalCursor = true;
    }

    public void disableGlobalCursor() {
        this.enableGlobalCursor = false;
    }

    public void setGlobalCursor(Image cursor) {
        this.globalCursor = cursor;
    }
}
TOP

Related Classes of org.jdesktop.wonderland.modules.celleditor.client.MouseCursorManager

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.