if (mts->finger_cnt == 0)
{ /* first finger touch input */
+ INFO("multi-touch mode 1 processing");
if (add_finger_point(origin_x, origin_y, x, y) == -1) {
return;
finger->x = x;
finger->y = y;
if (finger->id != 0) {
- INFO("%d finger touching\n", finger->id);
+ INFO("id %d finger touching\n", finger->id);
virtio_touchscreen_event(x, y,
mts->finger_cnt - 1, QEMU_MOUSE_PRESSED);
}
}
else /* one more finger */
{
- add_finger_point(origin_x, origin_y, x, y);
+ if (add_finger_point(origin_x, origin_y, x, y) == -1) {
+ return;
+ }
+
virtio_touchscreen_event(x, y,
mts->finger_cnt - 1, QEMU_MOUSE_PRESSED);
}
if (mts->finger_cnt == 0)
{ /* first finger touch input */
+ INFO("multi-touch mode 2 processing");
if (add_finger_point(origin_x, origin_y, x, y) == -1) {
return;
}
else /* one more finger */
{
- add_finger_point(origin_x, origin_y, x, y);
+ if (add_finger_point(origin_x, origin_y, x, y) == -1) {
+ return;
+ }
+
virtio_touchscreen_event(x, y,
mts->finger_cnt - 1, QEMU_MOUSE_PRESSED);
}
FingerPoint *finger = NULL;
if (touch_type == MOUSE_DOWN || touch_type == MOUSE_DRAG) { /* pressed */
- if (_grab_finger_id > 0 && _grab_finger_id <= 2) {
- FingerPoint *finger1 = get_finger_point_from_slot(0);
- FingerPoint *finger2 = get_finger_point_from_slot(1);
- if (finger1 != NULL && finger2 != NULL) {
- FingerPoint *co_finger = NULL;
-
- if (_grab_finger_id == 2) {
- finger = finger2;
- co_finger = finger1;
- } else {
- finger = finger1;
- co_finger = finger2;
- }
-
+ if (_grab_finger_id > 0) {
+ finger = get_finger_point_from_slot(_grab_finger_id - 1);
+ if (finger != NULL && _grab_finger_id <= 2) {
const int origin_distance_x = origin_x - finger->origin_x;
const int origin_distance_y = origin_y - finger->origin_y;
const int distance_x = x - finger->x;
const int distance_y = y - finger->y;
- /* bounds checking */
- if ((co_finger->x - distance_x) >= get_emul_resolution_width() ||
- (co_finger->x - distance_x) < 0 ||
- (co_finger->y - distance_y) >= get_emul_resolution_height() ||
- (co_finger->y - distance_y) < 0) {
- TRACE("id %d finger is out of bounds (%d, %d)\n",
- co_finger->id, co_finger->x - distance_x, co_finger->y - distance_y);
- return;
- }
-
/* move */
finger->origin_x += origin_distance_x;
finger->origin_y += origin_distance_y;
finger->id, x, y);
}
- co_finger->origin_x -= origin_distance_x;
- co_finger->origin_y -= origin_distance_y;
- co_finger->x -= distance_x;
- co_finger->y -= distance_y;
- if (co_finger->id != 0) {
- virtio_touchscreen_event(x, y,
- co_finger->id - 1, QEMU_MOUSE_PRESSED);
- TRACE("id %d finger multi-touch dragging : (%d, %d)\n",
- co_finger->id, x, y);
+ if (mts->finger_cnt > 1) {
+ FingerPoint *co_finger = get_finger_point_from_slot(
+ (_grab_finger_id == 2) ? 0 : 1);
+ if (co_finger != NULL) {
+ /* bounds checking */
+ if ((co_finger->x - distance_x) >= get_emul_resolution_width() ||
+ (co_finger->x - distance_x) < 0 ||
+ (co_finger->y - distance_y) >= get_emul_resolution_height() ||
+ (co_finger->y - distance_y) < 0) {
+ TRACE("id %d finger is out of bounds (%d, %d)\n",
+ co_finger->id, co_finger->x - distance_x, co_finger->y - distance_y);
+ return;
+ }
+
+ /* move */
+ co_finger->origin_x -= origin_distance_x;
+ co_finger->origin_y -= origin_distance_y;
+ co_finger->x -= distance_x;
+ co_finger->y -= distance_y;
+ if (co_finger->id != 0) {
+ virtio_touchscreen_event(co_finger->x, co_finger->y,
+ co_finger->id - 1, QEMU_MOUSE_PRESSED);
+ TRACE("id %d finger multi-touch dragging : (%d, %d)\n",
+ co_finger->id, co_finger->x, co_finger->y);
+ }
+ }
}
-
- return;
}
+
+ return;
}
if (mts->finger_cnt == 0)
{ /* first finger touch input */
+ INFO("multi-touch mode 3 processing");
if (add_finger_point(origin_x, origin_y, x, y) == -1) {
return;
}
else /* one more finger */
{
- add_finger_point(origin_x, origin_y, x, y);
+ if (add_finger_point(origin_x, origin_y, x, y) == -1) {
+ return;
+ }
+
virtio_touchscreen_event(x, y,
mts->finger_cnt - 1, QEMU_MOUSE_PRESSED);
}
INFO("enable multi-touch mode 3\n");
}
}
- else if ((keycode == JAVA_KEYCODE_BIT_SHIFT && state_mask == JAVA_KEYCODE_BIT_CTRL) ||
- (keycode == JAVA_KEYCODE_BIT_CTRL && state_mask == JAVA_KEYCODE_BIT_SHIFT))
+ else if ((keycode == JAVA_KEYCODE_BIT_CTRL && state_mask == JAVA_KEYCODE_BIT_SHIFT) ||
+ (keycode == JAVA_KEYCODE_BIT_SHIFT && state_mask == JAVA_KEYCODE_BIT_CTRL))
{
if (KEY_PRESSED == event_type) {
set_multi_touch_enable(2);
/* Before the Emulator starts multi-touch processing,
* add a first finger if user just switches on to the multi-touch mode
* while display dragging. */
- if (pressing_x != -1 && pressing_y != -1 &&
+ if (get_finger_cnt() == 0 && pressing_x != -1 && pressing_y != -1 &&
pressing_origin_x != -1 && pressing_origin_y != -1) {
add_finger_point(
pressing_origin_x, pressing_origin_y,
/* Before the Emulator starts multi-touch processing,
* add a first finger if user just switches on to the multi-touch mode
* while display dragging. */
- if (pressing_x != -1 && pressing_y != -1 &&
+ if (get_finger_cnt() == 0 && pressing_x != -1 && pressing_y != -1 &&
pressing_origin_x != -1 && pressing_origin_y != -1) {
add_finger_point(
pressing_origin_x, pressing_origin_y,
INFO("disable multi-touch\n");
}
+ maru_display_update();
+ }
+ }
+ else
+ {
+ if (get_multi_touch_enable() != 0) {
+ clear_finger_slot(false);
+ INFO("disable multi-touch\n");
+
maru_display_update();
}
}