/src/com/machinepublishers/glass/ui/monocle/MonocleCursor.java
Java | 132 lines | 69 code | 11 blank | 52 comment | 4 complexity | 731075f9a0aea6d19947c02f5c04dd57 MD5 | raw file
- /*
- * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
- package com.machinepublishers.glass.ui.monocle;
- import com.sun.glass.ui.Application;
- import com.sun.glass.ui.Cursor;
- import com.sun.glass.ui.Pixels;
- import com.machinepublishers.glass.ui.monocle.MonocleApplication;
- import com.machinepublishers.glass.ui.monocle.MonocleCursor;
- import com.machinepublishers.glass.ui.monocle.NativeCursor;
- import com.machinepublishers.glass.ui.monocle.NativePlatformFactory;
- import java.io.IOException;
- import java.io.InputStream;
- final class MonocleCursor extends Cursor {
- private byte[] image;
- private int hotspotX;
- private int hotspotY;
- MonocleCursor(int type) {
- super(type);
- image = getImage(type);
- hotspotX = 0;
- hotspotY = 0;
- }
- MonocleCursor(int x, int y, Pixels pixels) {
- super(x, y, pixels);
- }
- void applyCursor() {
- int type = getType();
- if (type == CURSOR_NONE) {
- // CURSOR_NONE is mapped to setVisible(false) and will be registered
- // in MonocleApplication as a preference to not show the cursor.
- ((MonocleApplication) Application.GetApplication())
- .staticCursor_setVisible(false);
- } else {
- NativeCursor cursor = NativePlatformFactory.getNativePlatform().getCursor();
- cursor.setImage(image);
- ((MonocleApplication) Application.GetApplication())
- .staticCursor_setVisible(true);
- }
- }
- @Override
- protected long _createCursor(int x, int y, Pixels pixels) {
- hotspotX = x;
- hotspotY = y;
- image = pixels.asByteBuffer().array();
- return 1l;
- }
- private static String cursorResourceName(int cursorType) {
- switch (cursorType) {
- case CURSOR_CLOSED_HAND: return "ClosedHand";
- case CURSOR_CROSSHAIR: return "Crosshair";
- case CURSOR_DISAPPEAR: return "Disappear";
- case CURSOR_MOVE: return "Move";
- case CURSOR_OPEN_HAND: return "OpenHand";
- case CURSOR_POINTING_HAND: return "PointingHand";
- case CURSOR_RESIZE_DOWN: return "ResizeDown";
- case CURSOR_RESIZE_LEFT: return "ResizeLeft";
- case CURSOR_RESIZE_LEFTRIGHT: return "ResizeLeftRight";
- case CURSOR_RESIZE_NORTHEAST: return "ResizeNorthEast";
- case CURSOR_RESIZE_NORTHWEST: return "ResizeNorthWest";
- case CURSOR_RESIZE_RIGHT: return "ResizeRight";
- case CURSOR_RESIZE_SOUTHEAST: return "ResizeSouthEast";
- case CURSOR_RESIZE_SOUTHWEST: return "ResizeSouthWest";
- case CURSOR_RESIZE_UP: return "ResizeUp";
- case CURSOR_RESIZE_UPDOWN: return "ResizeUpDown";
- case CURSOR_TEXT: return "Text";
- case CURSOR_WAIT: return "Wait";
- default: return "Default";
- }
- }
- private static byte[] getImage(int cursorType) {
- // InputStream in = null;
- // try {
- // in = MonocleCursor.class.getResourceAsStream(
- // "Cursor"
- // + cursorResourceName(cursorType)
- // + "Translucent.raw");
- // byte[] b = new byte[1024];
- // int bytesRead = 0;
- // while (bytesRead < 1024) {
- // int read = in.read(b, bytesRead, 1024 - bytesRead);
- // if (read >= 0) {
- // bytesRead += read;
- // } else {
- // throw new IOException("Incomplete cursor resource");
- // }
- // }
- // return b;
- // } catch (IOException e) {
- // e.printStackTrace();
- return null;
- // } finally {
- // if (in != null) {
- // try {
- // in.close();
- // } catch (IOException e) { }
- // }
- // }
- }
- }