#ifndef CC_TREES_COMPOSITOR_COMMIT_DATA_H_
#define CC_TREES_COMPOSITOR_COMMIT_DATA_H_
#include <memory>
#include <optional>
#include <vector>
#include "cc/cc_export.h"
#include "cc/input/browser_controls_state.h"
#include "cc/input/scroll_snap_data.h"
#include "cc/input/snap_selection_strategy.h"
#include "cc/paint/element_id.h"
#include "cc/trees/layer_tree_host_client.h"
#include "cc/trees/scroll_source_type.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,
std::optional<TargetSnapAreaElementIds> snap_target_ids);
ScrollUpdateInfo(const ScrollUpdateInfo& other);
ScrollUpdateInfo& operator=(const ScrollUpdateInfo&);
ElementId element_id;
gfx::Vector2dF scroll_delta;
std::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 {
ScrollEndInfo();
~ScrollEndInfo();
base::flat_set<ElementId> done_containers;
};
ScrollEndInfo scroll_end_data;
bool ongoing_scroll_animation = false;
bool is_auto_scrolling = false;
ManipulationInfo manipulation_info = kManipulationInfoNone;
std::unique_ptr<SnapSelectionStrategy> snap_strategy;
ScrollSourceType scroll_type = ScrollSourceType::kNone;
};
}
#endif