>From your comment that I shouldn't modify handlers, controls, or Events.js, I am taking that to mean the proper way to go about this would be to implement a new handler which handles the touch events instead of modifying Drag.js?
I'll start then by making a new Handler, MobileDrag, which does basically the same thing as drag but using touch events instead of mouse events. I'll probably need a new Control that uses that handler as well? -Andrew On 07/14/10 07:51, Tim Schaub wrote: > Hey Andrew- > > Your efforts on this front are appreciated. I'd encourage you to work > with a sandbox that is a copy of the trunk. If you keep your sandbox up > to date with changes from the trunk, it will be easier to eventually > create patches for the trunk. > > See the FAQ for details on creating and using a sandbox [1]. > > What you are experimenting with is very similar to how others have > gotten OpenLayers working on the iPhone. For inspiration, it may help > to poke around the iOL library: > > http://projects.opengeo.org/mobile/browser/IOL/trunk/lib > > For OpenLayers 3.0, we'd like to be able to support more (browser) > environments at a deeper level. In the end, you shouldn't have to > modify handlers, controls, or (especially) Events.js. > > Keep us posted on your efforts, > Tim > > [1] > http://trac.openlayers.org/wiki/FrequentlyAskedQuestions#HowdoIcreatemyownsandboxintheSVNrepository > > On 7/13/10 6:01 PM, Andrew Marks wrote: > >> Hello, >> >> I would like to start a discussion about the proper inclusion of >> special iphone-safari javascript events into OpenLayers. I am >> attempting to add touch pan and zoom support to OpenLayers and while I >> am doing it, I might as well do it in a way that is correct and can be >> used by others. I'll talk about what I have done what I plan to do. I >> am working with 2.9.1 (maybe I should work with trunk?) >> >> What I have done: (Made touch map panning work) >> >> First I added "touchstart", "touchend", "touchmove" to BROWSER_EVENTS in >> Events.js >> I then had to modify OpenLayers.Events.getMousePosition because the >> position information in the touch events is in a different location, >> specifically under "targetTouches" or "changedTouches" in the event. >> Here is the code, added just before original return statement of >> getMousePosition: >> >> if (evt.type.match(/touch/)) { >> var touches = evt.targetTouches; >> if (touches.length< 1) { >> touches = evt.changedTouches; >> } >> return new OpenLayers.Pixel( >> (touches[0].pageX + this.element.scrolls[0]) - >> this.element.offsets[0] >> - this.element.lefttop[0], >> (touches[0].pageY + this.element.scrolls[1]) - >> this.element.offsets[1] >> - this.element.lefttop[1] >> ); >> } >> return new ... >> >> I then added three methods to OpenLayers.Handler.Drag: >> touchstart: function (evt) { >> evt.button = 1; //Pretend to be a left click. >> return this.mousedown(evt); >> }, >> >> touchmove: function(evt) { >> return this.mousemove(evt); >> }, >> >> touchend: function(evt) { >> return this.mouseup(evt); >> }, >> >> And now touch panning is working. >> >> What I plan to do next is look at gesture events, specifically pinching >> to zoom in and out. >> >> I welcome all feedback to ensure this is done correctly. If I am going >> about it incorrectly, let me know. >> >> Thanks for your time, >> Andrew Marks >> >> _______________________________________________ >> Dev mailing list >> Dev@openlayers.org >> http://openlayers.org/mailman/listinfo/dev >> > > _______________________________________________ Dev mailing list Dev@openlayers.org http://openlayers.org/mailman/listinfo/dev