Approved! I can now play with LzPix on my iPad and stretch/shrink it with two-finger gestures.
On 2010-07-12, at 19:24, Max Carlson wrote: > Change 20100430-maxcarlson-O by [email protected] on 2010-04-30 > 18:15:26 PDT > in /Users/maxcarlson/openlaszlo/trunk-clean > for http://svn.openlaszlo.org/openlaszlo/trunk > > Summary: UPDATED ^2: Add support for touch devices > > Bugs Fixed: LPP-8904 - Support touch and gesture events > > Technical Reviewer: ptw > QA Reviewer: hminsky > > Details: Updated per Tucker's review to test touches.length for global touch > events: > >> Done, but it doesn't seem to help much because all gestures start with a >> single finger - at least, I wasn't able to reliably put down two fingers at >> the same time. > I don't think you have to put two fingers down simultaneously. The point is, > when you put the second finger down, then touches.length > 1, and you should > let any touch gestures in that state go through to the browser. I think the > reason this is not working is that you didn't change the mouse kernel to look > at touches.length. It needs to do the same logic, no? Otherwise it will > swallow all multi-touches that are not on a clickable element. > > Right you are. Fixed! > >>> b) Similarly, for touchend if (touches.length > 0), which would mean that >>> you lifted some fingers from a multi-touch. Another way of looking at it >>> is that we only want to simulate the mouse on single-finger gestures. >>> >>> Done. >>> >>> c) Similarly for LzMouseKernel > You missed this. > > Fixed. > > Otherwise the same as before: > > Updated to address Tucker's comments: > 1) > > a) LzSprite#1534, ff. It seems to me that if you get a multi-touch gesture > (touches.length > 1) you want to _not_ prevent the default, and return `true` > so that the browser will implement the default behavior (e.g., scroll or > zoom) and that this should happen before we simulate mouseover and mousemove. > > Done, but it doesn't seem to help much because all gestures start with a > single finger - at least, I wasn't able to reliably put down two fingers at > the same time. > > b) Similarly, for touchend if (touches.length > 0), which would mean that you > lifted some fingers from a multi-touch. Another way of looking at it is that > we only want to simulate the mouse on single-finger gestures. > > Done. > > c) Similarly for LzMouseKernel > > 2) Why no handling of touchstart in LzMouseKernel? > > I'm handling this now. > > 3) The way I read the documentation, you should look at changedTouches to get > the position for a touchmove. > > Since we always want to pay attention to the position of the first finger, we > use touches. > > http://www.sitepen.com/blog/2008/07/10/touching-and-gesturing-on-the-iphone/ > helped clarify this for me. > > 4) Don't we need to similarly fetch the position of the correct touch for the > other simulated mouse events? I.e., do we expect to know the coordinates of > over/down/up/out/click? > > The only reliable way I could find to get the position was using > event.touches[0].pageX/Y. > > Comments: > > 1) Overall this seems like a step in the right direction. I can fiddle with > LzPix, drag pictures, move the slider, etc. > > w00t! > > 2) Dragging is rather jerky and slow. I wonder if there is anything we can > do to optimize that? > > Yeah :(. I'm not sure why that is, but a drag kernel would be pretty cool, > at least for views that didn't have x/y dependencies... > > 3) Somehow I managed to start drawing a group-select rectangle in LzPix and > never could get rid of it. Every time I dragged after that, it would make a > new group selection, but I couldn't do anything with it. > > This should be fixed. > > 4) I expected to still be able to pinch-zoom over the app, and I can't seem > to. Perhaps that is related to issue #1? > > At this point, I'm not calling preventDefault() at all now - just returning > false seems to be enough, at least on the iPad. > > I can pinch/zoom on parts of the app that aren't clickable (the blue bar at > the top) just not on the white region where the photos display. Returning > false for the first finger seems to be enough to prevent the pinch/zoom > gesture from happening... > > Otherwise: > > LzSprite - Add touchevents capability, set to true for iphone/android. > Reorganize __setClickable() to register/unregister for touchstart/move/end > events when capabilities.touchevents is true, clean up IE-specific event > registration. Change globally-used __clickDispatcher() to return the result > from __mouseEvent(), which does the actual event processing. __mouseEvent() > sends onmousedown/over/up/out/click events for touchevents. > > LzMouseKernel - When touchevents are available, listen for global touchend > events, and look at the position of the first finger to find the global mouse > position. > > Tests: LzPix dhtml now allows dragging on iPad, iPhone, Android and runs as > before in Safari and other browsers. > > Files: > M WEB-INF/lps/lfc/kernel/dhtml/LzSprite.js > M WEB-INF/lps/lfc/kernel/dhtml/LzMouseKernel.js > > Changeset: > http://svn.openlaszlo.org/openlaszlo/patches/20100430-maxcarlson-O.tar
