15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright 2008, The Android Open Source Project
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2012 Research In Motion Limited. All rights reserved.
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met:
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *  * Redistributions of source code must retain the above copyright
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer.
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *  * Redistributions in binary form must reproduce the above copyright
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer in the
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    documentation and/or other materials provided with the distribution.
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h"
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/TouchEvent.h"
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/EventDispatcher.h"
3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/EventNames.h"
3353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/EventRetargeter.h"
3453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/TouchList.h"
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore {
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TouchEvent::TouchEvent()
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
4053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    ScriptWrappable::init(this);
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TouchEvent::TouchEvent(TouchList* touches, TouchList* targetTouches,
4402772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch        TouchList* changedTouches, const AtomicString& type,
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        PassRefPtr<AbstractView> view, int screenX, int screenY, int pageX, int pageY,
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        bool ctrlKey, bool altKey, bool shiftKey, bool metaKey)
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    : MouseRelatedEvent(type, true, true, view, 0, IntPoint(screenX, screenY),
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                        IntPoint(pageX, pageY),
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                        IntPoint(0, 0),
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                        ctrlKey, altKey, shiftKey, metaKey)
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    , m_touches(touches)
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    , m_targetTouches(targetTouches)
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    , m_changedTouches(changedTouches)
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    ScriptWrappable::init(this);
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TouchEvent::~TouchEvent()
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void TouchEvent::initTouchEvent(TouchList* touches, TouchList* targetTouches,
6302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch        TouchList* changedTouches, const AtomicString& type,
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        PassRefPtr<AbstractView> view, int screenX, int screenY, int clientX, int clientY,
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        bool ctrlKey, bool altKey, bool shiftKey, bool metaKey)
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (dispatched())
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    initUIEvent(type, true, true, view, 0);
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_touches = touches;
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_targetTouches = targetTouches;
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_changedTouches = changedTouches;
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_screenLocation = IntPoint(screenX, screenY);
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_ctrlKey = ctrlKey;
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_altKey = altKey;
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_shiftKey = shiftKey;
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_metaKey = metaKey;
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    initCoordinates(IntPoint(clientX, clientY));
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)const AtomicString& TouchEvent::interfaceName() const
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return eventNames().interfaceForTouchEvent;
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool TouchEvent::isTouchEvent() const
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return true;
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
93926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)PassRefPtr<TouchEventDispatchMediator> TouchEventDispatchMediator::create(PassRefPtr<TouchEvent> touchEvent)
94926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
95926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return adoptRef(new TouchEventDispatchMediator(touchEvent));
96926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
97926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
98926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)TouchEventDispatchMediator::TouchEventDispatchMediator(PassRefPtr<TouchEvent> touchEvent)
99926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    : EventDispatchMediator(touchEvent)
100926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
101926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
102926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
103926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)TouchEvent* TouchEventDispatchMediator::event() const
104926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
105926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return static_cast<TouchEvent*>(EventDispatchMediator::event());
106926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
107926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
108926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool TouchEventDispatchMediator::dispatchEvent(EventDispatcher* dispatcher) const
109926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
11053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    EventRetargeter::adjustForTouchEvent(dispatcher->node(), *event());
111926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return dispatcher->dispatch();
112926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
113926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace WebCore
115