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 #ifndef Touch_h
     27 #define Touch_h
     28 
     29 #include "bindings/core/v8/ScriptWrappable.h"
     30 #include "core/events/EventTarget.h"
     31 #include "platform/geometry/FloatPoint.h"
     32 #include "platform/geometry/FloatSize.h"
     33 #include "platform/geometry/LayoutPoint.h"
     34 #include "platform/heap/Handle.h"
     35 #include "wtf/PassRefPtr.h"
     36 #include "wtf/RefCounted.h"
     37 #include "wtf/RefPtr.h"
     38 
     39 namespace blink {
     40 
     41 class LocalFrame;
     42 
     43 class Touch FINAL : public RefCountedWillBeGarbageCollected<Touch>, public ScriptWrappable {
     44     DEFINE_WRAPPERTYPEINFO();
     45 public:
     46     static PassRefPtrWillBeRawPtr<Touch> create(LocalFrame* frame, EventTarget* target,
     47         unsigned identifier, const FloatPoint& screenPos, const FloatPoint& pagePos,
     48         const FloatSize& radius, float rotationAngle, float force)
     49     {
     50         return adoptRefWillBeNoop(
     51             new Touch(frame, target, identifier, screenPos, pagePos, radius, rotationAngle, force));
     52     }
     53 
     54     // DOM Touch implementation
     55     EventTarget* target() const { return m_target.get(); }
     56     unsigned identifier() const { return m_identifier; }
     57     double clientX() const { return m_clientPos.x(); }
     58     double clientY() const { return m_clientPos.y(); }
     59     double screenX() const { return m_screenPos.x(); }
     60     double screenY() const { return m_screenPos.y(); }
     61     double pageX() const { return m_pagePos.x(); }
     62     double pageY() const { return m_pagePos.y(); }
     63     double radiusX() const { return m_radius.width(); }
     64     double webkitRadiusX() const { return m_radius.width(); }
     65     double radiusY() const { return m_radius.height(); }
     66     double webkitRadiusY() const { return m_radius.height(); }
     67     float webkitRotationAngle() const { return m_rotationAngle; }
     68     float force() const { return m_force; }
     69     float webkitForce() const { return m_force; }
     70 
     71     // Blink-internal methods
     72     const LayoutPoint& absoluteLocation() const { return m_absoluteLocation; }
     73     const FloatPoint& screenLocation() const { return m_screenPos; }
     74     PassRefPtrWillBeRawPtr<Touch> cloneWithNewTarget(EventTarget*) const;
     75 
     76     void trace(Visitor*);
     77 
     78 private:
     79     Touch(LocalFrame* frame, EventTarget* target, unsigned identifier,
     80         const FloatPoint& screenPos, const FloatPoint& pagePos,
     81         const FloatSize& radius, float rotationAngle, float force);
     82 
     83     Touch(EventTarget*, unsigned identifier, const FloatPoint& clientPos,
     84         const FloatPoint& screenPos, const FloatPoint& pagePos,
     85         const FloatSize& radius, float rotationAngle, float force, LayoutPoint absoluteLocation);
     86 
     87     RefPtrWillBeMember<EventTarget> m_target;
     88     unsigned m_identifier;
     89     // Position relative to the viewport in CSS px.
     90     FloatPoint m_clientPos;
     91     // Position relative to the screen in DIPs.
     92     FloatPoint m_screenPos;
     93     // Position relative to the page in CSS px.
     94     FloatPoint m_pagePos;
     95     // Radius in CSS px.
     96     FloatSize m_radius;
     97     float m_rotationAngle;
     98     float m_force;
     99     // FIXME(rbyers): Shouldn't we be able to migrate callers to relying on screenPos, pagePos
    100     // or clientPos? absoluteLocation appears to be the same as pagePos but without browser
    101     // scale applied.
    102     LayoutPoint m_absoluteLocation;
    103 };
    104 
    105 } // namespace blink
    106 
    107 #endif // Touch_h
    108