PassRefPtrWillBeRawPtr<WheelEvent> WheelEvent::create(const PlatformWheelEvent& event, PassRefPtrWillBeRawPtr<AbstractView> view) { return adoptRefWillBeNoop(new WheelEvent(FloatPoint(event.wheelTicksX(), event.wheelTicksY()), FloatPoint(event.deltaX(), event.deltaY()), convertDeltaMode(event), view, event.globalPosition(), event.position(), event.ctrlKey(), event.altKey(), event.shiftKey(), event.metaKey(), MouseEvent::platformModifiersToButtons(event.modifiers()), event.canScroll(), event.hasPreciseScrollingDeltas(), static_cast<Event::RailsMode>(event.railsMode()))); }
bool ScrollAnimator::handleWheelEvent(const PlatformWheelEvent& e) { bool canScrollX = m_scrollableArea->userInputScrollable(HorizontalScrollbar); bool canScrollY = m_scrollableArea->userInputScrollable(VerticalScrollbar); // Accept the event if we are scrollable in that direction and can still // scroll any further. float deltaX = canScrollX ? e.deltaX() : 0; float deltaY = canScrollY ? e.deltaY() : 0; bool handled = false; #if !OS(MACOSX) ScrollGranularity granularity = e.hasPreciseScrollingDeltas() ? ScrollByPrecisePixel : ScrollByPixel; #else ScrollGranularity granularity = ScrollByPixel; #endif IntSize maxForwardScrollDelta = m_scrollableArea->maximumScrollPosition() - m_scrollableArea->scrollPosition(); IntSize maxBackwardScrollDelta = m_scrollableArea->scrollPosition() - m_scrollableArea->minimumScrollPosition(); if ((deltaX < 0 && maxForwardScrollDelta.width() > 0) || (deltaX > 0 && maxBackwardScrollDelta.width() > 0) || (deltaY < 0 && maxForwardScrollDelta.height() > 0) || (deltaY > 0 && maxBackwardScrollDelta.height() > 0)) { handled = true; if (deltaY) { if (e.granularity() == ScrollByPageWheelEvent) { bool negative = deltaY < 0; deltaY = m_scrollableArea->pageStep(VerticalScrollbar); if (negative) deltaY = -deltaY; } scroll(VerticalScrollbar, granularity, m_scrollableArea->pixelStep(VerticalScrollbar), -deltaY); } if (deltaX) { if (e.granularity() == ScrollByPageWheelEvent) { bool negative = deltaX < 0; deltaX = m_scrollableArea->pageStep(HorizontalScrollbar); if (negative) deltaX = -deltaX; } scroll(HorizontalScrollbar, granularity, m_scrollableArea->pixelStep(HorizontalScrollbar), -deltaX); } } return handled; }
bool ScrollAnimator::handleWheelEvent(const PlatformWheelEvent& e) { Scrollbar* horizontalScrollbar = m_scrollableArea->horizontalScrollbar(); Scrollbar* verticalScrollbar = m_scrollableArea->verticalScrollbar(); // Accept the event if we have a scrollbar in that direction and can still // scroll any further. float deltaX = horizontalScrollbar ? e.deltaX() : 0; float deltaY = verticalScrollbar ? e.deltaY() : 0; bool handled = false; #if PLATFORM(CHROMIUM) && !OS(DARWIN) ScrollGranularity granularity = e.hasPreciseScrollingDeltas() ? ScrollByPrecisePixel : ScrollByPixel; #else ScrollGranularity granularity = ScrollByPixel; #endif IntSize maxForwardScrollDelta = m_scrollableArea->maximumScrollPosition() - m_scrollableArea->scrollPosition(); IntSize maxBackwardScrollDelta = m_scrollableArea->scrollPosition() - m_scrollableArea->minimumScrollPosition(); if ((deltaX < 0 && maxForwardScrollDelta.width() > 0) || (deltaX > 0 && maxBackwardScrollDelta.width() > 0) || (deltaY < 0 && maxForwardScrollDelta.height() > 0) || (deltaY > 0 && maxBackwardScrollDelta.height() > 0)) { handled = true; if (deltaY) { if (e.granularity() == ScrollByPageWheelEvent) { bool negative = deltaY < 0; deltaY = max(max(static_cast<float>(m_scrollableArea->visibleHeight()) * Scrollbar::minFractionToStepWhenPaging(), static_cast<float>(m_scrollableArea->visibleHeight() - Scrollbar::maxOverlapBetweenPages())), 1.0f); if (negative) deltaY = -deltaY; } scroll(VerticalScrollbar, granularity, verticalScrollbar->pixelStep(), -deltaY); } if (deltaX) { if (e.granularity() == ScrollByPageWheelEvent) { bool negative = deltaX < 0; deltaX = max(max(static_cast<float>(m_scrollableArea->visibleWidth()) * Scrollbar::minFractionToStepWhenPaging(), static_cast<float>(m_scrollableArea->visibleWidth() - Scrollbar::maxOverlapBetweenPages())), 1.0f); if (negative) deltaX = -deltaX; } scroll(HorizontalScrollbar, granularity, horizontalScrollbar->pixelStep(), -deltaX); } } return handled; }