mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-05-26 23:06:52 +00:00
795ba7b999
- Bug 1222092. Don't let sFocusedIMEWidget keep an nsIWidget alive during shutdown. r=masayuki (f604e32bda) - Bug 1186795 (part 1) - Replace nsBaseHashtable::EnumerateRead() calls in widget/ with iterators. r=roc. (65077bd952) - Bug 1186795 (part 2) - Replace nsBaseHashtable::EnumerateRead() calls in widget/ with iterators. r=roc. (b468993d9a) - Bug 1186795 (part 3) - Replace nsBaseHashtable::EnumerateRead() calls in widget/ with iterators. r=roc. (29946ed0ce) - Bug 1217251 - Add APZThreadUtils::RunDelayedTaskOnCurrentThread(). r=kats (0a89e92202) - Bug 1223946 - Part 1: Clean up and support needed for converting WidgetWheelEvent to ScrollWheelInput. r=kats (faf54e7920) - Bug 1223946 - Part 2: Ensure wheel event from nsDOMWindowUtil is dispatched on correct thread. r=kats (571d591345) - Bug 1210912 - fix widget leak in LookupRegisteredPluginWindow; r=roc (f224933634) - Bug 1188225 - Implement ChromeProcessController::HandleDoubleTap. r=botond (ffc65ffec1) - Bug 1221371 - Remove unnecessary explicit copies of nsTArray. r=billm (3178318eb5) - Bug 1218991 - Save initial zoom constraints to be used once compositor is created r=kats (4017bdc17d) - Bug 1217818 - Add some more logging to more easily diagnose issues. r=botond (2a1480e209) - Bug 1219898 - Remove use of gPreventMouseEvents in APZ event state-tracking code. r=botond (d6877aaedf) - Bug 1211612 - Add DragInputBlock for async scrollbars. r=kats (6bfbcccead) - Bug 1225007 (part 1, attempt 3) - Use LayoutDevicePixel more in Cocoa widget code. r=kats. (e4078ce0ad) - Bug 1225007 (part 2, attempt 3) - Use LayoutDevicePixel more in Cocoa widget code. r=kats. (0db998bf01) - Bug 1214662 - Fix compile error for enabling APZES_LOG. r=botond (c316ba99cd) - Bug 1223296 - Clear element activation if a contextmenu is displayed. r=botond (e362ffcf8d) - Bug 1217818 - Minor refactoring to reuse a function. r=botond (c0c29e2b90) - Bug 1217818 - Ignore injected touchstart events for the purposes of prevent-default notifications back to APZ. r=botond (b740525b61) - Bug 1223296 - Turn HandlePanStart into a more generic function that can be called from other places. r=botond (d10991094a) - Bug 1223296 - Fire the MozMouseHittest event even if the C++ APZ is enabled. r=rbarker,botond (cdd7523a3b) - Bug 1184890 part.1 SelectionChangeDataBase and TextChangeDataBase should have a flag which indicates whether the change occurred during composition or not r=smaug (e10f782acb) - Bug 1184890 part.2 IMContextWrapper shouldn't commit composition when a selection change notification occurred before starting current composition r=m_kato (8f377bfc36) - Bug 1184890 part.3 TSFTextStore shouldn't commit composition when a selection change notification occurred before starting current composition r=m_kato (b55102256e) - Bug 1216177 - Remove the remaining nsRefPtr forward declarations; r=froydnj (a3674552c3) - Bug 1225571 - Move the code to update the SPCSPS from repaint request handling to when the resolution is updated in the presShell. r=botond (a7d1909ed5) - bug 1181823 - convert test_ev_certs.js, test_keysize_ev.js, and test_validity.js to generate certificates at build time r=Cykesiopka r=mgoodwin (19a2678625) - Bug 1189166 - Cleanup some PSM test generation files post Bug 1181823. r=dkeeler (fad638b365) - Bug 1170388 - Removed an outdated workaround for old clang versions in the static analysis plugin. r=mystor (0c8e0229e7) - Bug 1208814 - Part 1: Add an analysis to prevent default copy constructors from being called on refcounted objects, r=ehsan (6a8605808e) - Bug 1208814 - Part 2: Don't use the default copy constructor in nsNavHistoryQuery::Clone(), r=ehsan (6de5b8a04c) - Bug 1201314 - Make most of std:: non-memmovable for static analysis purposes. r=mystor r=ehsan (3a50302fb6) - fix refptr (70035b7976) - Bug 1223966: Don't claim we support NSTextInput interface. r=masayuki (ab702c6718) - Bug 431620 - Remove unused function GetToggledKeyState [r=roc] (0c7140855c) - bug 1203312 - convert tlsserver to generate certificates at build time r=Cykesiopka,mgoodwin (ada3c01c00) - Bug 1194419 - Remove signature algorithm duplicate use in serial number determination in pycert. r=keeler (37c2fbe839) - Bug 1210180 - Force the view to update when we recycle a Vibrancy view. r=mstange (33490daf1f) - Bug 1142393 - Make menus look correct when 'Reduce transparency' is set. r=smichaud (0d8a1b9b7f) - Bug 1119106 - Add an explanatory comment. r=smichaud (1e44196dad) - Bug 1119106 - Increase the maximum focus ring width on 10.10 to 7 pixels. r=smichaud (1af85f99e8) - Bug 1119106 - Give these enums better names. r=smichaud (65886bdab6) - Bug 1153579 - Fix -Wsign-compare warnings in nsNativeThemeCocoa.mm about int and size_t. r=mstange (d682b281df) - some crash reporter stuff (3157fa0f2d) - bug 726483 remove unnecessary DispatchResized() parameters r=roc (02051fd152) - Bug 1208829 - Make FromUnknownRegion() actually work, and add ToUnknownRegion(). r=mstange (5a087ad3aa) - Bug 1180564: Don't implement NSTextInput any more, just NSTextInputClient. r=masayuki (7611a0d77c) - Bug 1180564: insertNewline should use TextInputHandler::InsertText() instead of using insertText of NSTextInput protocol r=masayuki (dc11c738b9) - Bug 1124408 - Report cocoa view focus correctly when sheets are exposed. r=masayuki,smichaud (34a6a32d8b) - Bug 1138678 - Ignore NOTIFY_IME_OF_BLUR when establishing secure input mode. r=masayuki (4d7b10e8a2) - Bug 1148196 - Crashes at -[ChildView keyDown:] related to secure input. r=masayuki (0cbd54b9cf) - Bug 1211352 part.1 IMEContentObserver should be created when a plugin has focus r=smaug (4500259e6f) - Bug 1211352 part.2 PuppetWidget shouldn't send notifications which are not wanted by the parent process r=m_kato (2557aa51b2) - Bug 1007063 - Show virtual (on-screen) keyboard in Windows 8 and higher when text fields are focused if physical keyboards are not present. r=jimm r=masayuki r=m_kato (9d2c1e62d0) - Bug 1211352 part.3 nsIWidget::GetIMEupdatePreference() for each platform should not request any notifications while a plugin has focus r=m_kato (1aa357bc9d) - Bug 1211352 part.4 PuppetWidget::GetIMEUpdatePreference() should request only position change notifications while a plugin has focus r=m_kato (470fb900d6) - Bug 1211352 part.5 PuppetWidget should cache only the focused editor rect information while a plugin has focus r=m_kato (73e7521d3c) - Bug 1223366 - Update event.buttons on GDK_BUTTON_RELEASE [r=karlt] (107c793c5a) - bug 726483 keep an extra reference to the window r=roc (4e6756939f) - Bug 1186745 part 1 - Add LeakRefPtr for pointer leaking by default. r=froydnj (b7260528df) - Bug 1186745 part 2 - Move nsThreadSyncDispatch class to its own header file. r=froydnj (f408ef41da) - Bug 1186745 part 3 - Make nsThreadSyncDispatch leak the sync task by default when Run() is not called. r=froydnj (17092e33ab) - Bug 1186745 part 4 - Make TracedRunnable accept an already_AddRefed instead of a raw pointer. r=froydnj (8e59e1d0c9) - Bug 1186745 part 5 - Make nsThread::Dispatch() always leak the event if it fails. r=froydnj (220b91529a) - Bug 1186745 part 6 - Fix event leak when using NS_DispatchToCurrentThread. r=froydnj (55a4177f2e) - some crashreporter stuff (a5a59bd6ac) - bug 726483 avoid DispatchResized() during size-allocate r=roc (08ae527f93) - Bug 1212733, cache dnd window state instead of using gtk_window_get_type_hint, r=karlt (c9ee119926) - Bug 1131978 - Acknowledge GDK's scale factor in scale calculation. r=karlt (7280d547b8) - bug 1180008 provide gtk_window_get_window_type for old GTK versions r=glandium (3f7f17ac69) - Bug 1174374 - gdk_cursor_new() is deprecated in 3.16. Use gdk_cursor_new_for_display(). r=karlt (90e2e738f7)
415 lines
12 KiB
C++
415 lines
12 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/. */
|
|
|
|
#include "InputData.h"
|
|
|
|
#include "mozilla/dom/Touch.h"
|
|
#include "nsDebug.h"
|
|
#include "nsThreadUtils.h"
|
|
#include "mozilla/MouseEvents.h"
|
|
#include "mozilla/TouchEvents.h"
|
|
#include "UnitTransforms.h"
|
|
|
|
namespace mozilla {
|
|
|
|
using namespace dom;
|
|
|
|
already_AddRefed<Touch> SingleTouchData::ToNewDOMTouch() const
|
|
{
|
|
MOZ_ASSERT(NS_IsMainThread(),
|
|
"Can only create dom::Touch instances on main thread");
|
|
RefPtr<Touch> touch = new Touch(mIdentifier,
|
|
LayoutDeviceIntPoint(mScreenPoint.x, mScreenPoint.y),
|
|
LayoutDeviceIntPoint(mRadius.width, mRadius.height),
|
|
mRotationAngle,
|
|
mForce);
|
|
return touch.forget();
|
|
}
|
|
|
|
MouseInput::MouseInput(const WidgetMouseEventBase& aMouseEvent)
|
|
: InputData(MOUSE_INPUT, aMouseEvent.time, aMouseEvent.timeStamp,
|
|
aMouseEvent.modifiers)
|
|
{
|
|
MOZ_ASSERT(NS_IsMainThread(),
|
|
"Can only copy from WidgetTouchEvent on main thread");
|
|
|
|
mButtonType = NONE;
|
|
|
|
switch (aMouseEvent.button) {
|
|
case WidgetMouseEventBase::eLeftButton:
|
|
mButtonType = MouseInput::LEFT_BUTTON;
|
|
break;
|
|
case WidgetMouseEventBase::eMiddleButton:
|
|
mButtonType = MouseInput::MIDDLE_BUTTON;
|
|
break;
|
|
case WidgetMouseEventBase::eRightButton:
|
|
mButtonType = MouseInput::RIGHT_BUTTON;
|
|
break;
|
|
}
|
|
|
|
switch (aMouseEvent.mMessage) {
|
|
case eMouseMove:
|
|
mType = MOUSE_MOVE;
|
|
break;
|
|
case eMouseUp:
|
|
mType = MOUSE_UP;
|
|
break;
|
|
case eMouseDown:
|
|
mType = MOUSE_DOWN;
|
|
break;
|
|
case eDragStart:
|
|
mType = MOUSE_DRAG_START;
|
|
break;
|
|
case eDragEnd:
|
|
mType = MOUSE_DRAG_END;
|
|
break;
|
|
default:
|
|
MOZ_ASSERT_UNREACHABLE("Mouse event type not supported");
|
|
break;
|
|
}
|
|
}
|
|
|
|
bool
|
|
MouseInput::TransformToLocal(const gfx::Matrix4x4& aTransform)
|
|
{
|
|
Maybe<ParentLayerPoint> point = UntransformTo<ParentLayerPixel>(aTransform, mOrigin);
|
|
if (!point) {
|
|
return false;
|
|
}
|
|
mLocalOrigin = *point;
|
|
|
|
return true;
|
|
}
|
|
|
|
MultiTouchInput::MultiTouchInput(const WidgetTouchEvent& aTouchEvent)
|
|
: InputData(MULTITOUCH_INPUT, aTouchEvent.time, aTouchEvent.timeStamp,
|
|
aTouchEvent.modifiers)
|
|
{
|
|
MOZ_ASSERT(NS_IsMainThread(),
|
|
"Can only copy from WidgetTouchEvent on main thread");
|
|
|
|
switch (aTouchEvent.mMessage) {
|
|
case eTouchStart:
|
|
mType = MULTITOUCH_START;
|
|
break;
|
|
case eTouchMove:
|
|
mType = MULTITOUCH_MOVE;
|
|
break;
|
|
case eTouchEnd:
|
|
mType = MULTITOUCH_END;
|
|
break;
|
|
case eTouchCancel:
|
|
mType = MULTITOUCH_CANCEL;
|
|
break;
|
|
default:
|
|
MOZ_ASSERT_UNREACHABLE("Did not assign a type to a MultiTouchInput");
|
|
break;
|
|
}
|
|
|
|
for (size_t i = 0; i < aTouchEvent.touches.Length(); i++) {
|
|
const Touch* domTouch = aTouchEvent.touches[i];
|
|
|
|
// Extract data from weird interfaces.
|
|
int32_t identifier = domTouch->Identifier();
|
|
int32_t radiusX = domTouch->RadiusX();
|
|
int32_t radiusY = domTouch->RadiusY();
|
|
float rotationAngle = domTouch->RotationAngle();
|
|
float force = domTouch->Force();
|
|
|
|
SingleTouchData data(identifier,
|
|
ViewAs<ScreenPixel>(domTouch->mRefPoint,
|
|
PixelCastJustification::LayoutDeviceIsScreenForUntransformedEvent),
|
|
ScreenSize(radiusX, radiusY),
|
|
rotationAngle,
|
|
force);
|
|
|
|
mTouches.AppendElement(data);
|
|
}
|
|
}
|
|
|
|
WidgetTouchEvent
|
|
MultiTouchInput::ToWidgetTouchEvent(nsIWidget* aWidget) const
|
|
{
|
|
MOZ_ASSERT(NS_IsMainThread(),
|
|
"Can only convert To WidgetTouchEvent on main thread");
|
|
|
|
EventMessage touchEventMessage = eVoidEvent;
|
|
switch (mType) {
|
|
case MULTITOUCH_START:
|
|
touchEventMessage = eTouchStart;
|
|
break;
|
|
case MULTITOUCH_MOVE:
|
|
touchEventMessage = eTouchMove;
|
|
break;
|
|
case MULTITOUCH_END:
|
|
touchEventMessage = eTouchEnd;
|
|
break;
|
|
case MULTITOUCH_CANCEL:
|
|
touchEventMessage = eTouchCancel;
|
|
break;
|
|
default:
|
|
MOZ_ASSERT_UNREACHABLE("Did not assign a type to WidgetTouchEvent in MultiTouchInput");
|
|
break;
|
|
}
|
|
|
|
WidgetTouchEvent event(true, touchEventMessage, aWidget);
|
|
if (touchEventMessage == eVoidEvent) {
|
|
return event;
|
|
}
|
|
|
|
event.modifiers = this->modifiers;
|
|
event.time = this->mTime;
|
|
event.timeStamp = this->mTimeStamp;
|
|
|
|
for (size_t i = 0; i < mTouches.Length(); i++) {
|
|
*event.touches.AppendElement() = mTouches[i].ToNewDOMTouch();
|
|
}
|
|
|
|
return event;
|
|
}
|
|
|
|
WidgetMouseEvent
|
|
MultiTouchInput::ToWidgetMouseEvent(nsIWidget* aWidget) const
|
|
{
|
|
MOZ_ASSERT(NS_IsMainThread(),
|
|
"Can only convert To WidgetMouseEvent on main thread");
|
|
|
|
EventMessage mouseEventMessage = eVoidEvent;
|
|
switch (mType) {
|
|
case MultiTouchInput::MULTITOUCH_START:
|
|
mouseEventMessage = eMouseDown;
|
|
break;
|
|
case MultiTouchInput::MULTITOUCH_MOVE:
|
|
mouseEventMessage = eMouseMove;
|
|
break;
|
|
case MultiTouchInput::MULTITOUCH_CANCEL:
|
|
case MultiTouchInput::MULTITOUCH_END:
|
|
mouseEventMessage = eMouseUp;
|
|
break;
|
|
default:
|
|
MOZ_ASSERT_UNREACHABLE("Did not assign a type to WidgetMouseEvent");
|
|
break;
|
|
}
|
|
|
|
WidgetMouseEvent event(true, mouseEventMessage, aWidget,
|
|
WidgetMouseEvent::eReal, WidgetMouseEvent::eNormal);
|
|
|
|
const SingleTouchData& firstTouch = mTouches[0];
|
|
event.refPoint.x = firstTouch.mScreenPoint.x;
|
|
event.refPoint.y = firstTouch.mScreenPoint.y;
|
|
|
|
event.time = mTime;
|
|
event.button = WidgetMouseEvent::eLeftButton;
|
|
event.inputSource = nsIDOMMouseEvent::MOZ_SOURCE_TOUCH;
|
|
event.modifiers = modifiers;
|
|
|
|
if (mouseEventMessage != eMouseMove) {
|
|
event.clickCount = 1;
|
|
}
|
|
|
|
return event;
|
|
}
|
|
|
|
int32_t
|
|
MultiTouchInput::IndexOfTouch(int32_t aTouchIdentifier)
|
|
{
|
|
for (size_t i = 0; i < mTouches.Length(); i++) {
|
|
if (mTouches[i].mIdentifier == aTouchIdentifier) {
|
|
return (int32_t)i;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
// This conversion from WidgetMouseEvent to MultiTouchInput is needed because on
|
|
// the B2G emulator we can only receive mouse events, but we need to be able
|
|
// to pan correctly. To do this, we convert the events into a format that the
|
|
// panning code can handle. This code is very limited and only supports
|
|
// SingleTouchData. It also sends garbage for the identifier, radius, force
|
|
// and rotation angle.
|
|
MultiTouchInput::MultiTouchInput(const WidgetMouseEvent& aMouseEvent)
|
|
: InputData(MULTITOUCH_INPUT, aMouseEvent.time, aMouseEvent.timeStamp,
|
|
aMouseEvent.modifiers)
|
|
{
|
|
MOZ_ASSERT(NS_IsMainThread(),
|
|
"Can only copy from WidgetMouseEvent on main thread");
|
|
switch (aMouseEvent.mMessage) {
|
|
case eMouseDown:
|
|
mType = MULTITOUCH_START;
|
|
break;
|
|
case eMouseMove:
|
|
mType = MULTITOUCH_MOVE;
|
|
break;
|
|
case eMouseUp:
|
|
mType = MULTITOUCH_END;
|
|
break;
|
|
// The mouse pointer has been interrupted in an implementation-specific
|
|
// manner, such as a synchronous event or action cancelling the touch, or a
|
|
// touch point leaving the document window and going into a non-document
|
|
// area capable of handling user interactions.
|
|
case eMouseExitFromWidget:
|
|
mType = MULTITOUCH_CANCEL;
|
|
break;
|
|
default:
|
|
NS_WARNING("Did not assign a type to a MultiTouchInput");
|
|
break;
|
|
}
|
|
|
|
mTouches.AppendElement(SingleTouchData(0,
|
|
ViewAs<ScreenPixel>(aMouseEvent.refPoint,
|
|
PixelCastJustification::LayoutDeviceIsScreenForUntransformedEvent),
|
|
ScreenSize(1, 1),
|
|
180.0f,
|
|
1.0f));
|
|
}
|
|
|
|
bool
|
|
MultiTouchInput::TransformToLocal(const gfx::Matrix4x4& aTransform)
|
|
{
|
|
for (size_t i = 0; i < mTouches.Length(); i++) {
|
|
Maybe<ParentLayerIntPoint> point = UntransformTo<ParentLayerPixel>(aTransform, mTouches[i].mScreenPoint);
|
|
if (!point) {
|
|
return false;
|
|
}
|
|
mTouches[i].mLocalScreenPoint = *point;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool
|
|
PanGestureInput::IsMomentum() const
|
|
{
|
|
switch (mType) {
|
|
case PanGestureInput::PANGESTURE_MOMENTUMSTART:
|
|
case PanGestureInput::PANGESTURE_MOMENTUMPAN:
|
|
case PanGestureInput::PANGESTURE_MOMENTUMEND:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
WidgetWheelEvent
|
|
PanGestureInput::ToWidgetWheelEvent(nsIWidget* aWidget) const
|
|
{
|
|
WidgetWheelEvent wheelEvent(true, eWheel, aWidget);
|
|
wheelEvent.modifiers = this->modifiers;
|
|
wheelEvent.time = mTime;
|
|
wheelEvent.timeStamp = mTimeStamp;
|
|
wheelEvent.refPoint =
|
|
RoundedToInt(ViewAs<LayoutDevicePixel>(mPanStartPoint,
|
|
PixelCastJustification::LayoutDeviceIsScreenForUntransformedEvent));
|
|
wheelEvent.buttons = 0;
|
|
wheelEvent.deltaMode = nsIDOMWheelEvent::DOM_DELTA_PIXEL;
|
|
wheelEvent.isMomentum = IsMomentum();
|
|
wheelEvent.lineOrPageDeltaX = mLineOrPageDeltaX;
|
|
wheelEvent.lineOrPageDeltaY = mLineOrPageDeltaY;
|
|
wheelEvent.deltaX = mPanDisplacement.x;
|
|
wheelEvent.deltaY = mPanDisplacement.y;
|
|
wheelEvent.mFlags.mHandledByAPZ = mHandledByAPZ;
|
|
return wheelEvent;
|
|
}
|
|
|
|
bool
|
|
PanGestureInput::TransformToLocal(const gfx::Matrix4x4& aTransform)
|
|
{
|
|
Maybe<ParentLayerPoint> panStartPoint = UntransformTo<ParentLayerPixel>(aTransform, mPanStartPoint);
|
|
if (!panStartPoint) {
|
|
return false;
|
|
}
|
|
mLocalPanStartPoint = *panStartPoint;
|
|
|
|
Maybe<ParentLayerPoint> panDisplacement = UntransformVector<ParentLayerPixel>(aTransform, mPanDisplacement, mPanStartPoint);
|
|
if (!panDisplacement) {
|
|
return false;
|
|
}
|
|
mLocalPanDisplacement = *panDisplacement;
|
|
return true;
|
|
}
|
|
|
|
bool
|
|
PinchGestureInput::TransformToLocal(const gfx::Matrix4x4& aTransform)
|
|
{
|
|
Maybe<ParentLayerPoint> point = UntransformTo<ParentLayerPixel>(aTransform, mFocusPoint);
|
|
if (!point) {
|
|
return false;
|
|
}
|
|
mLocalFocusPoint = *point;
|
|
return true;
|
|
}
|
|
|
|
bool
|
|
TapGestureInput::TransformToLocal(const gfx::Matrix4x4& aTransform)
|
|
{
|
|
Maybe<ParentLayerIntPoint> point = UntransformTo<ParentLayerPixel>(aTransform, mPoint);
|
|
if (!point) {
|
|
return false;
|
|
}
|
|
mLocalPoint = *point;
|
|
return true;
|
|
}
|
|
|
|
static uint32_t
|
|
DeltaModeForDeltaType(ScrollWheelInput::ScrollDeltaType aDeltaType)
|
|
{
|
|
switch (aDeltaType) {
|
|
case ScrollWheelInput::SCROLLDELTA_LINE:
|
|
return nsIDOMWheelEvent::DOM_DELTA_LINE;
|
|
case ScrollWheelInput::SCROLLDELTA_PIXEL:
|
|
default:
|
|
return nsIDOMWheelEvent::DOM_DELTA_PIXEL;
|
|
}
|
|
}
|
|
|
|
ScrollWheelInput::ScrollWheelInput(const WidgetWheelEvent& aWheelEvent) :
|
|
InputData(SCROLLWHEEL_INPUT, aWheelEvent.time, aWheelEvent.timeStamp, aWheelEvent.modifiers),
|
|
mDeltaType(DeltaTypeForDeltaMode(aWheelEvent.deltaMode)),
|
|
mScrollMode(SCROLLMODE_INSTANT),
|
|
mHandledByAPZ(aWheelEvent.mFlags.mHandledByAPZ),
|
|
mDeltaX(aWheelEvent.deltaX),
|
|
mDeltaY(aWheelEvent.deltaY),
|
|
mLineOrPageDeltaX(aWheelEvent.lineOrPageDeltaX),
|
|
mLineOrPageDeltaY(aWheelEvent.lineOrPageDeltaY),
|
|
mIsMomentum(aWheelEvent.isMomentum)
|
|
{
|
|
mOrigin =
|
|
ScreenPoint(ViewAs<ScreenPixel>(aWheelEvent.refPoint,
|
|
PixelCastJustification::LayoutDeviceIsScreenForUntransformedEvent));
|
|
}
|
|
|
|
WidgetWheelEvent
|
|
ScrollWheelInput::ToWidgetWheelEvent(nsIWidget* aWidget) const
|
|
{
|
|
WidgetWheelEvent wheelEvent(true, eWheel, aWidget);
|
|
wheelEvent.modifiers = this->modifiers;
|
|
wheelEvent.time = mTime;
|
|
wheelEvent.timeStamp = mTimeStamp;
|
|
wheelEvent.refPoint =
|
|
RoundedToInt(ViewAs<LayoutDevicePixel>(mOrigin,
|
|
PixelCastJustification::LayoutDeviceIsScreenForUntransformedEvent));
|
|
wheelEvent.buttons = 0;
|
|
wheelEvent.deltaMode = DeltaModeForDeltaType(mDeltaType);
|
|
wheelEvent.isMomentum = mIsMomentum;
|
|
wheelEvent.deltaX = mDeltaX;
|
|
wheelEvent.deltaY = mDeltaY;
|
|
wheelEvent.lineOrPageDeltaX = mLineOrPageDeltaX;
|
|
wheelEvent.lineOrPageDeltaY = mLineOrPageDeltaY;
|
|
wheelEvent.mFlags.mHandledByAPZ = mHandledByAPZ;
|
|
return wheelEvent;
|
|
}
|
|
|
|
bool
|
|
ScrollWheelInput::TransformToLocal(const gfx::Matrix4x4& aTransform)
|
|
{
|
|
Maybe<ParentLayerPoint> point = UntransformTo<ParentLayerPixel>(aTransform, mOrigin);
|
|
if (!point) {
|
|
return false;
|
|
}
|
|
mLocalOrigin = *point;
|
|
return true;
|
|
}
|
|
|
|
} // namespace mozilla
|