1 /* 2 * Copyright (c) 2010 Alex Moffat 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a copy 5 * of this software and associated documentation files (the "Software"), to deal 6 * in the Software without restriction, including without limitation the rights 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 * copies of the Software, and to permit persons to whom the Software is 9 * furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice shall be included in 12 * all copies or substantial portions of the Software. 13 * 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 * THE SOFTWARE. 21 */ 22 23 package com.google.gwt.user.client.impl; 24 25 import com.google.gwt.user.client.Element; 26 27 /** 28 * Add handling for touch events to standard DOM impl used by Safari. 29 * 30 * @author amoffat Alex Moffat 31 */ 32 class DOMImplMobileSafari extends DOMImplSafari { 33 34 public native int eventGetTypeInt(String eventType) /*-{ 35 switch (eventType) { 36 case "blur": return 0x01000; 37 case "change": return 0x00400; 38 case "click": return 0x00001; 39 case "dblclick": return 0x00002; 40 case "focus": return 0x00800; 41 case "keydown": return 0x00080; 42 case "keypress": return 0x00100; 43 case "keyup": return 0x00200; 44 case "load": return 0x08000; 45 case "losecapture": return 0x02000; 46 case "mousedown": return 0x00004; 47 case "mousemove": return 0x00040; 48 case "mouseout": return 0x00020; 49 case "mouseover": return 0x00010; 50 case "mouseup": return 0x00008; 51 case "scroll": return 0x04000; 52 case "error": return 0x10000; 53 case "mousewheel": return 0x20000; 54 case "DOMMouseScroll": return 0x20000; 55 case "contextmenu": return 0x40000; 56 case "paste": return 0x80000; 57 case "touchstart": return 0x100000; 58 case "touchmove": return 0x200000; 59 case "touchcancel": return 0x400000; 60 case "touchend": return 0x800000; 61 } 62 }-*/; 63 64 protected native void sinkEventsImpl(Element elem, int bits) /*-{ 65 var chMask = (elem.__eventBits || 0) ^ bits; 66 elem.__eventBits = bits; 67 if (!chMask) return; 68 69 if (chMask & 0x00001) elem.onclick = (bits & 0x00001) ? 70 @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent : null; 71 if (chMask & 0x00002) elem.ondblclick = (bits & 0x00002) ? 72 @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent : null; 73 if (chMask & 0x00004) elem.onmousedown = (bits & 0x00004) ? 74 @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent : null; 75 if (chMask & 0x00008) elem.onmouseup = (bits & 0x00008) ? 76 @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent : null; 77 if (chMask & 0x00010) elem.onmouseover = (bits & 0x00010) ? 78 @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent : null; 79 if (chMask & 0x00020) elem.onmouseout = (bits & 0x00020) ? 80 @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent : null; 81 if (chMask & 0x00040) elem.onmousemove = (bits & 0x00040) ? 82 @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent : null; 83 if (chMask & 0x00080) elem.onkeydown = (bits & 0x00080) ? 84 @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent : null; 85 if (chMask & 0x00100) elem.onkeypress = (bits & 0x00100) ? 86 @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent : null; 87 if (chMask & 0x00200) elem.onkeyup = (bits & 0x00200) ? 88 @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent : null; 89 if (chMask & 0x00400) elem.onchange = (bits & 0x00400) ? 90 @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent : null; 91 if (chMask & 0x00800) elem.onfocus = (bits & 0x00800) ? 92 @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent : null; 93 if (chMask & 0x01000) elem.onblur = (bits & 0x01000) ? 94 @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent : null; 95 if (chMask & 0x02000) elem.onlosecapture = (bits & 0x02000) ? 96 @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent : null; 97 if (chMask & 0x04000) elem.onscroll = (bits & 0x04000) ? 98 @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent : null; 99 if (chMask & 0x08000) elem.onload = (bits & 0x08000) ? 100 @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent : null; 101 if (chMask & 0x10000) elem.onerror = (bits & 0x10000) ? 102 @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent : null; 103 if (chMask & 0x20000) elem.onmousewheel = (bits & 0x20000) ? 104 @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent : null; 105 if (chMask & 0x40000) elem.oncontextmenu = (bits & 0x40000) ? 106 @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent : null; 107 if (chMask & 0x80000) elem.onpaste = (bits & 0x80000) ? 108 @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent : null; 109 110 // Handle touch events. 111 if (chMask & 0x100000) elem.ontouchstart = (bits & 0x100000) ? 112 @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent : null; 113 if (chMask & 0x200000) elem.ontouchmove = (bits & 0x200000) ? 114 @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent : null; 115 if (chMask & 0x400000) elem.ontouchcancel = (bits & 0x400000) ? 116 @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent : null; 117 if (chMask & 0x800000) elem.ontouchend = (bits & 0x800000) ? 118 @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent : null; 119 }-*/; 120 }