⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 242695 in webkit


Ignore:
Timestamp:
Mar 10, 2019, 7:54:55 PM (7 years ago)
Author:
timothy_horton@apple.com
Message:

iOS: Using ⌥ to scroll horizontally is no different than arrow key
https://bugs.webkit.org/show_bug.cgi?id=195268
<rdar://problem/48326682>

Reviewed by Brent Fulgham.

  • UIProcess/ios/WKContentViewInteraction.mm:

(-[WKContentView keyboardScrollViewAnimator:distanceForIncrement:inDirection:]):
(-[WKContentView keyboardScrollViewAnimator:distanceForIncrement:]): Deleted.

  • UIProcess/ios/WKKeyboardScrollingAnimator.h:
  • UIProcess/ios/WKKeyboardScrollingAnimator.mm:

(-[WKKeyboardScrollingAnimator keyboardScrollForEvent:]):
(-[WKKeyboardScrollViewAnimator setDelegate:]):
(-[WKKeyboardScrollViewAnimator distanceForIncrement:inDirection:]):
(-[WKKeyboardScrollViewAnimator distanceForIncrement:]): Deleted.
Add a direction parameter to -distanceForIncrement:, so the client
can return a different page/document size based on the scrolling axis.
Adopt it both in the default implementation and in WKContentViewInteraction.
Make the option key scroll by page when scrolling horizontally, like it
does when scrolling vertically.

