15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2011 Apple Inc. All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met:
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer.
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer in the
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    documentation and/or other materials provided with the distribution.
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THE POSSIBILITY OF SUCH DAMAGE.
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef PlatformEvent_h
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define PlatformEvent_h
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore {
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class PlatformEvent {
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public:
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    enum Type {
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        NoType = 0,
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // PlatformKeyboardEvent
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        KeyDown,
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        KeyUp,
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        RawKeyDown,
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        Char,
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // PlatformMouseEvent
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        MouseMoved,
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        MousePressed,
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        MouseReleased,
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        MouseScroll,
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // PlatformWheelEvent
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        Wheel,
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // PlatformGestureEvent
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        GestureScrollBegin,
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        GestureScrollEnd,
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        GestureScrollUpdate,
55926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        GestureScrollUpdateWithoutPropagation,
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        GestureTap,
5753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        GestureTapUnconfirmed,
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        GestureTapDown,
591e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        GestureShowPress,
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        GestureTapDownCancel,
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        GestureTwoFingerTap,
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        GestureLongPress,
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        GestureLongTap,
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        GesturePinchBegin,
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        GesturePinchEnd,
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        GesturePinchUpdate,
67e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)        GestureFlingStart,
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // PlatformTouchEvent
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TouchStart,
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TouchMove,
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TouchEnd,
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TouchCancel,
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    };
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    enum Modifiers {
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        AltKey      = 1 << 0,
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        CtrlKey     = 1 << 1,
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        MetaKey     = 1 << 2,
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ShiftKey    = 1 << 3,
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    };
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Type type() const { return static_cast<Type>(m_type); }
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool shiftKey() const { return m_modifiers & ShiftKey; }
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool ctrlKey() const { return m_modifiers & CtrlKey; }
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool altKey() const { return m_modifiers & AltKey; }
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool metaKey() const { return m_modifiers & MetaKey; }
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    unsigned modifiers() const { return m_modifiers; }
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    double timestamp() const { return m_timestamp; }
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected:
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    PlatformEvent()
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        : m_type(NoType)
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        , m_modifiers(0)
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        , m_timestamp(0)
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    explicit PlatformEvent(Type type)
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        : m_type(type)
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        , m_modifiers(0)
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        , m_timestamp(0)
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    PlatformEvent(Type type, Modifiers modifiers, double timestamp)
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        : m_type(type)
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        , m_modifiers(modifiers)
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        , m_timestamp(timestamp)
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    PlatformEvent(Type type, bool shiftKey, bool ctrlKey, bool altKey, bool metaKey, double timestamp)
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        : m_type(type)
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        , m_modifiers(0)
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        , m_timestamp(timestamp)
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (shiftKey)
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            m_modifiers |= ShiftKey;
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (ctrlKey)
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            m_modifiers |= CtrlKey;
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (altKey)
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            m_modifiers |= AltKey;
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (metaKey)
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            m_modifiers |= MetaKey;
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Explicit protected destructor so that people don't accidentally
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // delete a PlatformEvent.
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ~PlatformEvent()
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    unsigned m_type;
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    unsigned m_modifiers;
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    double m_timestamp;
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace WebCore
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // PlatformEvent_h
145