blob: 4fb3c73e7e7aa04d16ab2b2d82fd63b63144126a [file] [log] [blame]
// Copyright 2020 The Fuchsia 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 'dart:async';
import 'package:fidl/fidl.dart';
import 'package:fidl_fuchsia_ui_input/fidl_async.dart';
import 'package:fidl_fuchsia_ui_policy/fidl_async.dart';
import 'package:fuchsia_services/services.dart';
/// Connects to [PointerCaptureListenerHack] service and makes the events
/// available as a [stream].
class PointerEventsStream implements PointerCaptureListenerHack {
final Presentation presentation;
final _binding = PointerCaptureListenerHackBinding();
final _controller = StreamController<PointerEvent>();
PointerEventsStream(this.presentation) {
presentation.capturePointerEventsHack(_binding.wrap(this));
}
factory PointerEventsStream.fromStartupContext(StartupContext context) {
final presentation = PresentationProxy();
context.incoming.connectToService(presentation);
final pointerEventsStream = PointerEventsStream(presentation);
presentation.ctrl.close();
return pointerEventsStream;
}
Stream<PointerEvent> get stream => _controller.stream;
void dispose() {
_controller.close();
_binding.close();
}
@override
ServiceData get $serviceData => PointerCaptureListenerHackData();
@override
Future<void> onPointerEvent(PointerEvent event) async =>
_controller.add(event);
}