touch: drag filtering for display mask 55/35255/2
authorGiWoong Kim <giwoong.kim@samsung.com>
Wed, 24 Dec 2014 07:22:30 +0000 (16:22 +0900)
committerSeokYeon Hwang <syeon.hwang@samsung.com>
Fri, 13 Feb 2015 05:41:08 +0000 (21:41 -0800)
touchscreen event drag(to outside from inside of display region)
filtering for display mask

Change-Id: I7d3e325d16cc93daa7174e9cb89ce6603f72c527
Signed-off-by: GiWoong Kim <giwoong.kim@samsung.com>
tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java

index aea94e5..0e36d65 100755 (executable)
@@ -63,6 +63,7 @@ import org.eclipse.swt.graphics.Image;
 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;
@@ -673,6 +674,48 @@ public class EmulatorSkin {
                                                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);
                                }
                        }