jnmousehandler.java
来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 137 行
JAVA
137 行
/*
* $Id: JNMouseHandler.java,v 1.10 2004/02/28 09:20:53 epr Exp $
*/
package org.jnode.wt.server;
import java.awt.Dimension;
import javax.naming.NameNotFoundException;
import org.apache.log4j.Logger;
import org.jnode.driver.ApiNotFoundException;
import org.jnode.driver.Device;
import org.jnode.driver.input.PointerEvent;
import org.jnode.driver.input.PointerListener;
import org.jnode.driver.video.HardwareCursorAPI;
import org.jnode.wt.desktop.JNDesktop;
import org.jnode.wt.desktop.JNDesktopManager;
import org.jnode.wt.events.JNodeMouseEvent;
/**
* @author Ewout Prangsma (epr@users.sourceforge.net)
*/
public class JNMouseHandler implements PointerListener {
/** My logger */
private final Logger log = Logger.getLogger(getClass());
private int x;
private int y;
private final HardwareCursorAPI hwCursor;
private final Dimension screenSize;
private boolean[] buttonState = new boolean[ 3];
private static final int[] BUTTON_MASK = { PointerEvent.BUTTON_LEFT,
PointerEvent.BUTTON_RIGHT, PointerEvent.BUTTON_MIDDLE};
private static final int[] BUTTON_NUMBER = { 1, 2, 3};
private final JNDesktopManager mgr = JNDesktopManager.getDesktopManager();
private final JNServer server;
/**
* Create a new instance
*
* @param fbDevice
* @param screenSize
*/
public JNMouseHandler(JNServer server, Device fbDevice, Dimension screenSize)
throws NameNotFoundException {
HardwareCursorAPI hwCursor = null;
this.server = server;
try {
hwCursor = (HardwareCursorAPI) fbDevice
.getAPI(HardwareCursorAPI.class);
} catch (ApiNotFoundException ex) {
log.info("No hardware-cursor found on device " + fbDevice.getId());
}
server.getConsole().addPointerListener(this);
this.hwCursor = hwCursor;
this.screenSize = screenSize;
hwCursor.setCursorImage(JNCursors.ARROW);
hwCursor.setCursorVisible(true);
hwCursor.setCursorPosition(x, y);
mgr.setHardwareCursor(true);
}
/**
* Close this handler
*/
public void close() {
server.getConsole().removePointerListener(this);
}
/**
* @param event
* @see org.jnode.driver.input.PointerListener#pointerStateChanged(org.jnode.driver.input.PointerEvent)
*/
public void pointerStateChanged(PointerEvent event) {
x = Math.min(screenSize.width - 1, Math.max(0, x + event.getX()));
y = Math.min(screenSize.height - 1, Math.max(0, y + event.getY()));
hwCursor.setCursorPosition(x, y);
final int buttons = event.getButtons();
boolean eventFired = false;
for (int i = 0; i < 3; i++) {
final int mask = BUTTON_MASK[ i];
final int nr = BUTTON_NUMBER[ i];
if ((buttons & mask) != 0) {
if (!buttonState[ i]) {
postEvent(JNodeMouseEvent.MOUSE_PRESSED, nr);
buttonState[ i] = true;
eventFired = true;
}
} else if (buttonState[ i]) {
postEvent(JNodeMouseEvent.MOUSE_RELEASED, nr);
postEvent(JNodeMouseEvent.MOUSE_CLICKED, nr);
buttonState[ i] = false;
eventFired = true;
} else {
}
}
/* Must have been a drag or move. */
if (!eventFired) {
if (buttonState[ 0] == true) {
postEvent(JNodeMouseEvent.MOUSE_DRAGGED,
JNodeMouseEvent.BUTTON1);
} else if (buttonState[ 1] == true) {
postEvent(JNodeMouseEvent.MOUSE_DRAGGED,
JNodeMouseEvent.BUTTON2);
} else if (buttonState[ 2] == true) {
postEvent(JNodeMouseEvent.MOUSE_DRAGGED,
JNodeMouseEvent.BUTTON3);
} else {
postEvent(JNodeMouseEvent.MOUSE_MOVED, JNodeMouseEvent.NOBUTTON);
}
}
}
/**
* Post a mouse event to the current desktop.
*
* @param eventId
* @param button
*/
private final void postEvent(int eventId, int button) {
final JNDesktop desktop = mgr.getCurrentDesktop();
if (desktop != null) {
mgr.postEvent(new JNodeMouseEvent(desktop, eventId, x, y, button));
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?