1 /* 2 * Copyright 2008, The Android Open Source Project 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * * Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * * Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26 #include "config.h" 27 28 #include "core/dom/Touch.h" 29 30 #include "core/frame/Frame.h" 31 #include "core/frame/FrameView.h" 32 33 namespace WebCore { 34 35 static int contentsX(Frame* frame) 36 { 37 if (!frame) 38 return 0; 39 FrameView* frameView = frame->view(); 40 if (!frameView) 41 return 0; 42 return frameView->scrollX() / frame->pageZoomFactor(); 43 } 44 45 static int contentsY(Frame* frame) 46 { 47 if (!frame) 48 return 0; 49 FrameView* frameView = frame->view(); 50 if (!frameView) 51 return 0; 52 return frameView->scrollY() / frame->pageZoomFactor(); 53 } 54 55 Touch::Touch(Frame* frame, EventTarget* target, unsigned identifier, int screenX, int screenY, int pageX, int pageY, int radiusX, int radiusY, float rotationAngle, float force) 56 : m_target(target) 57 , m_identifier(identifier) 58 , m_clientX(pageX - contentsX(frame)) 59 , m_clientY(pageY - contentsY(frame)) 60 , m_screenX(screenX) 61 , m_screenY(screenY) 62 , m_pageX(pageX) 63 , m_pageY(pageY) 64 , m_radiusX(radiusX) 65 , m_radiusY(radiusY) 66 , m_rotationAngle(rotationAngle) 67 , m_force(force) 68 { 69 ScriptWrappable::init(this); 70 float scaleFactor = frame->pageZoomFactor(); 71 float x = pageX * scaleFactor; 72 float y = pageY * scaleFactor; 73 m_absoluteLocation = roundedLayoutPoint(FloatPoint(x, y)); 74 } 75 76 Touch::Touch(EventTarget* target, unsigned identifier, int clientX, int clientY, int screenX, int screenY, int pageX, int pageY, int radiusX, int radiusY, float rotationAngle, float force, LayoutPoint absoluteLocation) 77 : m_target(target) 78 , m_identifier(identifier) 79 , m_clientX(clientX) 80 , m_clientY(clientY) 81 , m_screenX(screenX) 82 , m_screenY(screenY) 83 , m_pageX(pageX) 84 , m_pageY(pageY) 85 , m_radiusX(radiusX) 86 , m_radiusY(radiusY) 87 , m_rotationAngle(rotationAngle) 88 , m_force(force) 89 , m_absoluteLocation(absoluteLocation) 90 { 91 ScriptWrappable::init(this); 92 } 93 94 PassRefPtr<Touch> Touch::cloneWithNewTarget(EventTarget* eventTarget) const 95 { 96 return adoptRef(new Touch(eventTarget, m_identifier, m_clientX, m_clientY, m_screenX, m_screenY, m_pageX, m_pageY, m_radiusX, m_radiusY, m_rotationAngle, m_force, m_absoluteLocation)); 97 } 98 99 } // namespace WebCore 100