[webkit-changes] [WebKit/WebKit] d618a7: [UnifiedPDF] [iPadOS] Support pointer cursor updat...
Wenson Hsieh
noreply at github.com
Mon Dec 16 10:33:37 PST 2024
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: d618a7ea2dabc54d6d27e60b6ea5362a09769ac9
https://github.com/WebKit/WebKit/commit/d618a7ea2dabc54d6d27e60b6ea5362a09769ac9
Author: Wenson Hsieh <wenson_hsieh at apple.com>
Date: 2024-12-16 (Mon, 16 Dec 2024)
Changed paths:
M Source/WebKit/DerivedSources-input.xcfilelist
M Source/WebKit/DerivedSources.make
A Source/WebKit/Shared/ios/CursorContext.h
A Source/WebKit/Shared/ios/CursorContext.serialization.in
M Source/WebKit/Shared/ios/InteractionInformationAtPosition.h
M Source/WebKit/Shared/ios/InteractionInformationAtPosition.serialization.in
M Source/WebKit/Shared/ios/InteractionInformationRequest.cpp
M Source/WebKit/Shared/ios/InteractionInformationRequest.h
M Source/WebKit/Shared/ios/InteractionInformationRequest.serialization.in
M Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm
M Source/WebKit/WebKit.xcodeproj/project.pbxproj
M Source/WebKit/WebProcess/Plugins/PDF/PDFPluginBase.h
M Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/UnifiedPDFPlugin.h
M Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/UnifiedPDFPlugin.mm
M Source/WebKit/WebProcess/Plugins/PluginView.cpp
M Source/WebKit/WebProcess/Plugins/PluginView.h
M Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm
Log Message:
-----------
[UnifiedPDF] [iPadOS] Support pointer cursor updates during mouse hover
https://bugs.webkit.org/show_bug.cgi?id=284674
rdar://141325020
Reviewed by Aditya Keerthi.
Add support for pointer styles (in particular, showing an iBeam when hovering over text in PDFs)
when unified PDF is enabled. See below for more details.
* Source/WebKit/DerivedSources-input.xcfilelist:
* Source/WebKit/DerivedSources.make:
* Source/WebKit/Shared/ios/CursorContext.h: Copied from Source/WebKit/Shared/ios/InteractionInformationRequest.cpp.
* Source/WebKit/Shared/ios/CursorContext.serialization.in: Copied from Source/WebKit/Shared/ios/InteractionInformationRequest.serialization.in.
Split out several cursor-related members on `InteractionInformationAtPosition` into a separate
struct, `WebKit::CursorContext`; this allows the new PDF plugin override point below to simply
return this struct containing only information about the cursor, rather than receiving and
populating the entire `InteractionInformationAtPosition` struct (most of which is irrelevant for
PDFs).
* Source/WebKit/Shared/ios/InteractionInformationAtPosition.h:
Instead of sending `caretLength` as a separate member over IPC, drop it entirely. This value is
redundant with either the width or height of the `lineCaretExtent`, depending on whether we're in
vertical writing mode.
* Source/WebKit/Shared/ios/InteractionInformationAtPosition.serialization.in:
* Source/WebKit/Shared/ios/InteractionInformationRequest.cpp:
See above.
(WebKit::InteractionInformationRequest::isValidForRequest const):
Also rename `includeCaretContext` to `includeCursorContext`, to clarify that this information is
about the mouse cursor (rather than the selection caret).
* Source/WebKit/Shared/ios/InteractionInformationRequest.h:
(WebKit::InteractionInformationRequest::InteractionInformationRequest):
* Source/WebKit/Shared/ios/InteractionInformationRequest.serialization.in:
* Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:
(-[WKContentView _updateLastPointerRegionIfNeeded:]):
Adjust some existing code to get information about the cursor through the new `CursorContext` struct
on the position information.
(-[WKContentView pointerRegionForPositionInformation:point:]):
(-[WKContentView pointerInteraction:styleForRegion:]):
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Source/WebKit/WebProcess/Plugins/PDF/PDFPluginBase.h:
(WebKit::PDFPluginBase::cursorContext const):
* Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/UnifiedPDFPlugin.h:
* Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/UnifiedPDFPlugin.mm:
(WebKit::UnifiedPDFPlugin::pdfElementTypesForPluginPoint const):
(WebKit::UnifiedPDFPlugin::pdfElementTypesForPagePoint const):
Add a variation of this helper method that takes a `PDFPage` and a point in the page. Make the
existing `pdfElementTypesForPluginPoint` helper use this method.
(WebKit::UnifiedPDFPlugin::moveSelectionEndpoint):
(WebKit::UnifiedPDFPlugin::extendInitialSelection):
Drive-by fix: remove several unnecessary `WebCore::`.
(WebKit::UnifiedPDFPlugin::platformPopulateEditorStateIfNeeded const):
Adopt the new `pageToRootView` helper below.
(WebKit::UnifiedPDFPlugin::cursorContext const):
Add a new method hook to obtain the cursor context from the unified PDF plugin. This works by hit-
testing to find the line (as a `PDFSelection`) closest to the requested point, and checking to see
if the requested point is inside of that selection. If so, we set the cursor to an IBeam and also
retrieve the bounds of the line in root view coordinates; otherwise, fall back on the default
cursor.
(WebKit::UnifiedPDFPlugin::pageToRootView const):
Add new helpers to map from PDF page coordinates to root view coordinates.
(WebKit::UnifiedPDFPlugin::rootViewToPage const):
* Source/WebKit/WebProcess/Plugins/PluginView.cpp:
(WebKit::PluginView::cursorContext const):
* Source/WebKit/WebProcess/Plugins/PluginView.h:
* Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::cursorContext):
(WebKit::WebPage::positionInformation):
Defer to the PDF plugin in the case where `includeCursorContext` is set, and the frame under the
cursor is a plugin.
(WebKit::populateCaretContext): Deleted.
Rename this to `cursorContext`, and have it return a struct for clarity. The extant helper method is
currently a bit confusing, since the caller must pass it a mutable position information struct, with
only the `cursor` member set.
Canonical link: https://commits.webkit.org/287894@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