diff --git a/content_handler/BUILD.gn b/content_handler/BUILD.gn index 3fe63d5e41d18cef7fb255ab7f9eec879f1a86a7..4d0460783ee6770a99309a108b732c7c90533b90 100644 --- a/content_handler/BUILD.gn +++ b/content_handler/BUILD.gn @@ -33,7 +33,6 @@ executable("content_handler") { "//flutter/lib/ui", "//flutter/runtime", "//flutter/services/engine:interfaces", - "//flutter/services/pointer:interfaces", "//flutter/sky/engine/platform", "//lib/ftl", "//lib/mtl", diff --git a/lib/ui/BUILD.gn b/lib/ui/BUILD.gn index 08c6350bb6522f5467d2d0d1c2d2b11718e29877..5823ac68d9b96dc7b165ded5c5622ba8bf4ddb60 100644 --- a/lib/ui/BUILD.gn +++ b/lib/ui/BUILD.gn @@ -72,7 +72,6 @@ source_set("ui") { "//flutter/flow", "//flutter/glue", "//flutter/services/engine:interfaces", - "//flutter/services/pointer:interfaces", "//flutter/skia", "//flutter/sky/engine", "//lib/tonic", diff --git a/lib/ui/window/pointer_data.cc b/lib/ui/window/pointer_data.cc index 2b8b041ad90ac78d757560353ed73733636d6e82..e14156e5048fc1c966a1dffa40fa4be1b927dc74 100644 --- a/lib/ui/window/pointer_data.cc +++ b/lib/ui/window/pointer_data.cc @@ -12,4 +12,26 @@ static constexpr int kPointerDataFieldCount = 19; static_assert(sizeof(PointerData) == sizeof(int64_t) * kPointerDataFieldCount, "PointerData has the wrong size"); +void PointerData::Clear() { + time_stamp = 0; + pointer = 0; + change = Change::kCancel; + kind = DeviceKind::kTouch; + physical_x = 0.0; + physical_y = 0.0; + buttons = 0; + obscured = 0; + pressure = 0.0; + pressure_min = 0.0; + pressure_max = 0.0; + distance = 0.0; + distance_max = 0.0; + radius_major = 0.0; + radius_minor = 0.0; + radius_min = 0.0; + radius_max = 0.0; + orientation = 0.0; + tilt = 0.0; +} + } // namespace blink diff --git a/lib/ui/window/pointer_data.h b/lib/ui/window/pointer_data.h index 7a35e8aeb7ee3ba69ade74b33b9ca8a8d81b7f66..61b901e6e251b375c06d1c7bb9bd0762baf1a1cd 100644 --- a/lib/ui/window/pointer_data.h +++ b/lib/ui/window/pointer_data.h @@ -48,6 +48,8 @@ struct alignas(8) PointerData { double radius_max; double orientation; double tilt; + + void Clear(); }; } // namespace blink diff --git a/lib/ui/window/window.h b/lib/ui/window/window.h index e6fc8bbc3399e631c531df116b85ee480262a3f9..4f955559d1c7e952b9d6885fd26bae068c047026 100644 --- a/lib/ui/window/window.h +++ b/lib/ui/window/window.h @@ -8,7 +8,6 @@ #include "flutter/lib/ui/semantics/semantics_update.h" #include "flutter/lib/ui/window/pointer_data_packet.h" #include "flutter/services/engine/sky_engine.mojom.h" -#include "flutter/services/pointer/pointer.mojom.h" #include "lib/ftl/time/time_point.h" #include "lib/tonic/dart_persistent_value.h" diff --git a/runtime/BUILD.gn b/runtime/BUILD.gn index bf5247ec86a8519d56946c5f9fe8231a68570267..fa0fb3bb3ade5b181ccd5a5642d2b17c5a2fdac9 100644 --- a/runtime/BUILD.gn +++ b/runtime/BUILD.gn @@ -74,7 +74,6 @@ source_set("runtime") { "//flutter/lib/mojo", "//flutter/lib/ui", "//flutter/services/engine:interfaces", - "//flutter/services/pointer:interfaces", "//flutter/skia", "//flutter/sky/engine/platform", "//lib/ftl", diff --git a/runtime/runtime_controller.h b/runtime/runtime_controller.h index 3dd8d734efb81ed6b0ed01cfc5a3bf20c779efc0..3a6d271d4a0a4561fbbbc4022661b5c5c2938bce 100644 --- a/runtime/runtime_controller.h +++ b/runtime/runtime_controller.h @@ -12,7 +12,6 @@ #include "flutter/lib/ui/window/pointer_data_packet.h" #include "flutter/lib/ui/window/window.h" #include "flutter/services/engine/sky_engine.mojom.h" -#include "flutter/services/pointer/pointer.mojom.h" #include "lib/ftl/macros.h" namespace blink { diff --git a/services/engine/BUILD.gn b/services/engine/BUILD.gn index ef44b7121ec0007f1c7a4b926aef658f2e5a16f9..2bfc9653ea422772396955be040abe0b27dc2da6 100644 --- a/services/engine/BUILD.gn +++ b/services/engine/BUILD.gn @@ -11,7 +11,6 @@ mojom("interfaces") { ] deps = [ - "//flutter/services/pointer:interfaces", "//mojo/public/interfaces/application", "//mojo/services/asset_bundle/interfaces", ] diff --git a/services/engine/sky_engine.mojom b/services/engine/sky_engine.mojom index 3c054af79e4a99dc4d1c7560cd4a4e1fdec74f3a..9becd8e7521442e81004a6d2bc274dc317f21800 100644 --- a/services/engine/sky_engine.mojom +++ b/services/engine/sky_engine.mojom @@ -5,7 +5,6 @@ module sky; import "flutter/services/engine/input_event.mojom"; -import "flutter/services/pointer/pointer.mojom"; import "mojo/public/interfaces/application/service_provider.mojom"; import "mojo/public/interfaces/application/shell.mojom"; import "mojo/services/asset_bundle/interfaces/asset_bundle.mojom"; @@ -41,7 +40,6 @@ interface SkyEngine { OnViewportMetricsChanged(ViewportMetrics metrics); OnLocaleChanged(string language_code, string country_code); - OnPointerPacket(pointer.PointerPacket packet); PushRoute(string route); PopRoute(); diff --git a/services/pointer/BUILD.gn b/services/pointer/BUILD.gn deleted file mode 100644 index 9529ffabb9e36b2a213d61f0846359f504cffe0f..0000000000000000000000000000000000000000 --- a/services/pointer/BUILD.gn +++ /dev/null @@ -1,11 +0,0 @@ -# Copyright 2015 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import("//mojo/public/tools/bindings/mojom.gni") - -mojom("interfaces") { - sources = [ - "pointer.mojom", - ] -} diff --git a/services/pointer/pointer.mojom b/services/pointer/pointer.mojom deleted file mode 100644 index d279a55eef1f42604fc8a2e578d5a44fcd533f31..0000000000000000000000000000000000000000 --- a/services/pointer/pointer.mojom +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -[DartPackage="sky_services"] -module pointer; - -// See https://github.com/flutter/engine/blob/master/sky/specs/pointer.md - -enum PointerType { - DOWN, - UP, - MOVE, - CANCEL, -}; - -enum PointerKind { - TOUCH, - MOUSE, - STYLUS, - INVERTED_STYLUS, -}; - -struct Pointer { - int64 time_stamp; - int32 pointer; - PointerType type; - PointerKind kind; - float x; - float y; - int32 buttons; - bool down; - bool primary; - bool obscured; - float pressure; - float pressure_min; - float pressure_max; - float distance; - float distance_min; - float distance_max; - float radius_major; - float radius_minor; - float radius_min; - float radius_max; - float orientation; - float tilt; -}; - -struct PointerPacket { - array pointers; -}; - -[ServiceName="pointer::PointerListener"] -interface PointerListener { - OnPointerPacket(PointerPacket packet); -}; diff --git a/shell/common/engine.cc b/shell/common/engine.cc index c6e51c55dd452c96b31d50e347bbb52252ff0b2b..e3f124fd1e07c81462bca374b3ee78ff685a7326 100644 --- a/shell/common/engine.cc +++ b/shell/common/engine.cc @@ -45,37 +45,6 @@ std::string FindPackagesPath(const std::string& main_dart) { return packages_path; } -blink::PointerData::Change GetChangeFromPointerType(pointer::PointerType type) { - switch (type) { - case pointer::PointerType::DOWN: - return blink::PointerData::Change::kDown; - case pointer::PointerType::UP: - return blink::PointerData::Change::kUp; - case pointer::PointerType::MOVE: - return blink::PointerData::Change::kMove; - case pointer::PointerType::CANCEL: - return blink::PointerData::Change::kCancel; - } - FTL_NOTREACHED(); - return blink::PointerData::Change::kCancel; -} - -blink::PointerData::DeviceKind GetDeviceKindFromPointerKind( - pointer::PointerKind kind) { - switch (kind) { - case pointer::PointerKind::TOUCH: - return blink::PointerData::DeviceKind::kTouch; - case pointer::PointerKind::MOUSE: - return blink::PointerData::DeviceKind::kMouse; - case pointer::PointerKind::STYLUS: - return blink::PointerData::DeviceKind::kStylus; - case pointer::PointerKind::INVERTED_STYLUS: - return blink::PointerData::DeviceKind::kInvertedStylus; - } - FTL_NOTREACHED(); - return blink::PointerData::DeviceKind::kTouch; -} - } // namespace Engine::Engine(Rasterizer* rasterizer) @@ -191,41 +160,6 @@ void Engine::DispatchPointerDataPacket(const PointerDataPacket& packet) { runtime_->DispatchPointerDataPacket(packet); } -// TODO(abarth): Remove pointer::PointerPacketPtr and route PointerDataPacket -// here. -void Engine::OnPointerPacket(pointer::PointerPacketPtr packetPtr) { - TRACE_EVENT0("flutter", "Engine::OnPointerPacket"); - if (runtime_) { - const size_t length = packetPtr->pointers.size(); - PointerDataPacket packet(length); - for (size_t i = 0; i < length; ++i) { - const pointer::PointerPtr& pointer = packetPtr->pointers[i]; - blink::PointerData pointer_data; - pointer_data.time_stamp = pointer->time_stamp; - pointer_data.pointer = pointer->pointer; - pointer_data.change = GetChangeFromPointerType(pointer->type); - pointer_data.kind = GetDeviceKindFromPointerKind(pointer->kind); - pointer_data.physical_x = pointer->x; - pointer_data.physical_y = pointer->y; - pointer_data.buttons = pointer->buttons; - pointer_data.obscured = pointer->obscured ? 1 : 0; - pointer_data.pressure = pointer->pressure; - pointer_data.pressure_min = pointer->pressure_min; - pointer_data.pressure_max = pointer->pressure_max; - pointer_data.distance = pointer->distance; - pointer_data.distance_max = pointer->distance_max; - pointer_data.radius_major = pointer->radius_major; - pointer_data.radius_minor = pointer->radius_minor; - pointer_data.radius_min = pointer->radius_min; - pointer_data.radius_max = pointer->radius_max; - pointer_data.orientation = pointer->orientation; - pointer_data.tilt = pointer->tilt; - packet.SetPointerData(i, pointer_data); - } - runtime_->DispatchPointerDataPacket(packet); - } -} - void Engine::RunFromSnapshotStream( const std::string& script_uri, mojo::ScopedDataPipeConsumerHandle snapshot) { diff --git a/shell/common/engine.h b/shell/common/engine.h index 7db19823f0e1048176ce995921a190d6c15a4d2e..767be43e6ad43db43f2bc2707f4c7a896cd8639a 100644 --- a/shell/common/engine.h +++ b/shell/common/engine.h @@ -62,7 +62,6 @@ class Engine : public UIDelegate, void OnViewportMetricsChanged(sky::ViewportMetricsPtr metrics) override; void OnLocaleChanged(const mojo::String& language_code, const mojo::String& country_code) override; - void OnPointerPacket(pointer::PointerPacketPtr packet) override; void RunFromFile(const mojo::String& main, const mojo::String& packages, diff --git a/shell/platform/darwin/common/BUILD.gn b/shell/platform/darwin/common/BUILD.gn index fad4168c8f1edf8fe27416f2f77e1b5b14901cab..9f9ce302cd32445a06620de9719a88b788b09b51 100644 --- a/shell/platform/darwin/common/BUILD.gn +++ b/shell/platform/darwin/common/BUILD.gn @@ -26,7 +26,6 @@ source_set("common") { "//flutter/services/engine:interfaces", "//flutter/services/media", "//flutter/services/platform", - "//flutter/services/pointer:interfaces", "//flutter/services/vsync", "//flutter/shell/common", "//flutter/shell/gpu", diff --git a/shell/platform/darwin/desktop/BUILD.gn b/shell/platform/darwin/desktop/BUILD.gn index 3de52a84715cbb73dca9f60afe45a57cb5664918..143783ef74690811d41a3a9e6be7f3da991cd732 100644 --- a/shell/platform/darwin/desktop/BUILD.gn +++ b/shell/platform/darwin/desktop/BUILD.gn @@ -23,7 +23,7 @@ source_set("mac_desktop_platform") { deps = [ "//base", - "//flutter/services/pointer:interfaces", + "//flutter/common", "//flutter/shell/common", "//flutter/shell/platform/darwin/common", "//flutter/shell/testing", diff --git a/shell/platform/darwin/desktop/sky_window.mm b/shell/platform/darwin/desktop/sky_window.mm index d6192e22a268977926e77027e3a1d6a5cd44b402..b066aa86e66878cb87b29e491f6ebc2a45338cf3 100644 --- a/shell/platform/darwin/desktop/sky_window.mm +++ b/shell/platform/darwin/desktop/sky_window.mm @@ -4,8 +4,8 @@ #import "sky_window.h" -#include "base/time/time.h" -#include "flutter/services/pointer/pointer.mojom.h" +#include "lib/ftl/time/time_delta.h" +#include "flutter/common/threads.h" #include "flutter/shell/platform/darwin/desktop/platform_view_mac.h" @interface SkyWindow () @@ -15,30 +15,30 @@ @end -static inline pointer::PointerType EventTypeFromNSEventPhase( +static inline blink::PointerData::Change PointerChangeFromNSEventPhase( NSEventPhase phase) { switch (phase) { case NSEventPhaseNone: - return pointer::PointerType::CANCEL; + return blink::PointerData::Change::kCancel; case NSEventPhaseBegan: - return pointer::PointerType::DOWN; + return blink::PointerData::Change::kDown; case NSEventPhaseStationary: // There is no EVENT_TYPE_POINTER_STATIONARY. So we just pass a move type // with the same coordinates case NSEventPhaseChanged: - return pointer::PointerType::MOVE; + return blink::PointerData::Change::kMove; case NSEventPhaseEnded: - return pointer::PointerType::UP; + return blink::PointerData::Change::kUp; case NSEventPhaseCancelled: - return pointer::PointerType::CANCEL; + return blink::PointerData::Change::kCancel; case NSEventPhaseMayBegin: - return pointer::PointerType::CANCEL; + return blink::PointerData::Change::kCancel; } - return pointer::PointerType::CANCEL; + return blink::PointerData::Change::kCancel; } @implementation SkyWindow { - std::unique_ptr _platform_view; + std::unique_ptr _platformView; } @synthesize renderSurface = _renderSurface; @@ -53,18 +53,18 @@ static inline pointer::PointerType EventTypeFromNSEventPhase( } - (void)setupPlatformView { - DCHECK(_platform_view == nullptr) + DCHECK(_platformView == nullptr) << "The platform view must not already be set."; - _platform_view.reset(new shell::PlatformViewMac(self.renderSurface)); - _platform_view->SetupResourceContextOnIOThread(); - _platform_view->NotifyCreated(); + _platformView.reset(new shell::PlatformViewMac(self.renderSurface)); + _platformView->SetupResourceContextOnIOThread(); + _platformView->NotifyCreated(); } // TODO(eseidel): This does not belong in sky_window! // Probably belongs in NSApplicationDelegate didFinishLaunching. - (void)setupAndLoadDart { - _platform_view->SetupAndLoadDart(); + _platformView->SetupAndLoadDart(); } - (void)windowDidResize:(NSNotification*)notification { @@ -80,7 +80,7 @@ static inline pointer::PointerType EventTypeFromNSEventPhase( metrics->physical_height = size.height; metrics->device_pixel_ratio = 1.0; - _platform_view->engineProxy()->OnViewportMetricsChanged(metrics.Pass()); + _platformView->engineProxy()->OnViewportMetricsChanged(metrics.Pass()); } - (void)setupSurfaceIfNecessary { @@ -101,35 +101,25 @@ static inline pointer::PointerType EventTypeFromNSEventPhase( [_renderSurface convertPoint:event.locationInWindow fromView:nil]; location.y = _renderSurface.frame.size.height - location.y; - auto pointer_data = pointer::Pointer::New(); - - pointer_data->time_stamp = - base::TimeDelta::FromSecondsD(event.timestamp).InMicroseconds(); - pointer_data->type = EventTypeFromNSEventPhase(phase); - pointer_data->kind = pointer::PointerKind::TOUCH; - pointer_data->pointer = 0; - pointer_data->x = location.x; - pointer_data->y = location.y; - pointer_data->buttons = 0; - pointer_data->down = false; - pointer_data->primary = false; - pointer_data->obscured = false; - pointer_data->pressure = 1.0; - pointer_data->pressure_min = 0.0; - pointer_data->pressure_max = 1.0; - pointer_data->distance = 0.0; - pointer_data->distance_min = 0.0; - pointer_data->distance_max = 0.0; - pointer_data->radius_major = 0.0; - pointer_data->radius_minor = 0.0; - pointer_data->radius_min = 0.0; - pointer_data->radius_max = 0.0; - pointer_data->orientation = 0.0; - pointer_data->tilt = 0.0; - - auto pointer_packet = pointer::PointerPacket::New(); - pointer_packet->pointers.push_back(pointer_data.Pass()); - _platform_view->engineProxy()->OnPointerPacket(pointer_packet.Pass()); + blink::PointerData pointer_data; + pointer_data.Clear(); + pointer_data.time_stamp = + ftl::TimeDelta::FromSeconds(event.timestamp).ToMicroseconds(); + pointer_data.change = PointerChangeFromNSEventPhase(phase); + pointer_data.kind = blink::PointerData::DeviceKind::kMouse; + pointer_data.physical_x = location.x; + pointer_data.physical_y = location.y; + pointer_data.pressure = 1.0; + pointer_data.pressure_max = 1.0; + + blink::Threads::UI()->PostTask( + [ engine = _platformView->engine().GetWeakPtr(), pointer_data ] { + if (engine.get()) { + blink::PointerDataPacket packet(1); + packet.SetPointerData(0, pointer_data); + engine->DispatchPointerDataPacket(packet); + } + }); } - (void)mouseDown:(NSEvent*)event { @@ -145,8 +135,8 @@ static inline pointer::PointerType EventTypeFromNSEventPhase( } - (void)dealloc { - if (_platform_view) { - _platform_view->NotifyDestroyed(); + if (_platformView) { + _platformView->NotifyDestroyed(); } [super dealloc]; diff --git a/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm b/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm index 2dd00a5f431b0f7cf0ebb0ac066c1408d5828bde..68d51dc840ecb76ab297aa9b2d492bda768ed63b 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm @@ -4,11 +4,15 @@ #import "flutter/shell/platform/darwin/ios/framework/Headers/FlutterViewController.h" +#include + #include "base/mac/scoped_block.h" #include "base/mac/scoped_nsobject.h" #include "base/strings/sys_string_conversions.h" +#include "lib/ftl/time/time_delta.h" +#include "lib/ftl/functional/wrap_lambda.h" +#include "flutter/common/threads.h" #include "flutter/services/platform/ios/system_chrome_impl.h" -#include "flutter/sky/engine/wtf/MakeUnique.h" #include "flutter/shell/platform/darwin/ios/framework/Source/flutter_touch_mapper.h" #include "flutter/shell/platform/darwin/ios/framework/Source/FlutterDartProject_Internal.h" #include "flutter/shell/platform/darwin/ios/platform_view_ios.h" @@ -73,7 +77,7 @@ void FlutterInit(int argc, const char* argv[]) { _orientationPreferences = UIInterfaceOrientationMaskAll; _statusBarStyle = UIStatusBarStyleDefault; _viewportMetrics = sky::ViewportMetrics::New(); - _platformView = WTF::MakeUnique( + _platformView = std::make_unique( reinterpret_cast(self.view.layer)); _platformView->SetupResourceContextOnIOThread(); @@ -194,36 +198,37 @@ enum MapperPhase { Removed, }; -using PointerTypeMapperPhase = std::pair; -static inline PointerTypeMapperPhase PointerTypePhaseFromUITouchPhase( +using PointerChangeMapperPhase = std::pair; +static inline PointerChangeMapperPhase PointerChangePhaseFromUITouchPhase( UITouchPhase phase) { switch (phase) { case UITouchPhaseBegan: - return PointerTypeMapperPhase(pointer::PointerType::DOWN, - MapperPhase::Added); + return PointerChangeMapperPhase(blink::PointerData::Change::kDown, + MapperPhase::Added); case UITouchPhaseMoved: case UITouchPhaseStationary: // There is no EVENT_TYPE_POINTER_STATIONARY. So we just pass a move type // with the same coordinates - return PointerTypeMapperPhase(pointer::PointerType::MOVE, - MapperPhase::Accessed); + return PointerChangeMapperPhase(blink::PointerData::Change::kMove, + MapperPhase::Accessed); case UITouchPhaseEnded: - return PointerTypeMapperPhase(pointer::PointerType::UP, - MapperPhase::Removed); + return PointerChangeMapperPhase(blink::PointerData::Change::kUp, + MapperPhase::Removed); case UITouchPhaseCancelled: - return PointerTypeMapperPhase(pointer::PointerType::CANCEL, - MapperPhase::Removed); + return PointerChangeMapperPhase(blink::PointerData::Change::kCancel, + MapperPhase::Removed); } - return PointerTypeMapperPhase(pointer::PointerType::CANCEL, - MapperPhase::Accessed); + return PointerChangeMapperPhase(blink::PointerData::Change::kCancel, + MapperPhase::Accessed); } - (void)dispatchTouches:(NSSet*)touches phase:(UITouchPhase)phase { - auto eventTypePhase = PointerTypePhaseFromUITouchPhase(phase); + auto eventTypePhase = PointerChangePhaseFromUITouchPhase(phase); const CGFloat scale = [UIScreen mainScreen].scale; - auto pointer_packet = pointer::PointerPacket::New(); + auto packet = std::make_unique(touches.count); + int i = 0; for (UITouch* touch in touches) { int touch_identifier = 0; @@ -243,37 +248,30 @@ static inline PointerTypeMapperPhase PointerTypePhaseFromUITouchPhase( CGPoint windowCoordinates = [touch locationInView:nil]; auto pointer_time = - base::TimeDelta::FromSecondsD(touch.timestamp).InMicroseconds(); - - auto pointer_data = pointer::Pointer::New(); - - pointer_data->time_stamp = pointer_time; - pointer_data->type = eventTypePhase.first; - pointer_data->kind = pointer::PointerKind::TOUCH; - pointer_data->pointer = touch_identifier; - pointer_data->x = windowCoordinates.x * scale; - pointer_data->y = windowCoordinates.y * scale; - pointer_data->buttons = 0; - pointer_data->down = false; - pointer_data->primary = false; - pointer_data->obscured = false; - pointer_data->pressure = 1.0; - pointer_data->pressure_min = 0.0; - pointer_data->pressure_max = 1.0; - pointer_data->distance = 0.0; - pointer_data->distance_min = 0.0; - pointer_data->distance_max = 0.0; - pointer_data->radius_major = 0.0; - pointer_data->radius_minor = 0.0; - pointer_data->radius_min = 0.0; - pointer_data->radius_max = 0.0; - pointer_data->orientation = 0.0; - pointer_data->tilt = 0.0; - - pointer_packet->pointers.push_back(pointer_data.Pass()); + ftl::TimeDelta::FromSeconds(touch.timestamp).ToMicroseconds(); + + blink::PointerData pointer_data; + pointer_data.Clear(); + + pointer_data.time_stamp = pointer_time; + pointer_data.change = eventTypePhase.first; + pointer_data.kind = blink::PointerData::DeviceKind::kTouch; + pointer_data.pointer = touch_identifier; + pointer_data.physical_x = windowCoordinates.x * scale; + pointer_data.physical_y = windowCoordinates.y * scale; + pointer_data.pressure = 1.0; + pointer_data.pressure_max = 1.0; + + packet->SetPointerData(i++, pointer_data); } - _platformView->engineProxy()->OnPointerPacket(pointer_packet.Pass()); + blink::Threads::UI()->PostTask(ftl::WrapLambda([ + engine = _platformView->engine().GetWeakPtr(), + packet = std::move(packet) + ] { + if (engine.get()) + engine->DispatchPointerDataPacket(*packet); + })); } - (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event { diff --git a/shell/platform/linux/BUILD.gn b/shell/platform/linux/BUILD.gn index cd78ab8d6363067bfefdda73b7a75d645825a00b..676c7e664f56321aa8370cbeabb27a353fc0ea05 100644 --- a/shell/platform/linux/BUILD.gn +++ b/shell/platform/linux/BUILD.gn @@ -17,6 +17,7 @@ executable("linux") { deps = [ "//base", + "//flutter/common", "//flutter/services/engine:interfaces", "//flutter/services/raw_keyboard:interfaces", "//flutter/shell/common", diff --git a/shell/platform/linux/platform_view_glfw.cc b/shell/platform/linux/platform_view_glfw.cc index eac3116dc33416fba95d1f24f5dbdf846e6ff192..980a954bd69ea2a3f7a46aae5c4de26fb66b3a92 100644 --- a/shell/platform/linux/platform_view_glfw.cc +++ b/shell/platform/linux/platform_view_glfw.cc @@ -3,6 +3,8 @@ // found in the LICENSE file. #include "flutter/shell/platform/linux/platform_view_glfw.h" + +#include "flutter/common/threads.h" #include "flutter/shell/platform/linux/glfw_service_provider.h" #include @@ -110,16 +112,16 @@ void PlatformViewGLFW::OnWindowSizeChanged(int width, int height) { } void PlatformViewGLFW::OnMouseButtonChanged(int button, int action, int mods) { - pointer::PointerType type; + blink::PointerData::Change change = blink::PointerData::Change::kCancel; if (action == GLFW_PRESS) { if (!buttons_) { - type = pointer::PointerType::DOWN; + change = blink::PointerData::Change::kDown; glfwSetCursorPosCallback( glfw_window_, [](GLFWwindow* window, double x, double y) { ToPlatformView(window)->OnCursorPosChanged(x, y); }); } else { - type = pointer::PointerType::MOVE; + change = blink::PointerData::Change::kMove; } // GLFW's button order matches what we want: // https://github.com/flutter/engine/blob/master/sky/specs/pointer.md @@ -128,52 +130,65 @@ void PlatformViewGLFW::OnMouseButtonChanged(int button, int action, int mods) { } else if (action == GLFW_RELEASE) { buttons_ &= ~(1 << button); if (!buttons_) { - type = pointer::PointerType::UP; + change = blink::PointerData::Change::kUp; glfwSetCursorPosCallback(glfw_window_, nullptr); } else { - type = pointer::PointerType::MOVE; + change = blink::PointerData::Change::kMove; } } else { DLOG(INFO) << "Unknown mouse action: " << action; return; } - double x = 0.f, y = 0.f; + double x = 0.0; + double y = 0.0; glfwGetCursorPos(glfw_window_, &x, &y); base::TimeDelta time_stamp = base::TimeTicks::Now() - base::TimeTicks(); - auto pointer_data = pointer::Pointer::New(); - pointer_data->time_stamp = time_stamp.InMicroseconds(); - pointer_data->type = type; - pointer_data->kind = pointer::PointerKind::MOUSE; - pointer_data->x = x; - pointer_data->y = y; - pointer_data->buttons = buttons_; - pointer_data->pressure = 1.0; - pointer_data->pressure_max = 1.0; - - auto pointer_packet = pointer::PointerPacket::New(); - pointer_packet->pointers.push_back(pointer_data.Pass()); - engine_->OnPointerPacket(pointer_packet.Pass()); + blink::PointerData pointer_data; + pointer_data.Clear(); + pointer_data.time_stamp = time_stamp.InMicroseconds(); + pointer_data.change = change; + pointer_data.kind = blink::PointerData::DeviceKind::kMouse; + pointer_data.physical_x = x; + pointer_data.physical_y = y; + pointer_data.buttons = buttons_; + pointer_data.pressure = 1.0; + pointer_data.pressure_max = 1.0; + + blink::Threads::UI()->PostTask( + [ engine = engine().GetWeakPtr(), pointer_data ] { + if (engine.get()) { + blink::PointerDataPacket packet(1); + packet.SetPointerData(0, pointer_data); + engine->DispatchPointerDataPacket(packet); + } + }); } void PlatformViewGLFW::OnCursorPosChanged(double x, double y) { base::TimeDelta time_stamp = base::TimeTicks::Now() - base::TimeTicks(); - auto pointer_data = pointer::Pointer::New(); - pointer_data->time_stamp = time_stamp.InMicroseconds(); - pointer_data->type = pointer::PointerType::MOVE; - pointer_data->kind = pointer::PointerKind::MOUSE; - pointer_data->x = x; - pointer_data->y = y; - pointer_data->buttons = buttons_; - pointer_data->pressure = 1.0; - pointer_data->pressure_max = 1.0; - - auto pointer_packet = pointer::PointerPacket::New(); - pointer_packet->pointers.push_back(pointer_data.Pass()); - engine_->OnPointerPacket(pointer_packet.Pass()); + blink::PointerData pointer_data; + pointer_data.Clear(); + pointer_data.time_stamp = time_stamp.InMicroseconds(); + pointer_data.change = blink::PointerData::Change::kMove; + pointer_data.kind = blink::PointerData::DeviceKind::kMouse; + pointer_data.physical_x = x; + pointer_data.physical_y = y; + pointer_data.buttons = buttons_; + pointer_data.pressure = 1.0; + pointer_data.pressure_max = 1.0; + + blink::Threads::UI()->PostTask( + [ engine = engine().GetWeakPtr(), pointer_data ] { + if (engine.get()) { + blink::PointerDataPacket packet(1); + packet.SetPointerData(0, pointer_data); + engine->DispatchPointerDataPacket(packet); + } + }); } void PlatformViewGLFW::OnKeyEvent(int key, int scancode, int action, int mods) { diff --git a/sky/engine/core/BUILD.gn b/sky/engine/core/BUILD.gn index 299854581606144263921cd77f9dd83c37d57fe0..e2c003b9ee641e170927e0df1b30f4e5ae315e2d 100644 --- a/sky/engine/core/BUILD.gn +++ b/sky/engine/core/BUILD.gn @@ -17,7 +17,6 @@ static_library("core") { "//flutter/assets", "//flutter/sky/engine/platform", "//flutter/services/engine:interfaces", - "//flutter/services/pointer:interfaces", ] if (flutter_runtime_mode != "release" && !is_fuchsia) { diff --git a/sky/packages/flutter_services/lib/pointer.dart b/sky/packages/flutter_services/lib/pointer.dart deleted file mode 100644 index 4ac93f1a60cc0b81e325b5dc35f05094ea969214..0000000000000000000000000000000000000000 --- a/sky/packages/flutter_services/lib/pointer.dart +++ /dev/null @@ -1,6 +0,0 @@ -/// Copyright 2016 The Chromium Authors. All rights reserved. -/// Use of this source code is governed by a BSD-style license that can be -/// found in the LICENSE file. - -import 'package:sky_services/pointer/pointer.mojom.dart'; -export 'package:sky_services/pointer/pointer.mojom.dart'; diff --git a/sky/packages/sky_services/BUILD.gn b/sky/packages/sky_services/BUILD.gn index 955075f5858b90c4d5aa801b4629256cbe535eae..ea43227d94ca96133c1b05ba173c5fcb74693ad9 100644 --- a/sky/packages/sky_services/BUILD.gn +++ b/sky/packages/sky_services/BUILD.gn @@ -27,7 +27,6 @@ dart_pkg("sky_services") { "//flutter/services/editing:interfaces", "//flutter/services/media:interfaces", "//flutter/services/platform:interfaces", - "//flutter/services/pointer:interfaces", "//flutter/services/raw_keyboard:interfaces", "//flutter/services/semantics:interfaces", ]