зеркало из https://github.com/mozilla/gecko-dev.git
160 строки
4.8 KiB
C++
160 строки
4.8 KiB
C++
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef mozilla_TouchEvents_h__
|
|
#define mozilla_TouchEvents_h__
|
|
|
|
#include <stdint.h>
|
|
|
|
#include "mozilla/dom/Touch.h"
|
|
#include "mozilla/MouseEvents.h"
|
|
#include "nsAutoPtr.h"
|
|
#include "nsIDOMSimpleGestureEvent.h"
|
|
#include "nsTArray.h"
|
|
|
|
namespace mozilla {
|
|
|
|
/******************************************************************************
|
|
* mozilla::WidgetGestureNotifyEvent
|
|
*
|
|
* This event is the first event generated when the user touches
|
|
* the screen with a finger, and it's meant to decide what kind
|
|
* of action we'll use for that touch interaction.
|
|
*
|
|
* The event is dispatched to the layout and based on what is underneath
|
|
* the initial contact point it's then decided if we should pan
|
|
* (finger scrolling) or drag the target element.
|
|
******************************************************************************/
|
|
|
|
class WidgetGestureNotifyEvent : public WidgetGUIEvent
|
|
{
|
|
public:
|
|
WidgetGestureNotifyEvent(bool aIsTrusted, uint32_t aMessage,
|
|
nsIWidget *aWidget) :
|
|
WidgetGUIEvent(aIsTrusted, aMessage, aWidget, NS_GESTURENOTIFY_EVENT),
|
|
panDirection(ePanNone), displayPanFeedback(false)
|
|
{
|
|
}
|
|
|
|
enum ePanDirection
|
|
{
|
|
ePanNone,
|
|
ePanVertical,
|
|
ePanHorizontal,
|
|
ePanBoth
|
|
};
|
|
|
|
ePanDirection panDirection;
|
|
bool displayPanFeedback;
|
|
|
|
// XXX Not tested by test_assign_event_data.html
|
|
void AssignGestureNotifyEventData(const WidgetGestureNotifyEvent& aEvent,
|
|
bool aCopyTargets)
|
|
{
|
|
AssignGUIEventData(aEvent, aCopyTargets);
|
|
|
|
panDirection = aEvent.panDirection;
|
|
displayPanFeedback = aEvent.displayPanFeedback;
|
|
}
|
|
};
|
|
|
|
/******************************************************************************
|
|
* mozilla::WidgetTouchEvent
|
|
******************************************************************************/
|
|
|
|
class WidgetSimpleGestureEvent : public WidgetMouseEventBase
|
|
{
|
|
public:
|
|
WidgetSimpleGestureEvent(bool aIsTrusted, uint32_t aMessage,
|
|
nsIWidget* aWidget, uint32_t aDirection,
|
|
double aDelta) :
|
|
WidgetMouseEventBase(aIsTrusted, aMessage, aWidget,
|
|
NS_SIMPLE_GESTURE_EVENT),
|
|
allowedDirections(0), direction(aDirection), delta(aDelta), clickCount(0)
|
|
{
|
|
}
|
|
|
|
WidgetSimpleGestureEvent(const nsSimpleGestureEvent& aOther) :
|
|
WidgetMouseEventBase(aOther.mFlags.mIsTrusted,
|
|
aOther.message, aOther.widget,
|
|
NS_SIMPLE_GESTURE_EVENT),
|
|
allowedDirections(aOther.allowedDirections), direction(aOther.direction),
|
|
delta(aOther.delta), clickCount(0)
|
|
{
|
|
}
|
|
|
|
// See nsIDOMSimpleGestureEvent for values
|
|
uint32_t allowedDirections;
|
|
// See nsIDOMSimpleGestureEvent for values
|
|
uint32_t direction;
|
|
// Delta for magnify and rotate events
|
|
double delta;
|
|
// The number of taps for tap events
|
|
uint32_t clickCount;
|
|
|
|
// XXX Not tested by test_assign_event_data.html
|
|
void AssignSimpleGestureEventData(const WidgetSimpleGestureEvent& aEvent,
|
|
bool aCopyTargets)
|
|
{
|
|
AssignMouseEventBaseData(aEvent, aCopyTargets);
|
|
|
|
// allowedDirections isn't copied
|
|
direction = aEvent.direction;
|
|
delta = aEvent.delta;
|
|
clickCount = aEvent.clickCount;
|
|
}
|
|
};
|
|
|
|
/******************************************************************************
|
|
* mozilla::WidgetTouchEvent
|
|
******************************************************************************/
|
|
|
|
class WidgetTouchEvent : public WidgetInputEvent
|
|
{
|
|
public:
|
|
WidgetTouchEvent()
|
|
{
|
|
}
|
|
|
|
WidgetTouchEvent(bool aIsTrusted, WidgetTouchEvent* aEvent) :
|
|
WidgetInputEvent(aIsTrusted, aEvent->message, aEvent->widget,
|
|
NS_TOUCH_EVENT)
|
|
{
|
|
modifiers = aEvent->modifiers;
|
|
time = aEvent->time;
|
|
touches.AppendElements(aEvent->touches);
|
|
MOZ_COUNT_CTOR(WidgetTouchEvent);
|
|
}
|
|
|
|
WidgetTouchEvent(bool aIsTrusted, uint32_t aMessage, nsIWidget* aWidget) :
|
|
WidgetInputEvent(aIsTrusted, aMessage, aWidget, NS_TOUCH_EVENT)
|
|
{
|
|
MOZ_COUNT_CTOR(WidgetTouchEvent);
|
|
}
|
|
|
|
~WidgetTouchEvent()
|
|
{
|
|
MOZ_COUNT_DTOR(WidgetTouchEvent);
|
|
}
|
|
|
|
nsTArray<nsRefPtr<mozilla::dom::Touch>> touches;
|
|
|
|
void AssignTouchEventData(const nsTouchEvent& aEvent, bool aCopyTargets)
|
|
{
|
|
AssignInputEventData(aEvent, aCopyTargets);
|
|
|
|
// Currently, we don't need to copy touches.
|
|
}
|
|
};
|
|
|
|
} // namespace mozilla
|
|
|
|
// TODO: Remove following typedefs
|
|
typedef mozilla::WidgetGestureNotifyEvent nsGestureNotifyEvent;
|
|
typedef mozilla::WidgetSimpleGestureEvent nsSimpleGestureEvent;
|
|
typedef mozilla::WidgetTouchEvent nsTouchEvent;
|
|
|
|
#endif // mozilla_TouchEvents_h__
|