void EventTargetNode::dispatchWheelEvent(PlatformWheelEvent& e) { ASSERT(!eventDispatchForbidden()); if (e.deltaX() == 0 && e.deltaY() == 0) return; FrameView* view = document()->view(); if (!view) return; IntPoint pos = view->windowToContents(e.pos()); // Convert the deltas from pixels to lines if we have a pixel scroll event. float deltaX = e.deltaX(); float deltaY = e.deltaY(); // FIXME: Should we do anything with a ScrollByPageWheelEvent here? // It will be treated like a line scroll of 1 right now. if (e.granularity() == ScrollByPixelWheelEvent) { deltaX /= cMouseWheelPixelsPerLineStep; deltaY /= cMouseWheelPixelsPerLineStep; } RefPtr<WheelEvent> we = WheelEvent::create(e.deltaX(), e.deltaY(), document()->defaultView(), e.globalX(), e.globalY(), pos.x(), pos.y(), e.ctrlKey(), e.altKey(), e.shiftKey(), e.metaKey()); ExceptionCode ec = 0; if (!dispatchEvent(we.release(), ec)) e.accept(); }
void ScrollAnimator::handleWheelEvent(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; 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)) { e.accept(); if (e.granularity() == ScrollByPageWheelEvent) { ASSERT(!e.deltaX()); 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; } if (deltaY) scroll(VerticalScrollbar, ScrollByPixel, verticalScrollbar->pixelStep(), -deltaY); if (deltaX) scroll(HorizontalScrollbar, ScrollByPixel, horizontalScrollbar->pixelStep(), -deltaX); } }
void ScrollView::wheelEvent(PlatformWheelEvent& e) { // We don't allow mouse wheeling to happen in a ScrollView that has had its scrollbars explicitly disabled. #if PLATFORM(WX) if (!canHaveScrollbars()) { #else if (!canHaveScrollbars() || platformWidget()) { #endif return; } // Accept the event if we have a scrollbar in that direction and can still // scroll any further. float deltaX = m_horizontalScrollbar ? e.deltaX() : 0; float deltaY = m_verticalScrollbar ? e.deltaY() : 0; IntSize maxForwardScrollDelta = maximumScrollPosition() - scrollPosition(); IntSize maxBackwardScrollDelta = scrollPosition() - minimumScrollPosition(); if ((deltaX < 0 && maxForwardScrollDelta.width() > 0) || (deltaX > 0 && maxBackwardScrollDelta.width() >0) || (deltaY < 0 && maxForwardScrollDelta.height() > 0) || (deltaY > 0 && maxBackwardScrollDelta.height() > 0)) { e.accept(); if (e.granularity() == ScrollByPageWheelEvent) { ASSERT(!e.deltaX()); bool negative = deltaY < 0; deltaY = max(max(static_cast<float>(visibleHeight()) * Scrollbar::minFractionToStepWhenPaging(), static_cast<float>(visibleHeight() - Scrollbar::maxOverlapBetweenPages())), 1.0f); if (negative) deltaY = -deltaY; } if (deltaY) m_verticalScrollbar->scroll(ScrollUp, ScrollByPixel, deltaY); if (deltaX) m_horizontalScrollbar->scroll(ScrollLeft, ScrollByPixel, deltaX); } } void ScrollView::setFrameRect(const IntRect& newRect) { IntRect oldRect = frameRect(); if (newRect == oldRect) return; Widget::setFrameRect(newRect); if (platformWidget()) return; if (newRect.width() != oldRect.width() || newRect.height() != oldRect.height()) { updateScrollbars(m_scrollOffset); if (!m_useFixedLayout) contentsResized(); } frameRectsChanged(); }
void ScrollView::wheelEvent(PlatformWheelEvent& e) { // We don't allow mouse wheeling to happen in a ScrollView that has had its scrollbars explicitly disabled. #if PLATFORM(WX) if (!canHaveScrollbars()) { #else if (!canHaveScrollbars() || platformWidget()) { #endif return; } // Determine how much we want to scroll. If we can move at all, we will accept the event. IntSize maxScrollDelta = maximumScrollPosition() - scrollPosition(); if ((e.deltaX() < 0 && maxScrollDelta.width() > 0) || (e.deltaX() > 0 && scrollOffset().width() > 0) || (e.deltaY() < 0 && maxScrollDelta.height() > 0) || (e.deltaY() > 0 && scrollOffset().height() > 0)) { e.accept(); float deltaX = e.deltaX(); float deltaY = e.deltaY(); if (e.granularity() == ScrollByPageWheelEvent) { ASSERT(deltaX == 0); bool negative = deltaY < 0; deltaY = max(max(static_cast<float>(visibleHeight()) * Scrollbar::minFractionToStepWhenPaging(), static_cast<float>(visibleHeight() - Scrollbar::maxOverlapBetweenPages())), 1.0f); if (negative) deltaY = -deltaY; } // Should we fall back on scrollBy() if there is no scrollbar for a non-zero delta? if (deltaY && m_verticalScrollbar) m_verticalScrollbar->scroll(ScrollUp, ScrollByPixel, deltaY); if (deltaX && m_horizontalScrollbar) m_horizontalScrollbar->scroll(ScrollLeft, ScrollByPixel, deltaX); } } void ScrollView::setFrameRect(const IntRect& newRect) { IntRect oldRect = frameRect(); if (newRect == oldRect) return; Widget::setFrameRect(newRect); if (platformWidget()) return; if (newRect.width() != oldRect.width() || newRect.height() != oldRect.height()) { updateScrollbars(m_scrollOffset); if (!m_useFixedLayout) contentsResized(); } frameRectsChanged(); }
void ScrollView::wheelEvent(PlatformWheelEvent& e) { // Determine how much we want to scroll. If we can move at all, we will accept the event. IntSize maxScrollDelta = maximumScroll(); if ((e.deltaX() < 0 && maxScrollDelta.width() > 0) || (e.deltaX() > 0 && scrollOffset().width() > 0) || (e.deltaY() < 0 && maxScrollDelta.height() > 0) || (e.deltaY() > 0 && scrollOffset().height() > 0)) { e.accept(); scrollBy(-e.deltaX() * LINE_STEP, -e.deltaY() * LINE_STEP); } }
void ScrollView::wheelEvent(PlatformWheelEvent& e) { // We don't allow mouse wheeling to happen in a ScrollView that has had its scrollbars explicitly disabled. #if PLATFORM(WX) if (!canHaveScrollbars()) { #else if (!canHaveScrollbars() || platformWidget()) { #endif return; } // Determine how much we want to scroll. If we can move at all, we will accept the event. IntSize maxScrollDelta = maximumScrollPosition() - scrollPosition(); if ((e.deltaX() < 0 && maxScrollDelta.width() > 0) || (e.deltaX() > 0 && scrollOffset().width() > 0) || (e.deltaY() < 0 && maxScrollDelta.height() > 0) || (e.deltaY() > 0 && scrollOffset().height() > 0)) { e.accept(); float deltaX = e.deltaX(); float deltaY = e.deltaY(); if (e.granularity() == ScrollByPageWheelEvent) { ASSERT(deltaX == 0); bool negative = deltaY < 0; deltaY = max(max<int>(visibleHeight() * Scrollbar::minFractionToStepWhenPaging(), visibleHeight() - Scrollbar::maxOverlapBetweenPages()), 1); if (negative) deltaY = -deltaY; } scrollBy(IntSize(-deltaX, -deltaY)); } } void ScrollView::setFrameRect(const IntRect& newRect) { IntRect oldRect = frameRect(); if (newRect == oldRect) return; Widget::setFrameRect(newRect); if (platformWidget()) return; if (newRect.width() != oldRect.width() || newRect.height() != oldRect.height()) { updateScrollbars(m_scrollOffset); contentsResized(); } frameRectsChanged(); }
void EventDispatcher::dispatchWheelEvent(Node* node, PlatformWheelEvent& event) { ASSERT(!eventDispatchForbidden()); if (!(event.deltaX() || event.deltaY())) return; EventDispatcher dispatcher(node); RefPtr<WheelEvent> wheelEvent = WheelEvent::create(event.wheelTicksX(), event.wheelTicksY(), event.deltaX(), event.deltaY(), granularity(event), node->document()->defaultView(), event.globalX(), event.globalY(), event.x(), event.y(), event.ctrlKey(), event.altKey(), event.shiftKey(), event.metaKey()); if (!dispatcher.dispatchEvent(wheelEvent) || wheelEvent->defaultHandled()) event.accept(); }
void EventTargetNode::dispatchWheelEvent(PlatformWheelEvent& e) { ASSERT(!eventDispatchForbidden()); if (e.deltaX() == 0 && e.deltaY() == 0) return; FrameView* view = document()->view(); if (!view) return; IntPoint pos = view->windowToContents(e.pos()); RefPtr<WheelEvent> we = WheelEvent::create(e.deltaX(), e.deltaY(), document()->defaultView(), e.globalX(), e.globalY(), pos.x(), pos.y(), e.ctrlKey(), e.altKey(), e.shiftKey(), e.metaKey()); ExceptionCode ec = 0; if (!dispatchEvent(we.release(), ec, true)) e.accept(); }
void EventTargetNode::dispatchWheelEvent(PlatformWheelEvent& e) { assert(!eventDispatchForbidden()); if (e.delta() == 0) return; FrameView* view = document()->view(); if (!view) return; IntPoint pos = view->viewportToContents(e.pos()); RefPtr<WheelEvent> we = new WheelEvent(e.isHorizontal(), e.delta(), document()->defaultView(), e.globalX(), e.globalY(), pos.x(), pos.y(), e.ctrlKey(), e.altKey(), e.shiftKey(), e.metaKey()); ExceptionCode ec = 0; if (!dispatchEvent(we, ec, true)) e.accept(); }