1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
/*
* Copyright (C) 2001 Peter Kelly (pmk@post.com)
* Copyright (C) 2001 Tobias Anton (anton@stud.fbi.fh-darmstadt.de)
* Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com)
* Copyright (C) 2003, 2004, 2005, 2006, 2008, 2010 Apple Inc. All rights reserved.
* Copyright (C) 2013 Samsung Electronics. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public License
* along with this library; see the file COPYING.LIB. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
*/
#ifndef WheelEvent_h
#define WheelEvent_h
#include "core/events/EventDispatchMediator.h"
#include "core/events/MouseEvent.h"
#include "platform/geometry/FloatPoint.h"
namespace WebCore {
class PlatformWheelEvent;
struct WheelEventInit : public MouseEventInit {
WheelEventInit();
double deltaX;
double deltaY;
double deltaZ;
int wheelDeltaX; // Deprecated.
int wheelDeltaY; // Deprecated.
unsigned deltaMode;
};
class WheelEvent FINAL : public MouseEvent {
public:
enum { TickMultiplier = 120 };
enum DeltaMode {
DOM_DELTA_PIXEL = 0,
DOM_DELTA_LINE,
DOM_DELTA_PAGE
};
static PassRefPtrWillBeRawPtr<WheelEvent> create()
{
return adoptRefWillBeNoop(new WheelEvent);
}
static PassRefPtrWillBeRawPtr<WheelEvent> create(const AtomicString& type, const WheelEventInit& initializer)
{
return adoptRefWillBeNoop(new WheelEvent(type, initializer));
}
static PassRefPtrWillBeRawPtr<WheelEvent> create(const FloatPoint& wheelTicks,
const FloatPoint& rawDelta, unsigned deltaMode, PassRefPtrWillBeRawPtr<AbstractView> view,
const IntPoint& screenLocation, const IntPoint& pageLocation,
bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool directionInvertedFromDevice)
{
return adoptRefWillBeNoop(new WheelEvent(wheelTicks, rawDelta, deltaMode, view,
screenLocation, pageLocation, ctrlKey, altKey, shiftKey, metaKey, directionInvertedFromDevice));
}
void initWheelEvent(int rawDeltaX, int rawDeltaY, PassRefPtrWillBeRawPtr<AbstractView>,
int screenX, int screenY, int pageX, int pageY,
bool ctrlKey, bool altKey, bool shiftKey, bool metaKey);
void initWebKitWheelEvent(int rawDeltaX, int rawDeltaY, PassRefPtrWillBeRawPtr<AbstractView>,
int screenX, int screenY, int pageX, int pageY,
bool ctrlKey, bool altKey, bool shiftKey, bool metaKey);
double deltaX() const { return m_deltaX; } // Positive when scrolling right.
double deltaY() const { return m_deltaY; } // Positive when scrolling down.
double deltaZ() const { return m_deltaZ; }
int wheelDelta() const { return wheelDeltaY() ? wheelDeltaY() : wheelDeltaX(); } // Deprecated.
int wheelDeltaX() const { return m_wheelDelta.x(); } // Deprecated, negative when scrolling right.
int wheelDeltaY() const { return m_wheelDelta.y(); } // Deprecated, negative when scrolling down.
unsigned deltaMode() const { return m_deltaMode; }
float ticksX() const { return static_cast<float>(m_wheelDelta.x()) / TickMultiplier; }
float ticksY() const { return static_cast<float>(m_wheelDelta.y()) / TickMultiplier; }
bool webkitDirectionInvertedFromDevice() const { return m_directionInvertedFromDevice; }
virtual const AtomicString& interfaceName() const OVERRIDE;
virtual bool isMouseEvent() const OVERRIDE;
virtual bool isWheelEvent() const OVERRIDE;
virtual void trace(Visitor*) OVERRIDE;
private:
WheelEvent();
WheelEvent(const AtomicString&, const WheelEventInit&);
WheelEvent(const FloatPoint& wheelTicks, const FloatPoint& rawDelta,
unsigned, PassRefPtrWillBeRawPtr<AbstractView>, const IntPoint& screenLocation, const IntPoint& pageLocation,
bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool directionInvertedFromDevice);
IntPoint m_wheelDelta;
double m_deltaX;
double m_deltaY;
double m_deltaZ;
unsigned m_deltaMode;
bool m_directionInvertedFromDevice;
};
DEFINE_EVENT_TYPE_CASTS(WheelEvent);
class WheelEventDispatchMediator FINAL : public EventDispatchMediator {
public:
static PassRefPtrWillBeRawPtr<WheelEventDispatchMediator> create(const PlatformWheelEvent&, PassRefPtrWillBeRawPtr<AbstractView>);
private:
WheelEventDispatchMediator(const PlatformWheelEvent&, PassRefPtrWillBeRawPtr<AbstractView>);
WheelEvent* event() const;
virtual bool dispatchEvent(EventDispatcher*) const OVERRIDE;
};
} // namespace WebCore
#endif // WheelEvent_h
|