Changeset 119684 in webkit


Ignore:
Timestamp:
Jun 6, 2012 10:56:12 PM (12 years ago)
Author:
rjkroege@chromium.org
Message:

Source/WebCore: [Chromium] Re-enable handling of smooth scrolling on Chromium Linux/Windows
https://bugs.webkit.org/show_bug.cgi?id=87535 by adding support for
m_hasPreciseScrollingDelta on all Chromium platforms and adjusting ScrollAnimator
and ScrollAnimatorNone accordingly to let m_hasPreciseScrollingDelta == true
force exact (non-animated) scrolling.

Reviewed by James Robinson.

Updated WebKit unit tests to validate change.

  • platform/PlatformWheelEvent.h:

(WebCore::PlatformWheelEvent::PlatformWheelEvent): Adjusted #ifdefs to
make m_hasPreciseScrollingDelta available on all Chromium platforms.
(PlatformWheelEvent):

  • platform/ScrollAnimator.cpp:

(WebCore::ScrollAnimator::handleWheelEvent): Default scroll type is set based on
m_hasPreciseScrollingDelta value.

  • platform/ScrollAnimatorNone.cpp:

(WebCore::ScrollAnimatorNone::scroll): Scroll precisely when necessary.

  • platform/ScrollTypes.h: Added additional pixel scrolling subtype.
  • platform/ScrollableArea.cpp:

(WebCore::ScrollableArea::scroll): Updated for additional pixel scroll subtype.

Source/WebKit/chromium: [Chromium] Re-enable handling of smooth scrolling on Chromium Linux/Windows
https://bugs.webkit.org/show_bug.cgi?id=87535 by adding support for precise
scrolling deltas on all Chromium platforms.

Reviewed by James Robinson.

  • src/WebInputEventConversion.cpp:

(WebKit::PlatformWheelEventBuilder::PlatformWheelEventBuilder): Create PlatformWheelEvents
with m_hasPreciseScrollingDelta flag as required.

  • tests/ScrollAnimatorNoneTest.cpp: Added new unit test condiiton for precise scrolling.

(TEST):

