Home | History | Annotate | Download | only in dom
      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