Changeset 285986 in webkit
- Timestamp:
- Nov 17, 2021 11:58:23 PM (8 months ago)
- Location:
- trunk/Source
- Files:
-
- 21 edited
-
WebCore/ChangeLog (modified) (1 diff)
-
WebCore/Modules/model-element/HTMLModelElement.cpp (modified) (3 diffs)
-
WebCore/Modules/model-element/HTMLModelElement.h (modified) (3 diffs)
-
WebCore/Modules/model-element/ModelPlayer.cpp (modified) (1 diff)
-
WebCore/Modules/model-element/ModelPlayer.h (modified) (2 diffs)
-
WebCore/Modules/model-element/dummy/DummyModelPlayer.cpp (modified) (1 diff)
-
WebCore/Modules/model-element/dummy/DummyModelPlayer.h (modified) (1 diff)
-
WebCore/Modules/model-element/scenekit/SceneKitModelPlayer.h (modified) (1 diff)
-
WebCore/Modules/model-element/scenekit/SceneKitModelPlayer.mm (modified) (1 diff)
-
WebCore/PAL/ChangeLog (modified) (1 diff)
-
WebCore/PAL/pal/spi/mac/SystemPreviewSPI.h (modified) (1 diff)
-
WebKit/ChangeLog (modified) (1 diff)
-
WebKit/UIProcess/Cocoa/ModelElementControllerCocoa.mm (modified) (2 diffs)
-
WebKit/UIProcess/ModelElementController.h (modified) (2 diffs)
-
WebKit/UIProcess/WebPageProxy.cpp (modified) (1 diff)
-
WebKit/UIProcess/WebPageProxy.h (modified) (1 diff)
-
WebKit/UIProcess/WebPageProxy.messages.in (modified) (1 diff)
-
WebKit/WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.h (modified) (1 diff)
-
WebKit/WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.mm (modified) (1 diff)
-
WebKit/WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.h (modified) (1 diff)
-
WebKit/WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.mm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r285985 r285986 1 2021-11-18 Antoine Quint <graouts@webkit.org> 2 3 [Model] [macOS] Add support for interaction on macOS 4 https://bugs.webkit.org/show_bug.cgi?id=233105 5 <rdar://problem/80079386> 6 7 Reviewed by Wenson Hsieh. 8 9 Capture mouse events after the mouse button is pressed over a <model> element, 10 unless preventDefault() is called, and forward those events through ModelPlayer 11 to the UI process. 12 13 * Modules/model-element/HTMLModelElement.cpp: 14 (WebCore::HTMLModelElement::defaultEventHandler): 15 (WebCore::HTMLModelElement::dragDidStart): 16 (WebCore::HTMLModelElement::dragDidChange): 17 (WebCore::HTMLModelElement::dragDidEnd): 18 * Modules/model-element/HTMLModelElement.h: 19 * Modules/model-element/ModelPlayer.cpp: 20 (WebCore::ModelPlayer::supportsMouseInteraction): 21 * Modules/model-element/ModelPlayer.h: 22 * Modules/model-element/dummy/DummyModelPlayer.cpp: 23 (WebCore::DummyModelPlayer::handleMouseDown): 24 (WebCore::DummyModelPlayer::handleMouseMove): 25 (WebCore::DummyModelPlayer::handleMouseUp): 26 * Modules/model-element/dummy/DummyModelPlayer.h: 27 * Modules/model-element/scenekit/SceneKitModelPlayer.h: 28 * Modules/model-element/scenekit/SceneKitModelPlayer.mm: 29 (WebCore::SceneKitModelPlayer::handleMouseDown): 30 (WebCore::SceneKitModelPlayer::handleMouseMove): 31 (WebCore::SceneKitModelPlayer::handleMouseUp): 32 1 33 2021-11-17 Youenn Fablet <youenn@apple.com> 2 34 -
trunk/Source/WebCore/Modules/model-element/HTMLModelElement.cpp
r285922 r285986 34 34 #include "ElementChildIterator.h" 35 35 #include "ElementInlines.h" 36 #include "EventHandler.h" 37 #include "EventNames.h" 36 38 #include "GraphicsLayer.h" 37 39 #include "GraphicsLayerCA.h" … … 44 46 #include "ModelPlayer.h" 45 47 #include "ModelPlayerProvider.h" 48 #include "MouseEvent.h" 46 49 #include "Page.h" 50 #include "PlatformMouseEvent.h" 47 51 #include "RenderLayer.h" 48 52 #include "RenderLayerBacking.h" … … 290 294 } 291 295 296 // MARK: - Interaction support. 297 298 void HTMLModelElement::defaultEventHandler(Event& event) 299 { 300 if (!m_modelPlayer || !m_modelPlayer->supportsMouseInteraction()) 301 return; 302 303 auto type = event.type(); 304 if (type != eventNames().mousedownEvent && type != eventNames().mousemoveEvent && type != eventNames().mouseupEvent) 305 return; 306 307 ASSERT(is<MouseEvent>(event)); 308 auto& mouseEvent = downcast<MouseEvent>(event); 309 310 if (mouseEvent.button() != LeftButton) 311 return; 312 313 if (type == eventNames().mousedownEvent && !m_isDragging && !event.defaultPrevented()) 314 dragDidStart(mouseEvent); 315 else if (type == eventNames().mousemoveEvent && m_isDragging) 316 dragDidChange(mouseEvent); 317 else if (type == eventNames().mouseupEvent && m_isDragging) 318 dragDidEnd(mouseEvent); 319 } 320 321 void HTMLModelElement::dragDidStart(MouseEvent& event) 322 { 323 ASSERT(!m_isDragging); 324 325 RefPtr frame = document().frame(); 326 if (!frame) 327 return; 328 329 frame->eventHandler().setCapturingMouseEventsElement(this); 330 event.setDefaultHandled(); 331 m_isDragging = true; 332 333 if (m_modelPlayer) 334 m_modelPlayer->handleMouseDown(event.pageLocation(), event.timeStamp()); 335 } 336 337 void HTMLModelElement::dragDidChange(MouseEvent& event) 338 { 339 ASSERT(m_isDragging); 340 341 event.setDefaultHandled(); 342 343 if (m_modelPlayer) 344 m_modelPlayer->handleMouseMove(event.pageLocation(), event.timeStamp()); 345 } 346 347 void HTMLModelElement::dragDidEnd(MouseEvent& event) 348 { 349 ASSERT(m_isDragging); 350 351 RefPtr frame = document().frame(); 352 if (!frame) 353 return; 354 355 frame->eventHandler().setCapturingMouseEventsElement(nullptr); 356 event.setDefaultHandled(); 357 m_isDragging = false; 358 359 if (m_modelPlayer) 360 m_modelPlayer->handleMouseUp(event.pageLocation(), event.timeStamp()); 361 } 362 292 363 } 293 364 -
trunk/Source/WebCore/Modules/model-element/HTMLModelElement.h
r285922 r285986 41 41 namespace WebCore { 42 42 43 class Event; 43 44 class Model; 44 45 class ModelPlayer; 46 class MouseEvent; 45 47 46 48 template<typename IDLType> class DOMPromiseProxyWithResolveCallback; … … 93 95 GraphicsLayer::PlatformLayerID platformLayerID() final; 94 96 97 void defaultEventHandler(Event&) final; 98 void dragDidStart(MouseEvent&); 99 void dragDidChange(MouseEvent&); 100 void dragDidEnd(MouseEvent&); 101 95 102 URL m_sourceURL; 96 103 CachedResourceHandle<CachedRawResource> m_resource; … … 99 106 UniqueRef<ReadyPromise> m_readyPromise; 100 107 bool m_dataComplete { false }; 108 bool m_isDragging { false }; 101 109 102 110 RefPtr<ModelPlayer> m_modelPlayer; -
trunk/Source/WebCore/Modules/model-element/ModelPlayer.cpp
r285637 r285986 31 31 ModelPlayer::~ModelPlayer() = default; 32 32 33 bool ModelPlayer::supportsMouseInteraction() 34 { 35 return false; 33 36 } 37 38 } -
trunk/Source/WebCore/Modules/model-element/ModelPlayer.h
r285922 r285986 26 26 #pragma once 27 27 28 #include "LayoutPoint.h" 28 29 #include "LayoutSize.h" 29 30 #include "PlatformLayer.h" 30 31 #include <wtf/Forward.h> 32 #include <wtf/MonotonicTime.h> 31 33 32 34 namespace WebCore { … … 42 44 virtual PlatformLayer* layer() = 0; 43 45 virtual void enterFullscreen() = 0; 46 virtual bool supportsMouseInteraction(); 47 virtual void handleMouseDown(const LayoutPoint&, MonotonicTime) = 0; 48 virtual void handleMouseMove(const LayoutPoint&, MonotonicTime) = 0; 49 virtual void handleMouseUp(const LayoutPoint&, MonotonicTime) = 0; 50 44 51 }; 45 52 -
trunk/Source/WebCore/Modules/model-element/dummy/DummyModelPlayer.cpp
r285922 r285986 59 59 } 60 60 61 void DummyModelPlayer::handleMouseDown(const LayoutPoint&, MonotonicTime) 62 { 61 63 } 64 65 void DummyModelPlayer::handleMouseMove(const LayoutPoint&, MonotonicTime) 66 { 67 } 68 69 void DummyModelPlayer::handleMouseUp(const LayoutPoint&, MonotonicTime) 70 { 71 } 72 73 } -
trunk/Source/WebCore/Modules/model-element/dummy/DummyModelPlayer.h
r285922 r285986 45 45 PlatformLayer* layer() override; 46 46 void enterFullscreen() override; 47 void handleMouseDown(const LayoutPoint&, MonotonicTime) override; 48 void handleMouseMove(const LayoutPoint&, MonotonicTime) override; 49 void handleMouseUp(const LayoutPoint&, MonotonicTime) override; 47 50 48 51 WeakPtr<ModelPlayerClient> m_client; -
trunk/Source/WebCore/Modules/model-element/scenekit/SceneKitModelPlayer.h
r285922 r285986 59 59 CALayer *layer() override; 60 60 void enterFullscreen() override; 61 void handleMouseDown(const LayoutPoint&, MonotonicTime) override; 62 void handleMouseMove(const LayoutPoint&, MonotonicTime) override; 63 void handleMouseUp(const LayoutPoint&, MonotonicTime) override; 61 64 62 65 // SceneKitModelLoaderClient overrides. -
trunk/Source/WebCore/Modules/model-element/scenekit/SceneKitModelPlayer.mm
r285922 r285986 77 77 } 78 78 79 void SceneKitModelPlayer::handleMouseDown(const LayoutPoint&, MonotonicTime) 80 { 81 } 82 83 void SceneKitModelPlayer::handleMouseMove(const LayoutPoint&, MonotonicTime) 84 { 85 } 86 87 void SceneKitModelPlayer::handleMouseUp(const LayoutPoint&, MonotonicTime) 88 { 89 } 90 79 91 // MARK: - SceneKitModelLoaderClient overrides. 80 92 -
trunk/Source/WebCore/PAL/ChangeLog
r285981 r285986 1 2021-11-18 Antoine Quint <graouts@webkit.org> 2 3 [Model] [macOS] Add support for interaction on macOS 4 https://bugs.webkit.org/show_bug.cgi?id=233105 5 <rdar://problem/80079386> 6 7 Reviewed by Wenson Hsieh. 8 9 Add new ARQL SPIs. 10 11 * pal/spi/mac/SystemPreviewSPI.h: 12 1 13 2021-11-17 Myles C. Maxfield <mmaxfield@apple.com> 2 14 -
trunk/Source/WebCore/PAL/pal/spi/mac/SystemPreviewSPI.h
r283171 r285986 49 49 - (void)setRemoteContext:(uint32_t)contextId; 50 50 51 - (void)mouseDownAtLocation:(CGPoint)location timestamp:(NSTimeInterval)timestamp; 52 - (void)mouseDraggedAtLocation:(CGPoint)location timestamp:(NSTimeInterval)timestamp; 53 - (void)mouseUpAtLocation:(CGPoint)location timestamp:(NSTimeInterval)timestamp; 54 51 55 @end 52 56 -
trunk/Source/WebKit/ChangeLog
r285984 r285986 1 2021-11-18 Antoine Quint <graouts@webkit.org> 2 3 [Model] [macOS] Add support for interaction on macOS 4 https://bugs.webkit.org/show_bug.cgi?id=233105 5 <rdar://problem/80079386> 6 7 Reviewed by Wenson Hsieh. 8 9 Forward mouse events captured in the Web process to the matching ASVInlinePreview. 10 11 * UIProcess/Cocoa/ModelElementControllerCocoa.mm: 12 (WebKit::ModelElementController::previewForUUID): 13 (WebKit::ModelElementController::handleMouseDownForModelElement): 14 (WebKit::ModelElementController::handleMouseMoveForModelElement): 15 (WebKit::ModelElementController::handleMouseUpForModelElement): 16 * UIProcess/ModelElementController.h: 17 * UIProcess/WebPageProxy.cpp: 18 (WebKit::WebPageProxy::handleMouseDownForModelElement): 19 (WebKit::WebPageProxy::handleMouseMoveForModelElement): 20 (WebKit::WebPageProxy::handleMouseUpForModelElement): 21 * UIProcess/WebPageProxy.h: 22 * UIProcess/WebPageProxy.messages.in: 23 * WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.h: 24 * WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.mm: 25 (WebKit::ARKitInlinePreviewModelPlayerIOS::handleMouseDown): 26 (WebKit::ARKitInlinePreviewModelPlayerIOS::handleMouseMove): 27 (WebKit::ARKitInlinePreviewModelPlayerIOS::handleMouseUp): 28 * WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.h: 29 * WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.mm: 30 (WebKit::ARKitInlinePreviewModelPlayerMac::supportsMouseInteraction): 31 (WebKit::ARKitInlinePreviewModelPlayerMac::handleMouseDown): 32 (WebKit::ARKitInlinePreviewModelPlayerMac::handleMouseMove): 33 (WebKit::ARKitInlinePreviewModelPlayerMac::handleMouseUp): 34 1 35 2021-11-17 Youenn Fablet <youenn@apple.com> 2 36 -
trunk/Source/WebKit/UIProcess/Cocoa/ModelElementControllerCocoa.mm
r285637 r285986 43 43 44 44 #if ENABLE(ARKIT_INLINE_PREVIEW_MAC) 45 #import <WebCore/LayoutPoint.h> 46 #import <WebCore/LayoutUnit.h> 45 47 #import <WebCore/ResourceError.h> 46 48 #import <pal/spi/mac/SystemPreviewSPI.h> 47 49 #import <wtf/MainThread.h> 50 #import <wtf/MonotonicTime.h> 48 51 #endif 49 52 … … 189 192 } 190 193 191 #endif 192 193 } 194 195 #endif 194 RetainPtr<ASVInlinePreview> ModelElementController::previewForUUID(const String& uuid) 195 { 196 return m_inlinePreviews.get(uuid); 197 } 198 199 void ModelElementController::handleMouseDownForModelElement(const String& uuid, const WebCore::LayoutPoint& locationInPageCoordinates, MonotonicTime timestamp) 200 { 201 if (auto preview = previewForUUID(uuid)) 202 [preview mouseDownAtLocation:CGPointMake(locationInPageCoordinates.x().toFloat(), locationInPageCoordinates.y().toFloat()) timestamp:timestamp.secondsSinceEpoch().value()]; 203 } 204 205 void ModelElementController::handleMouseMoveForModelElement(const String& uuid, const WebCore::LayoutPoint& locationInPageCoordinates, MonotonicTime timestamp) 206 { 207 if (auto preview = previewForUUID(uuid)) 208 [preview mouseDraggedAtLocation:CGPointMake(locationInPageCoordinates.x().toFloat(), locationInPageCoordinates.y().toFloat()) timestamp:timestamp.secondsSinceEpoch().value()]; 209 } 210 211 void ModelElementController::handleMouseUpForModelElement(const String& uuid, const WebCore::LayoutPoint& locationInPageCoordinates, MonotonicTime timestamp) 212 { 213 if (auto preview = previewForUUID(uuid)) 214 [preview mouseUpAtLocation:CGPointMake(locationInPageCoordinates.x().toFloat(), locationInPageCoordinates.y().toFloat()) timestamp:timestamp.secondsSinceEpoch().value()]; 215 } 216 217 #endif 218 219 } 220 221 #endif -
trunk/Source/WebKit/UIProcess/ModelElementController.h
r285637 r285986 54 54 #if ENABLE(ARKIT_INLINE_PREVIEW_MAC) 55 55 void modelElementDidCreatePreview(URL, String, WebCore::FloatSize, CompletionHandler<void(Expected<std::pair<String, uint32_t>, WebCore::ResourceError>)>&&); 56 void handleMouseDownForModelElement(const String&, const WebCore::LayoutPoint&, MonotonicTime); 57 void handleMouseMoveForModelElement(const String&, const WebCore::LayoutPoint&, MonotonicTime); 58 void handleMouseUpForModelElement(const String&, const WebCore::LayoutPoint&, MonotonicTime); 56 59 #endif 57 60 … … 59 62 WebPageProxy& m_webPageProxy; 60 63 #if ENABLE(ARKIT_INLINE_PREVIEW_MAC) 64 RetainPtr<ASVInlinePreview> previewForUUID(const String&); 61 65 HashMap<String, RetainPtr<ASVInlinePreview>> m_inlinePreviews; 62 66 #endif -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r285980 r285986 10845 10845 modelElementController()->modelElementDidCreatePreview(url, uuid, size, WTFMove(completionHandler)); 10846 10846 } 10847 10848 void WebPageProxy::handleMouseDownForModelElement(const String& uuid, const WebCore::LayoutPoint& locationInPageCoordinates, MonotonicTime timestamp) 10849 { 10850 modelElementController()->handleMouseDownForModelElement(uuid, locationInPageCoordinates, timestamp); 10851 } 10852 10853 void WebPageProxy::handleMouseMoveForModelElement(const String& uuid, const WebCore::LayoutPoint& locationInPageCoordinates, MonotonicTime timestamp) 10854 { 10855 modelElementController()->handleMouseMoveForModelElement(uuid, locationInPageCoordinates, timestamp); 10856 } 10857 10858 void WebPageProxy::handleMouseUpForModelElement(const String& uuid, const WebCore::LayoutPoint& locationInPageCoordinates, MonotonicTime timestamp) 10859 { 10860 modelElementController()->handleMouseUpForModelElement(uuid, locationInPageCoordinates, timestamp); 10861 } 10847 10862 #endif 10848 10863 -
trunk/Source/WebKit/UIProcess/WebPageProxy.h
r285980 r285986 594 594 #if ENABLE(ARKIT_INLINE_PREVIEW_MAC) 595 595 void modelElementDidCreatePreview(const URL&, const String&, const WebCore::FloatSize&, CompletionHandler<void(Expected<std::pair<String, uint32_t>, WebCore::ResourceError>)>&&); 596 void handleMouseDownForModelElement(const String&, const WebCore::LayoutPoint&, MonotonicTime); 597 void handleMouseMoveForModelElement(const String&, const WebCore::LayoutPoint&, MonotonicTime); 598 void handleMouseUpForModelElement(const String&, const WebCore::LayoutPoint&, MonotonicTime); 596 599 #endif 597 600 -
trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in
r285980 r285986 591 591 #if ENABLE(ARKIT_INLINE_PREVIEW_MAC) 592 592 ModelElementDidCreatePreview(URL url, String uuid, WebCore::FloatSize size) -> (Expected<std::pair<String, uint32_t>, WebCore::ResourceError> result) Async 593 HandleMouseDownForModelElement(String uuid, WebCore::LayoutPoint locationInPageCoordinates, MonotonicTime timestamp) 594 HandleMouseMoveForModelElement(String uuid, WebCore::LayoutPoint locationInPageCoordinates, MonotonicTime timestamp) 595 HandleMouseUpForModelElement(String uuid, WebCore::LayoutPoint locationInPageCoordinates, MonotonicTime timestamp) 593 596 #endif 594 597 -
trunk/Source/WebKit/WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.h
r285922 r285986 44 44 // WebCore::ModelPlayer overrides. 45 45 void enterFullscreen() override; 46 void handleMouseDown(const WebCore::LayoutPoint&, MonotonicTime) override; 47 void handleMouseMove(const WebCore::LayoutPoint&, MonotonicTime) override; 48 void handleMouseUp(const WebCore::LayoutPoint&, MonotonicTime) override; 46 49 }; 47 50 -
trunk/Source/WebKit/WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.mm
r285922 r285986 60 60 } 61 61 62 void ARKitInlinePreviewModelPlayerIOS::handleMouseDown(const WebCore::LayoutPoint&, MonotonicTime) 63 { 64 ASSERT_NOT_REACHED(); 62 65 } 63 66 67 void ARKitInlinePreviewModelPlayerIOS::handleMouseMove(const WebCore::LayoutPoint&, MonotonicTime) 68 { 69 ASSERT_NOT_REACHED(); 70 } 71 72 void ARKitInlinePreviewModelPlayerIOS::handleMouseUp(const WebCore::LayoutPoint&, MonotonicTime) 73 { 74 ASSERT_NOT_REACHED(); 75 } 76 77 } 64 78 #endif -
trunk/Source/WebKit/WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.h
r285922 r285986 51 51 void load(WebCore::Model&, WebCore::LayoutSize) override; 52 52 PlatformLayer* layer() override; 53 bool supportsMouseInteraction() override; 54 void handleMouseDown(const WebCore::LayoutPoint&, MonotonicTime) override; 55 void handleMouseMove(const WebCore::LayoutPoint&, MonotonicTime) override; 56 void handleMouseUp(const WebCore::LayoutPoint&, MonotonicTime) override; 53 57 54 58 void createFile(WebCore::Model&); -
trunk/Source/WebKit/WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.mm
r285922 r285986 171 171 } 172 172 173 } 174 173 bool ARKitInlinePreviewModelPlayerMac::supportsMouseInteraction() 174 { 175 #if ENABLE(ARKIT_INLINE_PREVIEW_MAC) 176 return true; 175 177 #endif 178 return false; 179 } 180 181 void ARKitInlinePreviewModelPlayerMac::handleMouseDown(const LayoutPoint& locationInPageCoordinates, MonotonicTime timestamp) 182 { 183 if (auto* page = this->page()) 184 page->send(Messages::WebPageProxy::HandleMouseDownForModelElement([m_inlinePreview uuid].UUIDString, locationInPageCoordinates, timestamp)); 185 } 186 187 void ARKitInlinePreviewModelPlayerMac::handleMouseMove(const LayoutPoint& locationInPageCoordinates, MonotonicTime timestamp) 188 { 189 if (auto* page = this->page()) 190 page->send(Messages::WebPageProxy::HandleMouseMoveForModelElement([m_inlinePreview uuid].UUIDString, locationInPageCoordinates, timestamp)); 191 } 192 193 void ARKitInlinePreviewModelPlayerMac::handleMouseUp(const LayoutPoint& locationInPageCoordinates, MonotonicTime timestamp) 194 { 195 if (auto* page = this->page()) 196 page->send(Messages::WebPageProxy::HandleMouseUpForModelElement([m_inlinePreview uuid].UUIDString, locationInPageCoordinates, timestamp)); 197 } 198 199 } 200 201 #endif
Note: See TracChangeset
for help on using the changeset viewer.