Location:
trunk/Source
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r119683 r119684  
     12012-06-06  Robert Kroeger  <rjkroege@chromium.org>
     2
     3        [Chromium] Re-enable handling of smooth scrolling on Chromium Linux/Windows
     4        https://bugs.webkit.org/show_bug.cgi?id=87535 by adding support for
     5        m_hasPreciseScrollingDelta on all Chromium platforms and adjusting ScrollAnimator
     6        and ScrollAnimatorNone accordingly to let m_hasPreciseScrollingDelta == true
     7        force exact (non-animated) scrolling.
     8
     9        Reviewed by James Robinson.
     10
     11        Updated WebKit unit tests to validate change.
     12
     13        * platform/PlatformWheelEvent.h:
     14        (WebCore::PlatformWheelEvent::PlatformWheelEvent): Adjusted #ifdefs to
     15        make m_hasPreciseScrollingDelta available on all Chromium platforms.
     16        (PlatformWheelEvent):
     17        * platform/ScrollAnimator.cpp:
     18        (WebCore::ScrollAnimator::handleWheelEvent): Default scroll type is set based on
     19        m_hasPreciseScrollingDelta value.
     20        * platform/ScrollAnimatorNone.cpp:
     21        (WebCore::ScrollAnimatorNone::scroll): Scroll precisely when necessary.
     22        * platform/ScrollTypes.h: Added additional pixel scrolling subtype.
     23        * platform/ScrollableArea.cpp:
     24        (WebCore::ScrollableArea::scroll): Updated for additional pixel scroll subtype.
     25
    1262012-06-06  Michal Mocny  <mmocny@google.com>
    227
  • trunk/Source/WebCore/platform/PlatformWheelEvent.h

    r117129 r119684  
    9191            , m_granularity(ScrollByPixelWheelEvent)
    9292            , m_directionInvertedFromDevice(false)
    93 #if PLATFORM(MAC) || (PLATFORM(CHROMIUM) && OS(DARWIN))
     93#if PLATFORM(MAC) || PLATFORM(CHROMIUM)
    9494            , m_hasPreciseScrollingDeltas(false)
     95#endif
     96#if PLATFORM(MAC) || (PLATFORM(CHROMIUM) && OS(DARWIN))
    9597            , m_phase(PlatformWheelEventPhaseNone)
    9698            , m_momentumPhase(PlatformWheelEventPhaseNone)
     
    112114            , m_granularity(granularity)
    113115            , m_directionInvertedFromDevice(false)
    114 #if PLATFORM(MAC) || (PLATFORM(CHROMIUM) && OS(DARWIN))
     116#if PLATFORM(MAC) || PLATFORM(CHROMIUM)
    115117            , m_hasPreciseScrollingDeltas(false)
    116             , m_phase(PlatformWheelEventPhaseNone)
     118#endif
     119#if PLATFORM(MAC) || (PLATFORM(CHROMIUM) && OS(DARWIN))
     120           , m_phase(PlatformWheelEventPhaseNone)
    117121            , m_momentumPhase(PlatformWheelEventPhaseNone)
    118122            , m_scrollCount(0)
     
    156160#endif
    157161
     162#if PLATFORM(MAC) || PLATFORM(CHROMIUM)
     163       bool hasPreciseScrollingDeltas() const { return m_hasPreciseScrollingDeltas; }
     164#endif
    158165#if PLATFORM(MAC) || (PLATFORM(CHROMIUM) && OS(DARWIN))
    159166        PlatformWheelEventPhase phase() const { return m_phase; }
    160167        PlatformWheelEventPhase momentumPhase() const { return m_momentumPhase; }
    161         bool hasPreciseScrollingDeltas() const { return m_hasPreciseScrollingDeltas; }
    162 
    163168        unsigned scrollCount() const { return m_scrollCount; }
    164169        float unacceleratedScrollingDeltaX() const { return m_unacceleratedScrollingDeltaX; }
     
    188193        PlatformWheelEventGranularity m_granularity;
    189194        bool m_directionInvertedFromDevice;
    190 #if PLATFORM(MAC) || (PLATFORM(CHROMIUM) && OS(DARWIN))
     195#if PLATFORM(MAC) || PLATFORM(CHROMIUM)
    191196        bool m_hasPreciseScrollingDeltas;
    192         PlatformWheelEventPhase m_phase;
     197#endif
     198#if PLATFORM(MAC) || (PLATFORM(CHROMIUM) && OS(DARWIN))
     199         PlatformWheelEventPhase m_phase;
    193200        PlatformWheelEventPhase m_momentumPhase;
    194201        unsigned m_scrollCount;
  • trunk/Source/WebCore/platform/ScrollAnimator.cpp

    r110371 r119684  
    9292    bool handled = false;
    9393
     94#if PLATFORM(CHROMIUM)
     95    ScrollGranularity granularity = e.hasPreciseScrollingDeltas() ? ScrollByPrecisePixel : ScrollByPixel;
     96#else
     97    ScrollGranularity granularity = ScrollByPixel;
     98#endif
     99
    94100    IntSize maxForwardScrollDelta = m_scrollableArea->maximumScrollPosition() - m_scrollableArea->scrollPosition();
    95101    IntSize maxBackwardScrollDelta = m_scrollableArea->scrollPosition() - m_scrollableArea->minimumScrollPosition();
     
    112118                    deltaY = -deltaY;
    113119            }
    114             scroll(VerticalScrollbar, ScrollByPixel, verticalScrollbar->pixelStep(), -deltaY);
     120            scroll(VerticalScrollbar, granularity, verticalScrollbar->pixelStep(), -deltaY);
    115121        }
    116122
     
    122128                    deltaX = -deltaX;
    123129            }
    124             scroll(HorizontalScrollbar, ScrollByPixel, horizontalScrollbar->pixelStep(), -deltaX);
     130            scroll(HorizontalScrollbar, granularity, horizontalScrollbar->pixelStep(), -deltaX);
    125131        }
    126132    }
  • trunk/Source/WebCore/platform/ScrollAnimatorNone.cpp

    r115347 r119684  
    435435        break;
    436436    case ScrollByPixel:
    437 #if PLATFORM(CHROMIUM)
    438         // FIXME: plumb a flag specifying precise deltas.
    439         return ScrollAnimator::scroll(orientation, granularity, step, multiplier);
    440 #else
    441437        parameters = Parameters(true, 11 * kTickTime, 2 * kTickTime, Cubic, 3 * kTickTime, Cubic, 3 * kTickTime, Quadratic, 1.25);
    442438        break;
    443 #endif
     439    case ScrollByPrecisePixel:
     440        return ScrollAnimator::scroll(orientation, granularity, step, multiplier);
    444441    case ScrollByPixelVelocity:
    445442        // FIXME: Generalize the scroll interface to support a richer set of parameters.
  • trunk/Source/WebCore/platform/ScrollTypes.h

    r110371 r119684  
    107107        ScrollByDocument,
    108108        ScrollByPixel,
    109         ScrollByPixelVelocity
     109        ScrollByPixelVelocity,
     110        ScrollByPrecisePixel
    110111    };
    111112
  • trunk/Source/WebCore/platform/ScrollableArea.cpp

    r112774 r119684  
    109109        break;
    110110    case ScrollByPixel:
     111    case ScrollByPrecisePixel:
    111112        step = scrollbar->pixelStep();
    112113        break;
  • trunk/Source/WebKit/chromium/ChangeLog

    r119683 r119684  
     12012-06-06  Robert Kroeger  <rjkroege@chromium.org>
     2
     3        [Chromium] Re-enable handling of smooth scrolling on Chromium Linux/Windows
     4        https://bugs.webkit.org/show_bug.cgi?id=87535 by adding support for precise
     5        scrolling deltas on all Chromium platforms.
     6
     7        Reviewed by James Robinson.
     8
     9        * src/WebInputEventConversion.cpp:
     10        (WebKit::PlatformWheelEventBuilder::PlatformWheelEventBuilder): Create PlatformWheelEvents
     11        with m_hasPreciseScrollingDelta flag as required.
     12        * tests/ScrollAnimatorNoneTest.cpp: Added new unit test condiiton for precise scrolling.
     13        (TEST):
     14
    1152012-06-06  Michal Mocny  <mmocny@google.com>
    216
  • trunk/Source/WebKit/chromium/src/WebInputEventConversion.cpp

    r119356 r119684  
    124124        m_modifiers |= PlatformEvent::MetaKey;
    125125
     126    m_hasPreciseScrollingDeltas = e.hasPreciseScrollingDeltas;
    126127#if OS(DARWIN)
    127     m_hasPreciseScrollingDeltas = e.hasPreciseScrollingDeltas;
    128128    m_phase = static_cast<WebCore::PlatformWheelEventPhase>(e.phase);
    129129    m_momentumPhase = static_cast<WebCore::PlatformWheelEventPhase>(e.momentumPhase);
  • trunk/Source/WebKit/chromium/tests/ScrollAnimatorNoneTest.cpp

    r113947 r119684  
    111111
    112112    EXPECT_CALL(scrollableArea, scrollSize(_)).Times(AtLeast(1)).WillRepeatedly(Return(1000));
    113     EXPECT_CALL(scrollableArea, setScrollOffset(_)).Times(3);
     113    EXPECT_CALL(scrollableArea, setScrollOffset(_)).Times(4);
    114114
    115115    scrollAnimatorNone.scroll(HorizontalScrollbar, ScrollByLine, 100, 1);
     
    126126
    127127    scrollAnimatorNone.scroll(HorizontalScrollbar, ScrollByPixel, 4, 25);
     128    EXPECT_NE(100, scrollAnimatorNone.currentX());
     129    EXPECT_NE(0, scrollAnimatorNone.currentX());
     130    EXPECT_EQ(0, scrollAnimatorNone.currentY());
     131    scrollAnimatorNone.reset();
     132
     133    scrollAnimatorNone.scroll(HorizontalScrollbar, ScrollByPrecisePixel, 4, 25);
    128134    EXPECT_EQ(100, scrollAnimatorNone.currentX());
    129135    EXPECT_NE(0, scrollAnimatorNone.currentX());
Note: See TracChangeset for help on using the changeset viewer.