public class EmulatorFingers {
private static final int MAX_FINGER_CNT = 10;
+ private static final int FINGER_POINT_SIZE = 32;
+
private static final int RED_MASK = 0x0000FF00;
private static final int GREEN_MASK = 0x00FF0000;
private static final int BLUE_MASK = 0xFF000000;
private int multiTouchEnable;
private int maxTouchPoint;
protected int fingerCnt;
- private int fingerCntMax;
private int grabFingerID = 0;
private ArrayList<FingerPoint> FingerPointList;
/**
* Constructor
*/
- EmulatorFingers(EmulatorSkinState currentState, SocketCommunicator communicator) {
+ EmulatorFingers(int maximum,
+ EmulatorSkinState currentState, SocketCommunicator communicator) {
this.currentState = currentState;
this.communicator = communicator;
- initMultiTouchState();
+ initMultiTouchState(maximum);
}
protected class FingerPoint {
- int id;
- int originX;
- int originY;
- int x;
- int y;
+ private int id;
+ private int originX;
+ private int originY;
+ private int x;
+ private int y;
FingerPoint(int originX, int originY, int x, int y) {
this.originX = originX;
}
public FingerPoint getFingerPointFromSlot(int index) {
- if (index < 0 || index > this.fingerCntMax) {
+ if (index < 0 || index > getMaxTouchPoint()) {
return null;
}
return null;
}
- public void initMultiTouchState() {
- this.multiTouchEnable = 0;
- this.fingerCntMax = this.currentState.getMaxTouchPoint();
+ public void initMultiTouchState(int maximum) {
+ multiTouchEnable = 0;
- if (this.fingerCntMax > MAX_FINGER_CNT) {
- this.fingerCntMax = MAX_FINGER_CNT;
- setMaxTouchPoint(this.fingerCntMax);
+ int fingerCntMax = maximum;
+ if (fingerCntMax > MAX_FINGER_CNT) {
+ fingerCntMax = MAX_FINGER_CNT;
}
+ setMaxTouchPoint(fingerCntMax);
- logger.info("maxTouchPoint="+ this.fingerCntMax);
+ logger.info("maxTouchPoint : " + getMaxTouchPoint());
this.fingerCnt = 0;
if (this.fingerSlot != null) {
}
FingerPointList = new ArrayList<FingerPoint>();
- int i;
- for (i = 0; i <= fingerCntMax; i++) {
+ for (int i = 0; i <= getMaxTouchPoint(); i++) {
FingerPointList.add(new FingerPoint(-1, -1, -1, -1));
}
- this.fingerPointSize = 32;
+
+ this.fingerPointSize = FINGER_POINT_SIZE;
this.fingerPointSizeHalf = this.fingerPointSize / 2;
this.fingerPointOutlineColor = new Color(Display.getCurrent(), 0xDD, 0xDD, 0xDD);
GC gc = new GC(this.fingerSlotimage);
- gc.setForeground(this.fingerPointOutlineColor);
- gc.drawOval(0, 0, this.fingerPointSize + 2, this.fingerPointSize + 2);
-
gc.setBackground(this.fingerPointColor);
gc.fillOval(2, 2, this.fingerPointSize, this.fingerPointSize);
+ gc.setForeground(this.fingerPointOutlineColor);
+ gc.drawOval(0, 0, this.fingerPointSize + 2, this.fingerPointSize + 2);
+
gc.dispose();
}
}
protected int addFingerPoint(int originX, int originY, int x, int y) {
- if (this.fingerCnt == this.fingerCntMax) {
+ if (this.fingerCnt == getMaxTouchPoint()) {
logger.info("support multi-touch up to "
- + this.fingerCntMax + " fingers");
+ + getMaxTouchPoint() + " fingers");
return -1;
}
this.fingerCnt += 1;
- FingerPointList.get(fingerCnt -1).id = this.fingerCnt;
- FingerPointList.get(fingerCnt -1).originX = originX;
- FingerPointList.get(fingerCnt -1).originY = originY;
- FingerPointList.get(fingerCnt -1).x = x;
- FingerPointList.get(fingerCnt -1).y = y;
+ FingerPointList.get(fingerCnt - 1).id = this.fingerCnt;
+ FingerPointList.get(fingerCnt - 1).originX = originX;
+ FingerPointList.get(fingerCnt - 1).originY = originY;
+ FingerPointList.get(fingerCnt - 1).x = x;
+ FingerPointList.get(fingerCnt - 1).y = y;
logger.info(this.fingerCnt + " finger touching");
return this.fingerCnt;
this.grabFingerID = finger.id;
logger.info(String.format("id %d finger is grabbed\n", this.grabFingerID));
}
- else if (this.fingerCnt == this.fingerCntMax)
+ else if (this.fingerCnt == getMaxTouchPoint())
{ /* Let's assume that this event is last finger touch input */
- finger = getFingerPointFromSlot(this.fingerCntMax - 1);
+ finger = getFingerPointFromSlot(getMaxTouchPoint() - 1);
if (finger != null) {
mouseEventData = new MouseEventData(
MouseButtonType.LEFT.value(), MouseEventType.RELEASE.value(),
- originX, originY, finger.x, finger.y, this.fingerCntMax - 1);
+ originX, originY, finger.x, finger.y, getMaxTouchPoint() - 1);
communicator.sendToQEMU(
SendCommand.SEND_MOUSE_EVENT, mouseEventData, false);
if (finger.id != 0) {
mouseEventData = new MouseEventData(
MouseButtonType.LEFT.value(), MouseEventType.PRESS.value(),
- originX, originY, x, y, this.fingerCntMax - 1);
+ originX, originY, x, y, getMaxTouchPoint() - 1);
communicator.sendToQEMU(
SendCommand.SEND_MOUSE_EVENT, mouseEventData, false);
}
this.grabFingerID = finger.id;
logger.info(String.format("id %d finger is grabbed\n", this.grabFingerID));
}
- else if (this.fingerCnt == this.fingerCntMax)
+ else if (this.fingerCnt == getMaxTouchPoint())
{ /* Let's assume that this event is last finger touch input */
/* do nothing */
}
public static final int BLUE_MASK = 0x000000FF;
public static final int COLOR_DEPTH = 24; /* no need to Alpha channel */
- private static Logger logger = SkinLogger.getSkinLogger(
- EmulatorShmSkin.class).getLogger();
-
- private EmulatorFingers finger;
- private int multiTouchKey;
- private int multiTouchKeySub;
-
/* touch values */
protected static int pressingX = -1, pressingY = -1;
protected static int pressingOriginX = -1, pressingOriginY = -1;
+ private static Logger logger = SkinLogger.getSkinLogger(
+ EmulatorShmSkin.class).getLogger();
+
static {
/* load JNI library file */
try {
private PaletteData paletteData;
private PollFBThread pollThread;
+ private int maxTouchPoint;
+ private EmulatorFingers finger;
+ private int multiTouchKey;
+ private int multiTouchKeySub;
+
class PollFBThread extends Thread {
private Display display;
private int widthFB;
/**
* Constructor
*/
- public EmulatorShmSkin(EmulatorSkinState state,
- EmulatorConfig config, SkinInformation skinInfo, boolean isOnTop) {
- super(state, config, skinInfo, SWT.NONE, isOnTop);
+ public EmulatorShmSkin(EmulatorConfig config,
+ SkinInformation skinInfo, boolean isOnTop) {
+ super(config, skinInfo, SWT.NONE, isOnTop);
this.paletteData = new PaletteData(RED_MASK, GREEN_MASK, BLUE_MASK);
+
+ /* get MaxTouchPoint from startup argument */
+ this.maxTouchPoint = config.getArgInt(ArgsConstants.MAX_TOUCHPOINT);
}
protected void skinFinalize() {
public long initLayout() {
super.initLayout();
- finger = new EmulatorFingers(currentState, communicator);
+ finger = new EmulatorFingers(maxTouchPoint, currentState, communicator);
if (SwtUtil.isMacPlatform() == true) {
multiTouchKey = SWT.COMMAND;
} else {
private static Logger logger;
- public EmulatorSkinState currentState;
private static int useSharedMemory = 0;
static {
Properties skinProperties = loadProperties(skinPropFilePath, true);
if (null == skinProperties) {
logger.severe("Fail to load skin properties file.");
- System.exit(-1);
}
/* set emulator window config property */
SkinPropertiesConstants.WINDOW_ONTOP, Boolean.FALSE.toString());
boolean isOnTop = Boolean.parseBoolean(onTopVal);
- /* prepare for VM state management */
- EmulatorSkinState currentState = new EmulatorSkinState();
-
- /* get MaxTouchPoint from startup argument */
- int maxtouchpoint = 0;
- if (argsMap.containsKey(ArgsConstants.MAX_TOUCHPOINT)) {
- maxtouchpoint = Integer.parseInt(
- argsMap.get(ArgsConstants.MAX_TOUCHPOINT));
- logger.info("maximum touch point : " + maxtouchpoint);
- } else {
- maxtouchpoint = 1;
- logger.info(ArgsConstants.MAX_TOUCHPOINT +
- " does not exist set maxtouchpoint info to " + maxtouchpoint);
- }
-
- currentState.setMaxTouchPoint(maxtouchpoint);
-
/* create a skin */
EmulatorSkin skin = null;
if (useSharedMemory == 1) {
- skin = new EmulatorShmSkin(currentState, config, skinInfo, isOnTop);
+ skin = new EmulatorShmSkin(config, skinInfo, isOnTop);
} else { /* linux & windows */
- skin = new EmulatorSdlSkin(currentState, config, skinInfo, isOnTop);
+ skin = new EmulatorSdlSkin(config, skinInfo, isOnTop);
}
/* create a qemu communicator */