Hi, As most of you have experienced, the precision of a mouse click on Desktop applications, including Web browsers, is much higher than the precision of a touch tap on a mobile device. It is not a new problem, and many solutions have been proposed to improve that situation. One of the common solutions is to make a small target’s tap-sensitive area larger, invisibly, than the visible target itself. Of course, it would not work on a mobile Web browser, since it'd end up breaking the desired layout of any non-simple Web site.
Mozilla has addressed this problem by implementing the SmartTap feature [1]. The solution is simple: a "nodesFromRect" method is available for applications {fennec, firefox, etc}. As the name implies, given a rect (corresponding to tapped area), it returns a list of candidate "mouse clickable" target nodes for the tap. This list is sorted by z-order, larger intersection area, most visited (in case of links), etc. Call sites can then pick the first element on the list, or use any different heuristic to choose the target. [1] https://bugzilla.mozilla.org/show_bug.cgi?id=489127 After some initial research, mostly understanding the HitTest system of WebCore, I am sure we can provide something similar as a cross platform solution for the problem. For the moment, my plan is to use better hit testing to make it easier for users to click & focus hyperlinks and input fields. For that, the HitTest system would have to be modified to receive a Rect as input, instead of a Point. It would also have to hold a list of possible target candidate nodes, instead of only a single target node as it does currently. In deep, the many ::nodeAtPoint implementations would have to be adjusted to work with a Rect, not a Point, and probably renamed to something similar to nodesAtRect. Much of the current HitTest logic in RenderLayer would not need changes, though. To keep the current mouse behavior (which is clearly point-based), we could just pass rects with width and height equal to 1, so a Rect(x, y, 1, 1) would behavior equally or very similarly to Point(x, y). Before going this way, I would like to know of any known problem or show stoppers. Cheers, -- --Antonio Gomes _______________________________________________ webkit-dev mailing list webkit-dev@lists.webkit.org http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev