WebMouseEvent WebEventFactory::createWebMouseEvent(const GdkEvent* event, int currentClickCount) { double x, y, xRoot, yRoot; gdk_event_get_coords(event, &x, &y); gdk_event_get_root_coords(event, &xRoot, &yRoot); WebEvent::Type type = static_cast<WebEvent::Type>(0); switch (event->type) { case GDK_MOTION_NOTIFY: type = WebEvent::MouseMove; break; case GDK_BUTTON_PRESS: case GDK_2BUTTON_PRESS: case GDK_3BUTTON_PRESS: type = WebEvent::MouseDown; break; case GDK_BUTTON_RELEASE: type = WebEvent::MouseUp; break; default : ASSERT_NOT_REACHED(); } return WebMouseEvent(type, buttonForEvent(event), IntPoint(x, y), IntPoint(xRoot, yRoot), 0 /* deltaX */, 0 /* deltaY */, 0 /* deltaZ */, currentClickCount, modifiersForEvent(event), gdk_event_get_time(event)); }
WebMouseEvent WebEventFactory::createWebMouseEvent(WPE::Input::PointerEvent&& event) { WebEvent::Type type = WebEvent::NoType; switch (event.type) { case WPE::Input::PointerEvent::Motion: type = WebEvent::MouseMove; break; case WPE::Input::PointerEvent::Button: type = event.state ? WebEvent::MouseDown : WebEvent::MouseUp; break; case WPE::Input::PointerEvent::Null: ASSERT_NOT_REACHED(); } WebMouseEvent::Button button = WebMouseEvent::NoButton; switch (event.type) { case WPE::Input::PointerEvent::Motion: break; case WPE::Input::PointerEvent::Button: if (event.button == 1) button = WebMouseEvent::LeftButton; else if (event.button == 2) button = WebMouseEvent::RightButton; else if (event.button == 3) button = WebMouseEvent::MiddleButton; break; case WPE::Input::PointerEvent::Null: ASSERT_NOT_REACHED(); } // FIXME: Proper button support. Modifiers. deltaX/Y/Z. Click count. WebCore::IntPoint position(event.x, event.y); return WebMouseEvent(type, button, position, position, 0, 0, 0, 1, static_cast<WebEvent::Modifiers>(0), event.time); }
WebMouseEvent WebEventFactory::createWebMouseEvent(const Evas_Event_Mouse_Move* event, const AffineTransform& toWebContent, const AffineTransform& toDeviceScreen) { IntPoint pos(event->cur.canvas.x, event->cur.canvas.y); return WebMouseEvent(WebEvent::MouseMove, buttonForEvent(event->buttons), toWebContent.mapPoint(pos), toDeviceScreen.mapPoint(pos), 0 /* deltaX */, 0 /* deltaY */, 0 /* deltaZ */, 0 /* clickCount */, modifiersForEvent(event->modifiers), convertMillisecondToSecond(event->timestamp)); }
WebMouseEvent WebEventFactory::createWebMouseEvent(QMouseEvent* event, const QTransform& fromItemTransform, int eventClickCount) { static FloatPoint lastPos = FloatPoint(0, 0); WebEvent::Type type = webEventTypeForEvent(event); WebMouseEvent::Button button = mouseButtonForEvent(event); float deltaX = event->pos().x() - lastPos.x(); float deltaY = event->pos().y() - lastPos.y(); int clickCount = eventClickCount; WebEvent::Modifiers modifiers = modifiersForEvent(event->modifiers()); double timestamp = currentTimeForEvent(event); lastPos.set(event->localPos().x(), event->localPos().y()); return WebMouseEvent(type, button, fromItemTransform.map(event->localPos()).toPoint(), event->screenPos().toPoint(), deltaX, deltaY, 0.0f, clickCount, modifiers, timestamp); }
WebMouseEvent WebEventFactory::createWebMouseEvent(const NIXMouseEvent& event, WebCore::IntPoint* lastCursorPosition) { WebEvent::Type type = convertToWebEventType(event.type); WebMouseEvent::Button button = convertToWebMouseEventButton(event.button); float deltaX = event.x - lastCursorPosition->x(); float deltaY = event.y - lastCursorPosition->y(); int clickCount = event.clickCount; WebEvent::Modifiers modifiers = convertToWebEventModifiers(event.modifiers); double timestamp = event.timestamp; IntPoint globalPosition = IntPoint(event.globalX, event.globalY); lastCursorPosition->setX(event.x); lastCursorPosition->setY(event.y); return WebMouseEvent(type, button, WebCore::IntPoint(event.x, event.y), globalPosition, deltaX, deltaY, 0.0f, clickCount, modifiers, timestamp); }
WebMouseEvent WebEventFactory::createWebMouseEvent(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { WebEvent::Type type; WebMouseEvent::Button button = WebMouseEvent::NoButton; switch (message) { case WM_MOUSEMOVE: type = WebEvent::MouseMove; if (wParam & MK_LBUTTON) button = WebMouseEvent::LeftButton; else if (wParam & MK_MBUTTON) button = WebMouseEvent::MiddleButton; else if (wParam & MK_RBUTTON) button = WebMouseEvent::RightButton; break; case WM_MOUSELEAVE: type = WebEvent::MouseMove; if (wParam & MK_LBUTTON) button = WebMouseEvent::LeftButton; else if (wParam & MK_MBUTTON) button = WebMouseEvent::MiddleButton; else if (wParam & MK_RBUTTON) button = WebMouseEvent::RightButton; // Set the current mouse position (relative to the client area of the // current window) since none is specified for this event. lParam = relativeCursorPosition(hWnd); break; case WM_LBUTTONDOWN: case WM_LBUTTONDBLCLK: type = WebEvent::MouseDown; button = WebMouseEvent::LeftButton; break; case WM_MBUTTONDOWN: case WM_MBUTTONDBLCLK: type = WebEvent::MouseDown; button = WebMouseEvent::MiddleButton; break; case WM_RBUTTONDOWN: case WM_RBUTTONDBLCLK: type = WebEvent::MouseDown; button = WebMouseEvent::RightButton; break; case WM_LBUTTONUP: type = WebEvent::MouseUp; button = WebMouseEvent::LeftButton; break; case WM_MBUTTONUP: type = WebEvent::MouseUp; button = WebMouseEvent::MiddleButton; break; case WM_RBUTTONUP: type = WebEvent::MouseUp; button = WebMouseEvent::RightButton; break; default: ASSERT_NOT_REACHED(); type = WebEvent::KeyDown; } POINT position = point(lParam); POINT globalPosition = position; ::ClientToScreen(hWnd, &globalPosition); double timestamp = ::GetTickCount() * 0.001; // ::GetTickCount returns milliseconds (Chrome uses GetMessageTime() / 1000.0) int clickCount = WebKit::clickCount(type, button, position, timestamp); WebEvent::Modifiers modifiers = modifiersForEvent(wParam); return WebMouseEvent(type, button, position, globalPosition, 0, 0, 0, clickCount, modifiers, timestamp); }