#ifndef CC_TREES_COMPOSITOR_COMMIT_DATA_H_
#define CC_TREES_COMPOSITOR_COMMIT_DATA_H_
#include <memory>
#include <vector>
#include "cc/cc_export.h"
#include "cc/input/browser_controls_state.h"
#include "cc/input/scroll_snap_data.h"
#include "cc/paint/element_id.h"
#include "cc/trees/layer_tree_host_client.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "ui/gfx/geometry/transform.h"
#include "ui/gfx/geometry/vector2d.h"
namespace cc {
class SwapPromise;
struct CC_EXPORT CompositorCommitData {
CompositorCommitData();
CompositorCommitData(const CompositorCommitData&) = delete;
~CompositorCommitData();
CompositorCommitData& operator=(const CompositorCommitData&) = delete;
struct CC_EXPORT ScrollUpdateInfo {
ScrollUpdateInfo();
ScrollUpdateInfo(ElementId id,
gfx::Vector2dF delta,
absl::optional<TargetSnapAreaElementIds> snap_target_ids);
ScrollUpdateInfo(const ScrollUpdateInfo& other);
ScrollUpdateInfo& operator=(const ScrollUpdateInfo&);
ElementId element_id;
gfx::Vector2dF scroll_delta;
absl::optional<TargetSnapAreaElementIds> snap_target_element_ids;
bool operator==(const ScrollUpdateInfo& other) const {
return element_id == other.element_id &&
scroll_delta == other.scroll_delta &&
snap_target_element_ids == other.snap_target_element_ids;
}
};
ScrollUpdateInfo inner_viewport_scroll;
std::vector<ScrollUpdateInfo> scrolls;
float page_scale_delta = 1.f;
bool is_pinch_gesture_active = false;
bool is_scroll_active = false;
gfx::Vector2dF elastic_overscroll_delta;
gfx::Vector2dF overscroll_delta;
ElementId scroll_latched_element_id;
float top_controls_delta = 0.f;
float bottom_controls_delta = 0.f;
struct CC_EXPORT ScrollbarsUpdateInfo {
ElementId element_id;
bool hidden = true;
bool operator==(const ScrollbarsUpdateInfo& other) const {
return element_id == other.element_id && hidden == other.hidden;
}
};
std::vector<ScrollbarsUpdateInfo> scrollbars;
std::vector<std::unique_ptr<SwapPromise>> swap_promises;
BrowserControlsState browser_controls_constraint =
BrowserControlsState::kBoth;
bool browser_controls_constraint_changed = false;
struct ScrollEndInfo {
bool scroll_gesture_did_end = false;
bool gesture_affects_outer_viewport_scroll = false;
};
ScrollEndInfo scroll_end_data;
bool ongoing_scroll_animation = false;
ManipulationInfo manipulation_info = kManipulationInfoNone;
};
}
#endif