Bumping manifests a=b2g-bump
[gecko.git] / dom / events / PointerEvent.cpp
blob3b3878ddffd8b83682a3fb653105d6869f9c1dfe
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
6 * Portions Copyright 2013 Microsoft Open Technologies, Inc. */
8 #include "mozilla/dom/PointerEvent.h"
9 #include "mozilla/MouseEvents.h"
10 #include "prtime.h"
12 namespace mozilla {
13 namespace dom {
15 PointerEvent::PointerEvent(EventTarget* aOwner,
16 nsPresContext* aPresContext,
17 WidgetPointerEvent* aEvent)
18 : MouseEvent(aOwner, aPresContext,
19 aEvent ? aEvent : new WidgetPointerEvent(false, 0, nullptr))
21 NS_ASSERTION(mEvent->mClass == ePointerEventClass,
22 "event type mismatch ePointerEventClass");
24 WidgetMouseEvent* mouseEvent = mEvent->AsMouseEvent();
25 if (aEvent) {
26 mEventIsInternal = false;
27 } else {
28 mEventIsInternal = true;
29 mEvent->time = PR_Now();
30 mEvent->refPoint.x = mEvent->refPoint.y = 0;
31 mouseEvent->inputSource = nsIDOMMouseEvent::MOZ_SOURCE_UNKNOWN;
35 static uint16_t
36 ConvertStringToPointerType(const nsAString& aPointerTypeArg)
38 if (aPointerTypeArg.EqualsLiteral("mouse")) {
39 return nsIDOMMouseEvent::MOZ_SOURCE_MOUSE;
41 if (aPointerTypeArg.EqualsLiteral("pen")) {
42 return nsIDOMMouseEvent::MOZ_SOURCE_PEN;
44 if (aPointerTypeArg.EqualsLiteral("touch")) {
45 return nsIDOMMouseEvent::MOZ_SOURCE_TOUCH;
48 return nsIDOMMouseEvent::MOZ_SOURCE_UNKNOWN;
51 void
52 ConvertPointerTypeToString(uint16_t aPointerTypeSrc, nsAString& aPointerTypeDest)
54 switch (aPointerTypeSrc) {
55 case nsIDOMMouseEvent::MOZ_SOURCE_MOUSE:
56 aPointerTypeDest.AssignLiteral("mouse");
57 break;
58 case nsIDOMMouseEvent::MOZ_SOURCE_PEN:
59 aPointerTypeDest.AssignLiteral("pen");
60 break;
61 case nsIDOMMouseEvent::MOZ_SOURCE_TOUCH:
62 aPointerTypeDest.AssignLiteral("touch");
63 break;
64 default:
65 aPointerTypeDest.Truncate();
66 break;
70 // static
71 already_AddRefed<PointerEvent>
72 PointerEvent::Constructor(EventTarget* aOwner,
73 const nsAString& aType,
74 const PointerEventInit& aParam)
76 nsRefPtr<PointerEvent> e = new PointerEvent(aOwner, nullptr, nullptr);
77 bool trusted = e->Init(aOwner);
79 e->InitMouseEvent(aType, aParam.mBubbles, aParam.mCancelable,
80 aParam.mView, aParam.mDetail, aParam.mScreenX,
81 aParam.mScreenY, aParam.mClientX, aParam.mClientY,
82 aParam.mCtrlKey, aParam.mAltKey, aParam.mShiftKey,
83 aParam.mMetaKey, aParam.mButton,
84 aParam.mRelatedTarget);
86 WidgetPointerEvent* widgetEvent = e->mEvent->AsPointerEvent();
87 widgetEvent->pointerId = aParam.mPointerId;
88 widgetEvent->width = aParam.mWidth;
89 widgetEvent->height = aParam.mHeight;
90 widgetEvent->pressure = aParam.mPressure;
91 widgetEvent->tiltX = aParam.mTiltX;
92 widgetEvent->tiltY = aParam.mTiltY;
93 widgetEvent->inputSource = ConvertStringToPointerType(aParam.mPointerType);
94 widgetEvent->isPrimary = aParam.mIsPrimary;
95 widgetEvent->buttons = aParam.mButtons;
97 e->SetTrusted(trusted);
98 return e.forget();
101 // static
102 already_AddRefed<PointerEvent>
103 PointerEvent::Constructor(const GlobalObject& aGlobal,
104 const nsAString& aType,
105 const PointerEventInit& aParam,
106 ErrorResult& aRv)
108 nsCOMPtr<EventTarget> owner = do_QueryInterface(aGlobal.GetAsSupports());
109 return Constructor(owner, aType, aParam);
112 void
113 PointerEvent::GetPointerType(nsAString& aPointerType)
115 ConvertPointerTypeToString(mEvent->AsPointerEvent()->inputSource, aPointerType);
118 int32_t
119 PointerEvent::PointerId()
121 return mEvent->AsPointerEvent()->pointerId;
124 int32_t
125 PointerEvent::Width()
127 return mEvent->AsPointerEvent()->width;
130 int32_t
131 PointerEvent::Height()
133 return mEvent->AsPointerEvent()->height;
136 float
137 PointerEvent::Pressure()
139 return mEvent->AsPointerEvent()->pressure;
142 int32_t
143 PointerEvent::TiltX()
145 return mEvent->AsPointerEvent()->tiltX;
148 int32_t
149 PointerEvent::TiltY()
151 return mEvent->AsPointerEvent()->tiltY;
154 bool
155 PointerEvent::IsPrimary()
157 return mEvent->AsPointerEvent()->isPrimary;
160 } // namespace dom
161 } // namespace mozilla
163 using namespace mozilla;
164 using namespace mozilla::dom;
166 nsresult
167 NS_NewDOMPointerEvent(nsIDOMEvent** aInstancePtrResult,
168 EventTarget* aOwner,
169 nsPresContext* aPresContext,
170 WidgetPointerEvent *aEvent)
172 PointerEvent *it = new PointerEvent(aOwner, aPresContext, aEvent);
173 NS_ADDREF(it);
174 *aInstancePtrResult = static_cast<Event*>(it);
175 return NS_OK;