Almost implement XVnc
This commit is contained in:
1 parent
626f273f8d
commit
f72660fa5a
117 files changed
+16007
-22
No files matched your search
@@ -0,0 +1,115 @@
|
||||
/**
|
||||
* Copyright (c) 2010 Michael A. MacDonald
|
||||
*/
|
||||
package android.androidVNC;
|
||||
|
||||
import android.graphics.PointF;
|
||||
import android.os.Handler;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.MotionEvent;
|
||||
|
||||
/**
|
||||
* Input handlers delegate to this class to handle keystrokes; this detects keystrokes
|
||||
* from the DPad and uses them to perform mouse actions; other keystrokes are passed to
|
||||
* VncCanvasActivity.defaultKeyXXXHandler
|
||||
*
|
||||
* @author Michael A. MacDonald
|
||||
*
|
||||
*/
|
||||
class DPadMouseKeyHandler {
|
||||
private MouseMover mouseMover;
|
||||
private boolean mouseDown;
|
||||
private VncCanvasActivity activity;
|
||||
private VncCanvas canvas;
|
||||
private boolean isMoving;
|
||||
|
||||
DPadMouseKeyHandler(VncCanvasActivity activity, Handler handler)
|
||||
{
|
||||
this.activity = activity;
|
||||
canvas = activity.vncCanvas;
|
||||
mouseMover = new MouseMover(activity, handler);
|
||||
}
|
||||
|
||||
public boolean onKeyDown(int keyCode, KeyEvent evt) {
|
||||
int xv = 0;
|
||||
int yv = 0;
|
||||
boolean result = true;
|
||||
switch (keyCode) {
|
||||
case KeyEvent.KEYCODE_DPAD_LEFT:
|
||||
xv = -1;
|
||||
break;
|
||||
case KeyEvent.KEYCODE_DPAD_RIGHT:
|
||||
xv = 1;
|
||||
break;
|
||||
case KeyEvent.KEYCODE_DPAD_UP:
|
||||
yv = -1;
|
||||
break;
|
||||
case KeyEvent.KEYCODE_DPAD_DOWN:
|
||||
yv = 1;
|
||||
break;
|
||||
case KeyEvent.KEYCODE_DPAD_CENTER:
|
||||
if (!mouseDown) {
|
||||
mouseDown = true;
|
||||
result = canvas.processPointerEvent(canvas.mouseX, canvas.mouseY, MotionEvent.ACTION_DOWN, evt.getMetaState(), mouseDown, canvas.cameraButtonDown);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
result = activity.defaultKeyDownHandler(keyCode, evt);
|
||||
break;
|
||||
}
|
||||
if ((xv != 0 || yv != 0) && !isMoving) {
|
||||
final int x = xv;
|
||||
final int y = yv;
|
||||
isMoving = true;
|
||||
mouseMover.start(x, y, new Panner.VelocityUpdater() {
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see android.androidVNC.Panner.VelocityUpdater#updateVelocity(android.graphics.Point,
|
||||
* long)
|
||||
*/
|
||||
@Override
|
||||
public boolean updateVelocity(PointF p, long interval) {
|
||||
double scale = (1.2 * (double) interval / 50.0);
|
||||
if (Math.abs(p.x) < 500)
|
||||
p.x += (int) (scale * x);
|
||||
if (Math.abs(p.y) < 500)
|
||||
p.y += (int) (scale * y);
|
||||
return true;
|
||||
}
|
||||
|
||||
});
|
||||
canvas.processPointerEvent(canvas.mouseX + x, canvas.mouseY + y, MotionEvent.ACTION_MOVE, evt.getMetaState(), mouseDown, canvas.cameraButtonDown);
|
||||
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public boolean onKeyUp(int keyCode, KeyEvent evt) {
|
||||
boolean result = false;
|
||||
|
||||
switch (keyCode) {
|
||||
case KeyEvent.KEYCODE_DPAD_LEFT:
|
||||
case KeyEvent.KEYCODE_DPAD_RIGHT:
|
||||
case KeyEvent.KEYCODE_DPAD_UP:
|
||||
case KeyEvent.KEYCODE_DPAD_DOWN:
|
||||
mouseMover.stop();
|
||||
isMoving = false;
|
||||
result = true;
|
||||
break;
|
||||
case KeyEvent.KEYCODE_DPAD_CENTER:
|
||||
if (mouseDown) {
|
||||
mouseDown = false;
|
||||
result = canvas.processPointerEvent(canvas.mouseX, canvas.mouseY, MotionEvent.ACTION_UP, evt.getMetaState(), mouseDown, canvas.cameraButtonDown);
|
||||
} else {
|
||||
result = true;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
result = activity.defaultKeyUpHandler(keyCode, evt);
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user