From: GiWoong Kim Date: Wed, 24 Dec 2014 07:22:30 +0000 (+0900) Subject: touch: drag filtering for display mask X-Git-Tag: Tizen_Studio_1.3_Release_p2.3.1~167 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b2eb9244cd19c1a1006224cced2066c718a3f42e;p=sdk%2Femulator%2Fqemu.git touch: drag filtering for display mask touchscreen event drag(to outside from inside of display region) filtering for display mask Change-Id: I7d3e325d16cc93daa7174e9cb89ce6603f72c527 Signed-off-by: GiWoong Kim --- diff --git a/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java b/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java index 691a808f44..2afcf6ad09 100755 --- a/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java +++ b/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java @@ -66,6 +66,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; @@ -688,6 +689,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); } }