// Copyright 2017 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. #ifndef FLUTTER_CONTENT_HANDLER_DIRECT_INPUT_H_ #define FLUTTER_CONTENT_HANDLER_DIRECT_INPUT_H_ #include #include #include #include "flutter/lib/ui/window/pointer_data_packet.h" #include "flutter/lib/ui/window/viewport_metrics.h" #include "lib/fidl/c/waiter/async_waiter.h" #include "lib/ftl/files/unique_fd.h" #include "lib/ftl/macros.h" namespace flutter_runner { class DirectInput { public: using DirectInputCallback = std::function; explicit DirectInput(DirectInputCallback callback); ~DirectInput(); bool IsValid() const; void WaitForReadAvailability(); void CancelWaitForReadAvailability(); void SetViewportMetrics(blink::ViewportMetrics metrics); private: DirectInputCallback callback_; bool valid_; ftl::UniqueFD touch_fd_; ftl::UniqueFD input_event_; std::vector read_buffer_; FidlAsyncWaitID last_wait_; std::set touch_ids_; blink::ViewportMetrics viewport_metrics_; static ftl::UniqueFD GetTouchFileDescriptor(); void OnReadAvailable(); void PerformRead(); FTL_DISALLOW_COPY_AND_ASSIGN(DirectInput); }; } // namespace flutter_runner #endif // FLUTTER_CONTENT_HANDLER_DIRECT_INPUT_H_