Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(31)

Side by Side Diff: Source/web/WebInputEventConversion.cpp

Issue 727593003: Implement MouseEvent buttons attribute. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: nits Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/platform/RuntimeEnabledFeatures.in ('k') | Source/web/tests/WebFrameTest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2009 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 newModifiers |= PlatformEvent::ShiftKey; 105 newModifiers |= PlatformEvent::ShiftKey;
106 if (webModifiers & WebInputEvent::ControlKey) 106 if (webModifiers & WebInputEvent::ControlKey)
107 newModifiers |= PlatformEvent::CtrlKey; 107 newModifiers |= PlatformEvent::CtrlKey;
108 if (webModifiers & WebInputEvent::AltKey) 108 if (webModifiers & WebInputEvent::AltKey)
109 newModifiers |= PlatformEvent::AltKey; 109 newModifiers |= PlatformEvent::AltKey;
110 if (webModifiers & WebInputEvent::MetaKey) 110 if (webModifiers & WebInputEvent::MetaKey)
111 newModifiers |= PlatformEvent::MetaKey; 111 newModifiers |= PlatformEvent::MetaKey;
112 return newModifiers; 112 return newModifiers;
113 } 113 }
114 114
115 static unsigned toPlatformMouseEventModifiers(int webModifiers)
116 {
117 unsigned newModifiers = toPlatformEventModifiers(webModifiers);
118 if (webModifiers & WebInputEvent::LeftButtonDown)
119 newModifiers |= PlatformEvent::LeftButtonDown;
120 if (webModifiers & WebInputEvent::MiddleButtonDown)
121 newModifiers |= PlatformEvent::MiddleButtonDown;
122 if (webModifiers & WebInputEvent::RightButtonDown)
123 newModifiers |= PlatformEvent::RightButtonDown;
124 return newModifiers;
125 }
126
127 static unsigned toPlatformModifierFrom(WebMouseEvent::Button button)
128 {
129 if (button == WebMouseEvent::ButtonNone)
130 return 0;
131
132 unsigned webMouseButtonToPlatformModifier[] = {
133 PlatformEvent::LeftButtonDown,
134 PlatformEvent::MiddleButtonDown,
135 PlatformEvent::RightButtonDown
136 };
137
138 return webMouseButtonToPlatformModifier[button];
139 }
140
115 // MakePlatformMouseEvent ----------------------------------------------------- 141 // MakePlatformMouseEvent -----------------------------------------------------
116 142
117 PlatformMouseEventBuilder::PlatformMouseEventBuilder(Widget* widget, const WebMo useEvent& e) 143 PlatformMouseEventBuilder::PlatformMouseEventBuilder(Widget* widget, const WebMo useEvent& e)
118 { 144 {
119 // FIXME: Widget is always toplevel, unless it's a popup. We may be able 145 // FIXME: Widget is always toplevel, unless it's a popup. We may be able
120 // to get rid of this once we abstract popups into a WebKit API. 146 // to get rid of this once we abstract popups into a WebKit API.
121 m_position = widget->convertFromContainingWindow(flooredIntPoint(convertHitP ointToWindow(widget, IntPoint(e.x, e.y)))); 147 m_position = widget->convertFromContainingWindow(flooredIntPoint(convertHitP ointToWindow(widget, IntPoint(e.x, e.y))));
122 m_globalPosition = IntPoint(e.globalX, e.globalY); 148 m_globalPosition = IntPoint(e.globalX, e.globalY);
123 m_movementDelta = IntPoint(scaleDeltaToWindow(widget, e.movementX), scaleDel taToWindow(widget, e.movementY)); 149 m_movementDelta = IntPoint(scaleDeltaToWindow(widget, e.movementX), scaleDel taToWindow(widget, e.movementY));
124 m_button = static_cast<MouseButton>(e.button); 150 m_button = static_cast<MouseButton>(e.button);
125 m_modifiers = toPlatformEventModifiers(e.modifiers); 151 m_modifiers = toPlatformMouseEventModifiers(e.modifiers);
126 152
127 m_timestamp = e.timeStampSeconds; 153 m_timestamp = e.timeStampSeconds;
128 m_clickCount = e.clickCount; 154 m_clickCount = e.clickCount;
129 155
130 switch (e.type) { 156 switch (e.type) {
131 case WebInputEvent::MouseMove: 157 case WebInputEvent::MouseMove:
132 case WebInputEvent::MouseLeave: // synthesize a move event 158 case WebInputEvent::MouseLeave: // synthesize a move event
133 m_type = PlatformEvent::MouseMoved; 159 m_type = PlatformEvent::MouseMoved;
134 break; 160 break;
135 161
136 case WebInputEvent::MouseDown: 162 case WebInputEvent::MouseDown:
137 m_type = PlatformEvent::MousePressed; 163 m_type = PlatformEvent::MousePressed;
138 break; 164 break;
139 165
140 case WebInputEvent::MouseUp: 166 case WebInputEvent::MouseUp:
141 m_type = PlatformEvent::MouseReleased; 167 m_type = PlatformEvent::MouseReleased;
168
169 // The MouseEvent spec requires that buttons indicates the state
170 // immediately after the event takes place. To ensure consistency
171 // between platforms here, we explicitly clear the button that is
172 // in the process of being released.
173 m_modifiers &= ~toPlatformModifierFrom(e.button);
142 break; 174 break;
143 175
144 default: 176 default:
145 ASSERT_NOT_REACHED(); 177 ASSERT_NOT_REACHED();
146 } 178 }
147 } 179 }
148 180
149 // PlatformWheelEventBuilder -------------------------------------------------- 181 // PlatformWheelEventBuilder --------------------------------------------------
150 182
151 PlatformWheelEventBuilder::PlatformWheelEventBuilder(Widget* widget, const WebMo useWheelEvent& e) 183 PlatformWheelEventBuilder::PlatformWheelEventBuilder(Widget* widget, const WebMo useWheelEvent& e)
152 { 184 {
153 m_position = widget->convertFromContainingWindow(flooredIntPoint(convertHitP ointToWindow(widget, FloatPoint(e.x, e.y)))); 185 m_position = widget->convertFromContainingWindow(flooredIntPoint(convertHitP ointToWindow(widget, FloatPoint(e.x, e.y))));
154 m_globalPosition = IntPoint(e.globalX, e.globalY); 186 m_globalPosition = IntPoint(e.globalX, e.globalY);
155 m_deltaX = e.deltaX; 187 m_deltaX = e.deltaX;
156 m_deltaY = e.deltaY; 188 m_deltaY = e.deltaY;
157 m_wheelTicksX = e.wheelTicksX; 189 m_wheelTicksX = e.wheelTicksX;
158 m_wheelTicksY = e.wheelTicksY; 190 m_wheelTicksY = e.wheelTicksY;
159 m_granularity = e.scrollByPage ? 191 m_granularity = e.scrollByPage ?
160 ScrollByPageWheelEvent : ScrollByPixelWheelEvent; 192 ScrollByPageWheelEvent : ScrollByPixelWheelEvent;
161 193
162 m_type = PlatformEvent::Wheel; 194 m_type = PlatformEvent::Wheel;
163 195
164 m_modifiers = toPlatformEventModifiers(e.modifiers); 196 m_modifiers = toPlatformMouseEventModifiers(e.modifiers);
165 197
166 m_hasPreciseScrollingDeltas = e.hasPreciseScrollingDeltas; 198 m_hasPreciseScrollingDeltas = e.hasPreciseScrollingDeltas;
167 #if OS(MACOSX) 199 #if OS(MACOSX)
168 m_phase = static_cast<PlatformWheelEventPhase>(e.phase); 200 m_phase = static_cast<PlatformWheelEventPhase>(e.phase);
169 m_momentumPhase = static_cast<PlatformWheelEventPhase>(e.momentumPhase); 201 m_momentumPhase = static_cast<PlatformWheelEventPhase>(e.momentumPhase);
170 m_timestamp = e.timeStampSeconds; 202 m_timestamp = e.timeStampSeconds;
171 m_canRubberbandLeft = e.canRubberbandLeft; 203 m_canRubberbandLeft = e.canRubberbandLeft;
172 m_canRubberbandRight = e.canRubberbandRight; 204 m_canRubberbandRight = e.canRubberbandRight;
173 #endif 205 #endif
174 } 206 }
(...skipping 593 matching lines...) Expand 10 before | Expand all | Expand 10 after
768 modifiers = getWebInputModifiers(event); 800 modifiers = getWebInputModifiers(event);
769 801
770 globalX = event.screenX(); 802 globalX = event.screenX();
771 globalY = event.screenY(); 803 globalY = event.screenY();
772 IntPoint localPoint = convertAbsoluteLocationForRenderObject(event.absoluteL ocation(), *renderObject); 804 IntPoint localPoint = convertAbsoluteLocationForRenderObject(event.absoluteL ocation(), *renderObject);
773 x = localPoint.x(); 805 x = localPoint.x();
774 y = localPoint.y(); 806 y = localPoint.y();
775 } 807 }
776 808
777 } // namespace blink 809 } // namespace blink
OLDNEW
« no previous file with comments | « Source/platform/RuntimeEnabledFeatures.in ('k') | Source/web/tests/WebFrameTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698