[webkit-changes] [WebKit/WebKit] 618b1e: [SwiftUI] Provide ability for clients to scroll a ...

Richard Robinson noreply at github.com
Fri Feb 28 14:29:11 PST 2025


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 618b1ef1bc467c98376d75b330ec744db9572c70
      https://github.com/WebKit/WebKit/commit/618b1ef1bc467c98376d75b330ec744db9572c70
  Author: Richard Robinson <richard_robinson2 at apple.com>
  Date:   2025-02-28 (Fri, 28 Feb 2025)

  Changed paths:
    M Source/WebCore/page/LocalFrameView.cpp
    M Source/WebCore/page/LocalFrameView.h
    M Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
    M Source/WebKit/UIProcess/API/Cocoa/WKWebViewInternal.h
    A Source/WebKit/UIProcess/API/Cocoa/_WKRectEdge+Extras.swift
    M Source/WebKit/UIProcess/API/Swift/WebPage.swift
    M Source/WebKit/UIProcess/WebPageProxy.cpp
    M Source/WebKit/UIProcess/WebPageProxy.h
    M Source/WebKit/WebKit.xcodeproj/project.pbxproj
    M Source/WebKit/WebProcess/WebPage/WebPage.cpp
    M Source/WebKit/WebProcess/WebPage/WebPage.h
    M Source/WebKit/WebProcess/WebPage/WebPage.messages.in
    M Source/WebKit/_WebKit_SwiftUI/CocoaWebViewAdapter.swift
    M Source/WebKit/_WebKit_SwiftUI/Foundation+Extras.swift
    M Source/WebKit/_WebKit_SwiftUI/SwiftUI+Extras.swift
    M Source/WebKit/_WebKit_SwiftUI/View+WebViewModifiers.swift
    M Source/WebKit/_WebKit_SwiftUI/ViewModifierContexts.swift
    M Source/WebKit/_WebKit_SwiftUI/WebViewRepresentable.swift

  Log Message:
  -----------
  [SwiftUI] Provide ability for clients to scroll a WebView using a ScrollPosition
https://bugs.webkit.org/show_bug.cgi?id=288813
rdar://145824125

Reviewed by Aditya Keerthi.

The existing `ScrollPosition` SwiftUI type in conjunction with the `.scrollPosition` view modifier allow clients to programatically
scroll in the following ways:

1. To a particular point
2. To a particular x or y value
3. To a particular edge
4. To a particular identifiable view

This implements support for (1) and (3) by adding a `.webViewScrollPosition` view modifier. (2) is not currently possible because
the SwiftUI API does not expose these properties. (4) is potentially possible, but out of scope for this PR.

To facilitate this, new functionality is internally added to WebKit to allow scrolling to a particular edge.

* Source/WebCore/page/LocalFrameView.cpp:
(WebCore::LocalFrameView::scrollToEdgeWithOptions):
* Source/WebCore/page/LocalFrameView.h:
* Source/WebKit/UIProcess/API/Cocoa/WKWebViewInternal.h:
* Source/WebKit/UIProcess/API/Cocoa/_WKRectEdge+Extras.swift: Copied from Source/WebKit/_WebKit_SwiftUI/Foundation+Extras.swift.
(_WKRectEdge.result):
* Source/WebKit/UIProcess/API/Swift/WebPage.swift:
(WebPageWebView.setContentOffset(_:animated:)):
(WebPageWebView.scrollTo(_:animated:)):
* Source/WebKit/UIProcess/API/mac/WKWebViewMac.mm:
(-[WKWebView _scrollToEdge:animated:]):
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::scrollToEdge):
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/UIProcess/mac/WebViewImpl.h:
* Source/WebKit/UIProcess/mac/WebViewImpl.mm:
(WebKit::WebViewImpl::scrollToEdge):
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Source/WebKit/WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::scrollToEdge):
* Source/WebKit/WebProcess/WebPage/WebPage.h:
* Source/WebKit/WebProcess/WebPage/WebPage.messages.in:
* Source/WebKit/_WebKit_SwiftUI/CocoaWebViewAdapter.swift:
(CocoaWebViewAdapter.scrollPosition):
* Source/WebKit/_WebKit_SwiftUI/Foundation+Extras.swift:
* Source/WebKit/_WebKit_SwiftUI/SwiftUI+Extras.swift:
(Transaction.isAnimated):
* Source/WebKit/_WebKit_SwiftUI/View+WebViewModifiers.swift:
(View.webViewScrollPosition(_:)):
* Source/WebKit/_WebKit_SwiftUI/ViewModifierContexts.swift:
(ScrollPositionContext.position):
* Source/WebKit/_WebKit_SwiftUI/WebViewRepresentable.swift:
(WebViewRepresentable.updatePlatformView(_:context:)):
(WebViewCoordinator.update(_:configuration:context:)):
(WebViewCoordinator.updateScrollPosition(_:context:)):
(WebViewCoordinator.updateFindInteraction(_:context:)):
(WebViewCoordinator.update(_:configuration:environment:)): Deleted.
(WebViewCoordinator.updateFindInteraction(_:environment:)): Deleted.

Canonical link: https://commits.webkit.org/291379@main



To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications


More information about the webkit-changes mailing list