blob: 10ac4ae7cf5d0f6011671e7a7e96d387aba3cb24 [file] [log] [blame]
// Copyright 2021 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.
#ifndef SRC_UI_INPUT_LIB_INJECTOR_INJECTOR_CONFIG_SETUP_H_
#define SRC_UI_INPUT_LIB_INJECTOR_INJECTOR_CONFIG_SETUP_H_
#include <fuchsia/ui/pointerinjector/configuration/cpp/fidl.h>
#include <fuchsia/ui/views/cpp/fidl.h>
#include <lib/fidl/cpp/binding.h>
#include <lib/sys/cpp/component_context.h>
namespace input {
// Allows an input pipeline to access pointer injection configuration details.
class InjectorConfigSetup : public fuchsia::ui::pointerinjector::configuration::Setup {
public:
explicit InjectorConfigSetup(sys::ComponentContext* component_context,
fuchsia::ui::views::ViewRef context,
fuchsia::ui::views::ViewRef target);
// |fuchsia.ui.pointerinjector.configuration.Setup|
void GetViewRefs(GetViewRefsCallback callback) override;
// |fuchsia.ui.pointerinjector.configuration.Setup|
void WatchViewport(WatchViewportCallback callback) override;
// If |watch_viewport_callback_| exists, calls it with the given viewport.
// Otherwise, sets |viewport_|.
void UpdateViewport(fuchsia::ui::pointerinjector::Viewport viewport);
private:
fidl::Binding<fuchsia::ui::pointerinjector::configuration::Setup> binding_;
fuchsia::ui::views::ViewRef context_;
fuchsia::ui::views::ViewRef target_;
// Only store the viewport if it has been updated.
std::optional<fuchsia::ui::pointerinjector::Viewport> viewport_;
fit::function<void(fuchsia::ui::pointerinjector::Viewport)> watch_viewport_callback_;
};
} // namespace input
#endif // SRC_UI_INPUT_LIB_INJECTOR_INJECTOR_CONFIG_SETUP_H_