Opened 9 years ago

Closed 8 years ago

Last modified 11 months ago

#7772 closed enhancement

ANDROID: Improving touchscreen/mouse support

Reported by: SF/mcnicholls Owned by: anguslees
Priority: normal Component: Port: Android
Keywords: Cc:
Game:

Description

I'm creating this bug mainly as a way of discussing what might be the correct implementation as I would like to try and implement it and help Gus out with this port.

I have been in touch with Gus and it would seem that mouse input needs a few fixes.

Firstly the right click needs a way to be invoked from the touchscreen as not all phones have a camera/search button and it would be nicer to do it via the touch screen. Gus suggested a long press on the screen should invoke a right click. This seems sensible as long press on Android typically brings up context menus and so can be thought of as a right click.

Also click and drag support. At the moment all dragging on the touchscreen represents a click and drag (I think). I guess this isn't always desirable and Gus suggested maybe a double tap will initiate a click drag.

I have seen in the forum that people have complained they manage to click the wrong thing as there fingers are a lot bigger than the item they are clicking on. It was suggested that perhaps we only respond to releasing the touchscreen, thereby allowing the user to fine tune where they want to click before letting go and initiating the click.

Based on all of this, as a starting point, I would like to propose the following:

- An initial touch on the screen does nothing (except be stored to look for long presses/double taps).
- If released before a long press timeout, we simply pass a left button down to the vm and a left button up.
- If pressed again within the double tap timeout, we send the vm a left button down and continue to pass the move events until released where we pass a left button up to the vm.
- If held down past the long press timeout (without enough movement to signify this isn't a long press) we send a right button down.
- Once the finger is released we send relevant left button up or right button up messages depending on the state.

The main thing is I am unfamiliar with the vm and how the engines use it.

Will the above work for all the use cases?
Is click and drag useful in some of the games?
Is it useful to be able to avoid click and drag by default as the above scheme outlines?

Any feedback would be great, I can then get to work to try to implement it.

Ticket imported from: #3040062. Ticket imported from: feature-requests/588.

Change History (8)

comment:1 by fingolfin, 9 years ago

This is a bug tracker, and as such not the right place to discuss potential feature additions or code design. I am moving this for now to the feature request tracker, but I think it's best if this tracker item is closed and you send this as an email to scummvm-devel -- or just discuss it privately with gus (sadly, it's often very hard to get email replies from him).

comment:2 by fingolfin, 9 years ago

Owner: set to anguslees

comment:3 by SF/mcnicholls, 9 years ago

Sorry wasn't sure were to post.

I am mainly looking for some guidance from someone like yourself who knows how the engines and games respond to the mouse input, to see if my suggestions are viable from that point of view.

I can repost this to the mailing list if you think it is the best place.

comment:4 by dhewg, 9 years ago

just noticed this feature request now.
i think i implemented it exactly like your proposal list with adef4c3f :)
and yes, drag&drop is required for games like full throttle or COMI

wanna try it? see http://forums.scummvm.org/viewtopic.php?t=10066

comment:5 by dhewg, 9 years ago

Status: newpending

comment:6 by SF/sf-robot, 8 years ago

This Tracker item was closed automatically by the system. It was
previously set to a Pending status, and the original submitter
did not respond within 14 days (the time period specified by
the administrator of this Tracker).

comment:7 by SF/sf-robot, 8 years ago

Status: pendingclosed

comment:8 by digitall, 11 months ago

Component: Port: Android
Note: See TracTickets for help on using tickets.