import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.graphics.Region;
import org.eclipse.swt.graphics.Transform;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Display;
isDisplayDragging = false;
}
+ /* filtering for display mask */
+ Region displayRegion = lcdCanvas.getRegion();
+ if (displayRegion != null &&
+ displayRegion.contains(e.x, e.y) == false) {
+ logger.info("out of range touch event : " + e.x + ", " + e.y);
+
+ int angle = SkinUtil.getAngleFromVector(lcdCanvas, e.x, e.y);
+ if (angle < 0) {
+ angle += 360;
+ }
+
+ final int displayCenterX = lcdCanvas.getSize().x / 2;
+ final int displayCenterY = lcdCanvas.getSize().y / 2;
+
+ if (angle >= 45 && angle < 135) { /* down side */
+ do {
+ e.y--;
+ } while (displayRegion.contains(e.x, e.y) == false &&
+ displayCenterY < e.y);
+ } else if (angle >= 135 && angle < 225) { /* left side */
+ do {
+ e.x++;
+ } while (displayRegion.contains(e.x, e.y) == false &&
+ displayCenterX > e.x);
+ } else if (angle >= 225 && angle < 315) { /* up side */
+ do {
+ e.y++;
+ } while (displayRegion.contains(e.x, e.y) == false &&
+ displayCenterY > e.y);
+ } else { /* right side */
+ do {
+ e.x--;
+ } while (displayRegion.contains(e.x, e.y) == false &&
+ displayCenterX < e.x);
+ }
+
+ logger.info("auto release : touch=" +
+ e.x + ", " + e.y + " (" + angle + ")");
+ eventType = MouseEventType.RELEASE.value();
+ isDisplayDragging = false;
+ }
+
mouseMoveDelivery(e, eventType);
}
}