Changeset 233883 in webkit
- Timestamp:
- Jul 16, 2018 9:44:23 PM (6 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r233882 r233883 1 2018-07-16 Megan Gardner <megan_gardner@apple.com> 2 3 Correctly adjust scroll offsets when a page is zoomed 4 https://bugs.webkit.org/show_bug.cgi?id=187673 5 <rdar://problem/41712829> 6 7 Reviewed by Wenson Hsieh. 8 9 Will add test later. 10 11 Make sure that distance is scaled by the pageScaleFactor, to 12 make sure that we scroll correctly when we are zoomed in. 13 14 * page/ios/EventHandlerIOS.mm: 15 (WebCore::autoscrollAdjustmentFactorForScreenBoundaries): 16 1 17 2018-07-16 Simon Fraser <simon.fraser@apple.com> 2 18 -
trunk/Source/WebCore/page/ios/EventHandlerIOS.mm
r228549 r233883 579 579 } 580 580 581 static IntSize autoscrollAdjustmentFactorForScreenBoundaries(const IntPoint& screenPoint, const FloatRect& screenRect)581 static IntSize autoscrollAdjustmentFactorForScreenBoundaries(const IntPoint& contentPosition, const FloatRect& unobscuredContentRect, float zoomFactor) 582 582 { 583 583 // If the window is at the edge of the screen, and the touch position is also at that edge of the screen, … … 591 591 #define EDGE_DISTANCE_THRESHOLD 100 592 592 593 float screenLeftEdge = screenRect.x(); 594 float insetScreenLeftEdge = screenLeftEdge + EDGE_DISTANCE_THRESHOLD; 595 float screenRightEdge = screenRect.maxX(); 596 float insetScreenRightEdge = screenRightEdge - EDGE_DISTANCE_THRESHOLD; 597 if (screenPoint.x() >= screenLeftEdge && screenPoint.x() < insetScreenLeftEdge) { 598 float distanceFromEdge = screenPoint.x() - screenLeftEdge - EDGE_DISTANCE_THRESHOLD; 593 CGSize edgeDistanceThreshold = CGSizeMake(EDGE_DISTANCE_THRESHOLD / zoomFactor, EDGE_DISTANCE_THRESHOLD / zoomFactor); 594 595 float screenLeftEdge = unobscuredContentRect.x(); 596 float insetScreenLeftEdge = screenLeftEdge + edgeDistanceThreshold.width; 597 float screenRightEdge = unobscuredContentRect.maxX(); 598 float insetScreenRightEdge = screenRightEdge - edgeDistanceThreshold.width; 599 if (contentPosition.x() >= screenLeftEdge && contentPosition.x() < insetScreenLeftEdge) { 600 float distanceFromEdge = contentPosition.x() - screenLeftEdge - edgeDistanceThreshold.width; 599 601 if (distanceFromEdge < 0) 600 adjustmentFactor.setWidth(- EDGE_DISTANCE_THRESHOLD);601 } else if ( screenPoint.x() >= insetScreenRightEdge && screenPoint.x() < screenRightEdge) {602 float distanceFromEdge = EDGE_DISTANCE_THRESHOLD - (screenRightEdge - screenPoint.x());602 adjustmentFactor.setWidth(-edgeDistanceThreshold.width); 603 } else if (contentPosition.x() >= insetScreenRightEdge && contentPosition.x() < screenRightEdge) { 604 float distanceFromEdge = edgeDistanceThreshold.width - (screenRightEdge - contentPosition.x()); 603 605 if (distanceFromEdge > 0) 604 adjustmentFactor.setWidth( EDGE_DISTANCE_THRESHOLD);605 } 606 607 float screenTopEdge = screenRect.y();608 float insetScreenTopEdge = screenTopEdge + EDGE_DISTANCE_THRESHOLD;609 float screenBottomEdge = screenRect.maxY();610 float insetScreenBottomEdge = screenBottomEdge - EDGE_DISTANCE_THRESHOLD;611 612 if ( screenPoint.y() >= screenTopEdge && screenPoint.y() < insetScreenTopEdge) {613 float distanceFromEdge = screenPoint.y() - screenTopEdge - EDGE_DISTANCE_THRESHOLD;606 adjustmentFactor.setWidth(edgeDistanceThreshold.width); 607 } 608 609 float screenTopEdge = unobscuredContentRect.y(); 610 float insetScreenTopEdge = screenTopEdge + edgeDistanceThreshold.height; 611 float screenBottomEdge = unobscuredContentRect.maxY(); 612 float insetScreenBottomEdge = screenBottomEdge - edgeDistanceThreshold.height; 613 614 if (contentPosition.y() >= screenTopEdge && contentPosition.y() < insetScreenTopEdge) { 615 float distanceFromEdge = contentPosition.y() - screenTopEdge - edgeDistanceThreshold.height; 614 616 if (distanceFromEdge < 0) 615 adjustmentFactor.setHeight(- EDGE_DISTANCE_THRESHOLD);616 } else if ( screenPoint.y() >= insetScreenBottomEdge && screenPoint.y() < screenBottomEdge) {617 float distanceFromEdge = EDGE_DISTANCE_THRESHOLD - (screenBottomEdge - screenPoint.y());617 adjustmentFactor.setHeight(-edgeDistanceThreshold.height); 618 } else if (contentPosition.y() >= insetScreenBottomEdge && contentPosition.y() < screenBottomEdge) { 619 float distanceFromEdge = edgeDistanceThreshold.height - (screenBottomEdge - contentPosition.y()); 618 620 if (distanceFromEdge > 0) 619 adjustmentFactor.setHeight( EDGE_DISTANCE_THRESHOLD);621 adjustmentFactor.setHeight(edgeDistanceThreshold.height); 620 622 } 621 623 … … 631 633 // Manually need to convert viewToContents, as it will be skipped because delegatedScrolling is on iOS 632 634 IntPoint contentPosition = protectedFrame->view()->viewToContents(protectedFrame->view()->convertFromContainingWindow(m_targetAutoscrollPositionInWindow)); 633 IntSize adjustPosition = autoscrollAdjustmentFactorForScreenBoundaries(contentPosition, unobscuredContentRect );635 IntSize adjustPosition = autoscrollAdjustmentFactorForScreenBoundaries(contentPosition, unobscuredContentRect, protectedFrame->page()->pageScaleFactor()); 634 636 return contentPosition + adjustPosition; 635 637 }
Note: See TracChangeset
for help on using the changeset viewer.