#ifndef CC_INPUT_COMPOSITOR_INPUT_INTERFACES_H_
#define CC_INPUT_COMPOSITOR_INPUT_INTERFACES_H_
#include <memory>
#include "base/time/time.h"
#include "base/types/optional_ref.h"
#include "cc/input/actively_scrolling_type.h"
#include "cc/input/browser_controls_offset_tag_modifications.h"
#include "cc/input/browser_controls_state.h"
#include "cc/metrics/events_metrics_manager.h"
#include "cc/metrics/frame_sequence_metrics.h"
#include "cc/paint/element_id.h"
#include "cc/trees/latency_info_swap_promise_monitor.h"
#include "cc/trees/scroll_node.h"
#include "ui/gfx/geometry/point_f.h"
#include "ui/gfx/geometry/size.h"
#include "arkweb/build/features/features.h"
#include "ui/latency/latency_info.h"
namespace viz {
struct BeginFrameArgs;
}
namespace gfx {
class Vector2dF;
}
namespace cc {
struct CompositorCommitData;
class LayerTreeHostImpl;
class LayerTreeSettings;
class MutatorHost;
class ScrollTree;
enum class ScrollbarOrientation;
class InputDelegateForCompositor {
public:
virtual ~InputDelegateForCompositor() = default;
virtual void ProcessCommitDeltas(
CompositorCommitData* commit_data,
const MutatorHost* main_thread_mutator_host) = 0;
virtual void TickAnimations(base::TimeTicks monotonic_time) = 0;
virtual void WillShutdown() = 0;
virtual void WillDraw() = 0;
virtual void WillBeginImplFrame(const viz::BeginFrameArgs& args) = 0;
virtual void DidCommit() = 0;
virtual void DidActivatePendingTree() = 0;
virtual void DidFinishImplFrame() = 0;
virtual void OnBeginImplFrameDeadline() = 0;
virtual void RootLayerStateMayHaveChanged() = 0;
virtual void DidRegisterScrollbar(ElementId scroll_element_id,
ScrollbarOrientation orientation) = 0;
virtual void DidUnregisterScrollbar(ElementId scroll_element_id,
ScrollbarOrientation orientation) = 0;
virtual void ScrollOffsetAnimationFinished(ElementId element_id) = 0;
virtual void ElasticOverscrollAnimationFinished(ElementId element_id) = 0;
virtual void SetPrefersReducedMotion(bool prefers_reduced_motion) = 0;
virtual bool IsCurrentlyScrolling() const = 0;
virtual ActivelyScrollingType GetActivelyScrollingType() const = 0;
virtual bool IsHandlingTouchSequence() const = 0;
virtual bool IsCurrentScrollMainRepainted() const = 0;
#if BUILDFLAG(ARKWEB_INPUT_EVENTS)
virtual void HandleScrollUpdateForInternalBeginFrame(
const viz::BeginFrameArgs& args) {}
#endif
virtual bool HasQueuedInput() const = 0;
};
class CompositorDelegateForInput {
public:
virtual ~CompositorDelegateForInput() = default;
virtual void BindToInputHandler(
std::unique_ptr<InputDelegateForCompositor> delegate) = 0;
virtual ScrollTree& GetScrollTree() const = 0;
virtual void ScrollAnimationAbort(ElementId element_id) const = 0;
virtual float GetBrowserControlsTopOffset() const = 0;
virtual void ScrollBegin() const = 0;
virtual void ScrollEnd() const = 0;
virtual void StartScrollSequence(
FrameSequenceTrackerType type,
FrameInfo::SmoothEffectDrivingThread scrolling_thread) = 0;
virtual void StopSequence(FrameSequenceTrackerType type) = 0;
virtual void ScrollbarAnimationMouseLeave(ElementId element_id) const = 0;
virtual void ScrollbarAnimationMouseMove(
ElementId element_id,
gfx::PointF device_viewport_point) const = 0;
virtual bool ScrollbarAnimationMouseDown(ElementId element_id) const = 0;
virtual bool ScrollbarAnimationMouseUp(ElementId element_id) const = 0;
virtual void PinchBegin() const = 0;
virtual void PinchEnd() const = 0;
virtual void SetNeedsAnimateInput() = 0;
virtual bool ScrollAnimationCreate(const ScrollNode& scroll_node,
const gfx::Vector2dF& scroll_amount,
base::TimeDelta delayed_by) = 0;
virtual void TickScrollAnimations() const = 0;
virtual std::unique_ptr<LatencyInfoSwapPromiseMonitor>
CreateLatencyInfoSwapPromiseMonitor(ui::LatencyInfo* latency) = 0;
virtual std::unique_ptr<EventsMetricsManager::ScopedMonitor>
GetScopedEventMetricsMonitor(
EventsMetricsManager::ScopedMonitor::DoneCallback done_callback) = 0;
virtual void DidScrollForMetrics() = 0;
virtual double PredictViewportBoundsDelta(
double current_bounds_delta,
gfx::Vector2dF scroll_distance) const = 0;
virtual void NotifyInputEvent(bool is_fling) = 0;
virtual bool ElementHasImplOnlyScrollAnimation(
ElementId element_id) const = 0;
virtual std::optional<gfx::PointF> UpdateImplAnimationScrollTargetWithDelta(
gfx::Vector2dF adjusted_delta,
int scroll_node_id,
base::TimeDelta delayed_by,
ElementId element_id) const = 0;
virtual bool HasAnimatedScrollbars() const = 0;
virtual void SetNeedsCommit() = 0;
virtual void SetNeedsFullViewportRedraw() = 0;
virtual void SetDeferBeginMainFrame(bool defer_begin_main_frame) const = 0;
virtual void DidUpdateScrollAnimationCurve() = 0;
virtual void DidStartPinchZoom() = 0;
virtual void DidUpdatePinchZoom() = 0;
virtual void DidEndPinchZoom() = 0;
virtual void DidStartScroll() = 0;
virtual void DidEndScroll() = 0;
virtual void DidMouseEnterNonViewportScroller(ElementId element_id) = 0;
virtual void DidMouseLeave() = 0;
virtual bool IsInHighLatencyMode() const = 0;
virtual void WillScrollContent(ElementId element_id) = 0;
virtual void DidScrollContent(ElementId element_id,
bool animated,
const gfx::Vector2dF& scroll_delta) = 0;
virtual float DeviceScaleFactor() const = 0;
virtual float PageScaleFactor() const = 0;
virtual gfx::Size VisualDeviceViewportSize() const = 0;
virtual const LayerTreeSettings& GetSettings() const = 0;
virtual void UpdateBrowserControlsState(
BrowserControlsState constraints,
BrowserControlsState current,
bool animate,
base::optional_ref<const BrowserControlsOffsetTagModifications>
offset_tag_modifications) = 0;
virtual bool HasScrollLinkedAnimation(ElementId for_scroller) const = 0;
virtual LayerTreeHostImpl& GetImplDeprecated() = 0;
virtual const LayerTreeHostImpl& GetImplDeprecated() const = 0;
#if BUILDFLAG(ARKWEB_VSYNC_SCHEDULE)
virtual void ScheduledActionDraw() {}
#endif
};
}
#endif