Location:
trunk/Source/WebKit
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r242693 r242695  
     12019-03-10  Tim Horton  <timothy_horton@apple.com>
     2
     3        iOS: Using ⌥ to scroll horizontally is no different than arrow key
     4        https://bugs.webkit.org/show_bug.cgi?id=195268
     5        <rdar://problem/48326682>
     6
     7        Reviewed by Brent Fulgham.
     8
     9        * UIProcess/ios/WKContentViewInteraction.mm:
     10        (-[WKContentView keyboardScrollViewAnimator:distanceForIncrement:inDirection:]):
     11        (-[WKContentView keyboardScrollViewAnimator:distanceForIncrement:]): Deleted.
     12        * UIProcess/ios/WKKeyboardScrollingAnimator.h:
     13        * UIProcess/ios/WKKeyboardScrollingAnimator.mm:
     14        (-[WKKeyboardScrollingAnimator keyboardScrollForEvent:]):
     15        (-[WKKeyboardScrollViewAnimator setDelegate:]):
     16        (-[WKKeyboardScrollViewAnimator distanceForIncrement:inDirection:]):
     17        (-[WKKeyboardScrollViewAnimator distanceForIncrement:]): Deleted.
     18        Add a direction parameter to -distanceForIncrement:, so the client
     19        can return a different page/document size based on the scrolling axis.
     20        Adopt it both in the default implementation and in WKContentViewInteraction.
     21        Make the option key scroll by page when scrolling horizontally, like it
     22        does when scrolling vertically.
     23
    1242019-03-10  David Quesada  <david_quesada@apple.com>
    225
  • trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm

    r242690 r242695  
    44334433}
    44344434
    4435 - (CGFloat)keyboardScrollViewAnimator:(WKKeyboardScrollViewAnimator *)animator distanceForIncrement:(WebKit::ScrollingIncrement)increment
    4436 {
     4435- (CGFloat)keyboardScrollViewAnimator:(WKKeyboardScrollViewAnimator *)animator distanceForIncrement:(WebKit::ScrollingIncrement)increment inDirection:(WebKit::ScrollingDirection)direction
     4436{
     4437    BOOL directionIsHorizontal = direction == WebKit::ScrollingDirection::Left || direction == WebKit::ScrollingDirection::Right;
     4438
    44374439    switch (increment) {
    4438     case WebKit::ScrollingIncrement::Document:
    4439         return [self convertRect:self.bounds toView:_webView].size.height;
    4440     case WebKit::ScrollingIncrement::Page:
    4441         return [self convertSize:CGSizeMake(0, WebCore::Scrollbar::pageStep(_page->unobscuredContentRect().height(), self.bounds.size.height)) toView:_webView].height;
     4440    case WebKit::ScrollingIncrement::Document: {
     4441        CGSize documentSize = [self convertRect:self.bounds toView:_webView].size;
     4442        return directionIsHorizontal ? documentSize.width : documentSize.height;
     4443    }
     4444    case WebKit::ScrollingIncrement::Page: {
     4445        CGSize pageSize = [self convertSize:CGSizeMake(0, WebCore::Scrollbar::pageStep(_page->unobscuredContentRect().height(), self.bounds.size.height)) toView:_webView];
     4446        return directionIsHorizontal ? pageSize.width : pageSize.height;
     4447    }
    44424448    case WebKit::ScrollingIncrement::Line:
    44434449        return [self convertSize:CGSizeMake(0, WebCore::Scrollbar::pixelsPerLineStep()) toView:_webView].height;
  • trunk/Source/WebKit/UIProcess/ios/WKKeyboardScrollingAnimator.h

    r237266 r242695  
    3838};
    3939
     40enum class ScrollingDirection : uint8_t {
     41    Up,
     42    Down,
     43    Left,
     44    Right
     45};
     46
    4047}
    4148
     
    6370@optional
    6471- (BOOL)isScrollableForKeyboardScrollViewAnimator:(WKKeyboardScrollViewAnimator *)animator;
    65 - (CGFloat)keyboardScrollViewAnimator:(WKKeyboardScrollViewAnimator *)animator distanceForIncrement:(WebKit::ScrollingIncrement)increment;
     72- (CGFloat)keyboardScrollViewAnimator:(WKKeyboardScrollViewAnimator *)animator distanceForIncrement:(WebKit::ScrollingIncrement)increment inDirection:(WebKit::ScrollingDirection)direction;
    6673- (void)keyboardScrollViewAnimatorWillScroll:(WKKeyboardScrollViewAnimator *)animator;
    6774- (void)keyboardScrollViewAnimatorDidFinishScrolling:(WKKeyboardScrollViewAnimator *)animator;
  • trunk/Source/WebKit/UIProcess/ios/WKKeyboardScrollingAnimator.mm

    r239427 r242695  
    4343namespace WebKit {
    4444
    45 enum class ScrollingDirection : uint8_t { Up, Down, Left, Right };
    46 
    4745struct KeyboardScroll {
    4846    WebCore::FloatSize offset; // Points per increment.
     
    7068@required
    7169- (BOOL)isKeyboardScrollable;
    72 - (CGFloat)distanceForIncrement:(WebKit::ScrollingIncrement)increment;
     70- (CGFloat)distanceForIncrement:(WebKit::ScrollingIncrement)increment inDirection:(WebKit::ScrollingDirection)direction;
    7371- (void)scrollToContentOffset:(WebCore::FloatPoint)offset animated:(BOOL)animated;
    7472- (void)scrollWithScrollToExtentAnimationTo:(CGPoint)offset;
     
    234232        case Key::LeftArrow:
    235233        case Key::RightArrow:
     234            if (altPressed)
     235                return WebKit::ScrollingIncrement::Page;
    236236            return WebKit::ScrollingIncrement::Line;
    237237        case Key::UpArrow:
     
    272272    }();
    273273
    274     CGFloat scrollDistance = [_scrollable distanceForIncrement:increment];
     274    CGFloat scrollDistance = [_scrollable distanceForIncrement:increment inDirection:direction];
    275275
    276276    WebKit::KeyboardScroll scroll;
     
    545545
    546546    _delegateRespondsToIsKeyboardScrollable = [_delegate respondsToSelector:@selector(isScrollableForKeyboardScrollViewAnimator:)];
    547     _delegateRespondsToDistanceForIncrement = [_delegate respondsToSelector:@selector(keyboardScrollViewAnimator:distanceForIncrement:)];
     547    _delegateRespondsToDistanceForIncrement = [_delegate respondsToSelector:@selector(keyboardScrollViewAnimator:distanceForIncrement:inDirection:)];
    548548    _delegateRespondsToWillScroll = [_delegate respondsToSelector:@selector(keyboardScrollViewAnimatorWillScroll:)];
    549549    _delegateRespondsToDidFinishScrolling = [_delegate respondsToSelector:@selector(keyboardScrollViewAnimatorDidFinishScrolling:)];
     
    572572}
    573573
    574 - (CGFloat)distanceForIncrement:(WebKit::ScrollingIncrement)increment
     574- (CGFloat)distanceForIncrement:(WebKit::ScrollingIncrement)increment inDirection:(WebKit::ScrollingDirection)direction
    575575{
    576576    auto scrollView = _scrollView.getAutoreleased();
     
    580580    const CGFloat defaultPageScrollFraction = 0.8;
    581581    const CGFloat defaultLineScrollHeight = 40;
     582
     583    BOOL directionIsHorizontal = direction == WebKit::ScrollingDirection::Left || direction == WebKit::ScrollingDirection::Right;
    582584
    583585    if (!_delegateRespondsToDistanceForIncrement) {
    584586        switch (increment) {
    585587        case WebKit::ScrollingIncrement::Document:
    586             return scrollView.contentSize.height;
     588            return directionIsHorizontal ? scrollView.contentSize.width : scrollView.contentSize.height;
    587589        case WebKit::ScrollingIncrement::Page:
    588             return scrollView.frame.size.height * defaultPageScrollFraction;
     590            return (directionIsHorizontal ? scrollView.frame.size.width : scrollView.frame.size.height) * defaultPageScrollFraction;
    589591        case WebKit::ScrollingIncrement::Line:
    590592            return defaultLineScrollHeight * scrollView.zoomScale;
     
    594596    }
    595597
    596     return [_delegate keyboardScrollViewAnimator:self distanceForIncrement:increment];
     598    return [_delegate keyboardScrollViewAnimator:self distanceForIncrement:increment inDirection:direction];
    597599}
    598600
Note: See TracChangeset for help on using the changeset viewer.