void MediaControlsAppleEventListener::handleEvent(ScriptExecutionContext*, Event* event) { if (event->type() == eventNames().clickEvent) m_mediaControls->handleClickEvent(event); else if ((event->type() == eventNames().wheelEvent || event->type() == eventNames().mousewheelEvent) && event->eventInterface() == WheelEventInterfaceType) { WheelEvent* wheelEvent = static_cast<WheelEvent*>(event); if (m_mediaControls->shouldClosedCaptionsContainerPreventPageScrolling(wheelEvent->wheelDeltaY())) event->preventDefault(); } }
WebMouseWheelEventBuilder::WebMouseWheelEventBuilder(const Widget* widget, const LayoutObject* layoutObject, const WheelEvent& event) { if (event.type() != EventTypeNames::wheel && event.type() != EventTypeNames::mousewheel) return; type = WebInputEvent::MouseWheel; updateWebMouseEventFromCoreMouseEvent(event, widget, *layoutObject, *this); deltaX = -event.deltaX(); deltaY = -event.deltaY(); wheelTicksX = event.ticksX(); wheelTicksY = event.ticksY(); scrollByPage = event.deltaMode() == WheelEvent::DOM_DELTA_PAGE; canScroll = event.canScroll(); resendingPluginId = event.resendingPluginId(); railsMode = static_cast<RailsMode>(event.railsMode()); }
WebMouseWheelEventBuilder::WebMouseWheelEventBuilder(const Widget* widget, const WebCore::RenderObject* renderObject, const WheelEvent& event) { if (event.type() != EventTypeNames::wheel && event.type() != EventTypeNames::mousewheel) return; type = WebInputEvent::MouseWheel; updateWebMouseEventFromWebCoreMouseEvent(event, *widget, *renderObject, *this); deltaX = -event.deltaX(); deltaY = -event.deltaY(); wheelTicksX = event.ticksX(); wheelTicksY = event.ticksY(); scrollByPage = event.deltaMode() == WheelEvent::DOM_DELTA_PAGE; }
WebMouseWheelEventBuilder::WebMouseWheelEventBuilder(const Widget* widget, const WebCore::RenderObject* renderObject, const WheelEvent& event) { if (event.type() != eventNames().mousewheelEvent) return; type = WebInputEvent::MouseWheel; updateWebMouseEventFromWebCoreMouseEvent(event, *widget, *renderObject, *this); deltaX = static_cast<float>(event.rawDeltaX()); deltaY = static_cast<float>(event.rawDeltaY()); // The 120 is from WheelEvent::initWheelEvent(). wheelTicksX = static_cast<float>(event.wheelDeltaX()) / 120; wheelTicksY = static_cast<float>(event.wheelDeltaY()) / 120; scrollByPage = event.deltaMode() == WheelEvent::DOM_DELTA_PAGE; }
void MouseController::handleWheel(WheelEvent & e) {//滚动是忽略capture View * target = e.target(); if (target == root_) target = getTargetByPos(e.getLoc(), true); if (!target) return; WheelEvent we(e.type(), target, e.dx(), e.dy(), target->mapToLocal(e.getLoc()), e.getLoc(), e.getFlags()); EventDispatcher::Push(we); //暂时先这么处理 因为滚动的时候可能离开控件所以 需要改变鼠标样式之类 MouseEvent me(kET_MOUSE_MOVE, kMB_NONE, root_, root_->mapToLocal(last_mouse_point_), last_mouse_point_, 0); handleEvent(me); //if (!capture_) //{//如果没有capture 可能滚动到新的view里 需要shiftOver // shiftIfNecessary(); //} }
JSValue* JSWheelEvent::getValueProperty(ExecState* exec, int token) const { switch (token) { case ScreenXAttrNum: { WheelEvent* imp = static_cast<WheelEvent*>(impl()); return jsNumber(exec, imp->screenX()); } case ScreenYAttrNum: { WheelEvent* imp = static_cast<WheelEvent*>(impl()); return jsNumber(exec, imp->screenY()); } case ClientXAttrNum: { WheelEvent* imp = static_cast<WheelEvent*>(impl()); return jsNumber(exec, imp->clientX()); } case ClientYAttrNum: { WheelEvent* imp = static_cast<WheelEvent*>(impl()); return jsNumber(exec, imp->clientY()); } case CtrlKeyAttrNum: { WheelEvent* imp = static_cast<WheelEvent*>(impl()); return jsBoolean(imp->ctrlKey()); } case ShiftKeyAttrNum: { WheelEvent* imp = static_cast<WheelEvent*>(impl()); return jsBoolean(imp->shiftKey()); } case AltKeyAttrNum: { WheelEvent* imp = static_cast<WheelEvent*>(impl()); return jsBoolean(imp->altKey()); } case MetaKeyAttrNum: { WheelEvent* imp = static_cast<WheelEvent*>(impl()); return jsBoolean(imp->metaKey()); } case WheelDeltaAttrNum: { WheelEvent* imp = static_cast<WheelEvent*>(impl()); return jsNumber(exec, imp->wheelDelta()); } case WheelDeltaXAttrNum: { WheelEvent* imp = static_cast<WheelEvent*>(impl()); return jsNumber(exec, imp->wheelDeltaX()); } case WheelDeltaYAttrNum: { WheelEvent* imp = static_cast<WheelEvent*>(impl()); return jsNumber(exec, imp->wheelDeltaY()); } case OffsetXAttrNum: { WheelEvent* imp = static_cast<WheelEvent*>(impl()); return jsNumber(exec, imp->offsetX()); } case OffsetYAttrNum: { WheelEvent* imp = static_cast<WheelEvent*>(impl()); return jsNumber(exec, imp->offsetY()); } case XAttrNum: { WheelEvent* imp = static_cast<WheelEvent*>(impl()); return jsNumber(exec, imp->x()); } case YAttrNum: { WheelEvent* imp = static_cast<WheelEvent*>(impl()); return jsNumber(exec, imp->y()); } case ConstructorAttrNum: return getConstructor(exec); } return 0; }
JSValue jsWheelEventY(ExecState* exec, const Identifier&, const PropertySlot& slot) { UNUSED_PARAM(exec); WheelEvent* imp = static_cast<WheelEvent*>(static_cast<JSWheelEvent*>(asObject(slot.slotBase()))->impl()); return jsNumber(exec, imp->y()); }
WebMouseWheelEventBuilder::WebMouseWheelEventBuilder(const Widget* widget, const WheelEvent& event) { if (event.type() != eventNames().mousewheelEvent) return; type = WebInputEvent::MouseWheel; timeStampSeconds = event.timeStamp() / millisPerSecond; modifiers = getWebInputModifiers(event); ScrollView* view = widget->parent(); IntPoint p = view->contentsToWindow( IntPoint(event.absoluteLocation().x(), event.absoluteLocation().y())); globalX = event.screenX(); globalY = event.screenY(); windowX = p.x(); windowY = p.y(); x = event.absoluteLocation().x() - widget->location().x(); y = event.absoluteLocation().y() - widget->location().y(); deltaX = static_cast<float>(event.rawDeltaX()); deltaY = static_cast<float>(event.rawDeltaY()); // The 120 is from WheelEvent::initWheelEvent(). wheelTicksX = static_cast<float>(event.wheelDeltaX()) / 120; wheelTicksY = static_cast<float>(event.wheelDeltaY()) / 120; scrollByPage = event.granularity() == WheelEvent::Page; }