Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 6390ac13796720a15123cbb56cbe0971d9843e27
https://github.com/WebKit/WebKit/commit/6390ac13796720a15123cbb56cbe0971d9843e27
Author: Wenson Hsieh <[email protected]>
Date: 2024-12-11 (Wed, 11 Dec 2024)
Changed paths:
M Source/WebKit/Platform/spi/Cocoa/PDFKitSPI.h
M Source/WebKit/Shared/EditorState.cpp
M Source/WebKit/Shared/EditorState.h
M Source/WebKit/Shared/EditorState.serialization.in
M Source/WebKit/UIProcess/ios/WKContentViewInteraction.h
M Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm
M Source/WebKit/WebProcess/Plugins/PDF/PDFPluginBase.h
M Source/WebKit/WebProcess/Plugins/PDF/PDFPluginBase.mm
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/WebPage.cpp
M Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm
Log Message:
-----------
[iOS] [Unified PDF] Make it possible to select words by long pressing
https://bugs.webkit.org/show_bug.cgi?id=284477
Reviewed by Abrar Rahman Protyasha.
Work towards support for UIKit-based text interaction in PDFs when Unified PDF
is enabled. This
patch only introduces the minimal support needed to allow long presses to
select a single word in
a PDF document. See below for more details.
* Source/WebKit/Platform/spi/Cocoa/PDFKitSPI.h:
Remove some staging declarations that are no longer necessary, now that these
enums are public API.
* Source/WebKit/Shared/EditorState.cpp:
(WebKit::operator<<):
* Source/WebKit/Shared/EditorState.h:
Move `isInPlugin` behind `PLATFORM(MAC)`. This flag is currently unused on iOS
(no codepath sets it
to true).
* Source/WebKit/Shared/EditorState.serialization.in:
* Source/WebKit/UIProcess/ios/WKContentViewInteraction.h:
* Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:
(WebKit::WKSelectionDrawingInfo::WKSelectionDrawingInfo):
(WebKit::operator<<):
Remove dead code on iOS, now that `isInPlugin` is only available on macOS.
* Source/WebKit/WebProcess/Plugins/PDF/PDFPluginBase.h:
(WebKit::requires):
(WebKit::PDFPluginBase::convertFromRootViewToPlugin const):
(WebKit::PDFPluginBase::convertFromPluginToRootView const):
Turn these into templated coordinate space conversion helper methods, and use a
`CanMakeFloatRect`
concept here to call `mapRect` for both `IntRect` and `FloatRect` at compile
time; otherwise, call
`mapPoint` for both `IntPoint` and `FloatPoint`.
(WebKit::PDFPluginBase::setSelectionRange):
(WebKit::PDFPluginBase::platformPopulateEditorStateIfNeeded const):
Move logic to set the `isInPlugin` flag into `PDFPluginBase`, from `WebPage`.
This, as far as I
could tell, was only used on iOS prior to PDFKit integration, when the legacy
PDF plugin was still
utilized. It's now only required for macOS. On iOS, the unified PDF plugin
instead populates the
relevant members of `EditorState` and its associated structs.
* Source/WebKit/WebProcess/Plugins/PDF/PDFPluginBase.mm:
(WebKit::PDFPluginBase::populateEditorStateIfNeeded const):
(WebKit::PDFPluginBase::convertFromRootViewToPlugin const): Deleted.
(WebKit::PDFPluginBase::convertFromPluginToRootView const): Deleted.
See above.
* Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/UnifiedPDFPlugin.h:
* Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/UnifiedPDFPlugin.mm:
(WebKit::UnifiedPDFPlugin::continueTrackingSelection):
Drive-by fix: remove some now-unneeded explicit casts to
`PDFSelectionGranularity`.
(WebKit::UnifiedPDFPlugin::setCurrentSelection):
(WebKit::UnifiedPDFPlugin::setSelectionRange):
Add plumbing to set the current selection at the root view point, with the
given granularity. This
is invoked when long pressing to set the selection. We map the root view point
into plugin
coordinates, hit-test the `PDFDocument` for a selection under the point, and
then update the current
selection.
(WebKit::UnifiedPDFPlugin::platformPopulateEditorStateIfNeeded const):
Add logic to assemble an `EditorState` representing the selected text range in
the PDF plugin, based
on `PDFSelection`. For now, this just handles the case where the selection is a
single piece of
left-to-right text on a single line; in future patches, we'll need the ability
to coalesce adjacent
rects, handle bidirectional text, and a number of other use cases.
* Source/WebKit/WebProcess/Plugins/PluginView.cpp:
(WebKit::PluginView::setSelectionRange):
(WebKit::PluginView::populateEditorStateIfNeeded const):
* Source/WebKit/WebProcess/Plugins/PluginView.h:
* Source/WebKit/WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::editorState const):
Refactor this to defer to the PDF plugin if needed.
* Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::WebPage::setFocusedFrameBeforeSelectingTextAtLocation):
Defer to the PDF plugin in the case where the focused or main frame is a PDF.
(WebKit::WebPage::setSelectionRange):
Canonical link: https://commits.webkit.org/287724@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes