// Copyright 2017 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CC_INPUT_SCROLL_SNAP_DATA_H_ #define CC_INPUT_SCROLL_SNAP_DATA_H_ #include <optional> #include <set> #include <utility> #include <vector> #include "base/gtest_prod_util.h" #include "cc/cc_export.h" #include "cc/paint/element_id.h" #include "ui/gfx/geometry/rect_f.h" #include "ui/gfx/geometry/vector2d_f.h" #include "ui/gfx/range/range_f.h" namespace cc { class SnapSelectionStrategy; // See https://www.w3.org/TR/css-scroll-snap-1/#snap-axis enum class SnapAxis : unsigned { … }; // A helper enum to specify the the axis when doing calculations. enum class SearchAxis : unsigned { … }; // See https://www.w3.org/TR/css-scroll-snap-1/#snap-strictness enum class SnapStrictness : unsigned { … }; // See https://www.w3.org/TR/css-scroll-snap-1/#scroll-snap-align enum class SnapAlignment : unsigned { … }; struct ScrollSnapType { … }; struct ScrollSnapAlign { … }; // This struct represents a snap area that is considered to be a viable // alternative to the snap area that was selected for the associated // SnapSearchResult. // The snap area is a viable alternative because it: // - is a snap target in both axes, and // - is aligned with its associated SnapSearchResult's snap area in the // main axis of that SnapSearchResult. // This alternative may be considered to be a better choice if it is also // aligned with the SnapSearchResult of the cross axis. struct SnapSearchResultAlternative { … }; // This class includes snap offset and visible range needed to perform a snap // operation on one axis for a specific area. The data can be used to determine // whether this snap area provides a valid snap position for the current scroll. class SnapSearchResult { … }; // Snap area is a bounding box that could be snapped to when a scroll happens in // its scroll container. // This data structure describes the data needed for SnapCoordinator if we want // to snap to this snap area. struct SnapAreaData { … }; struct TargetSnapAreaElementIds { … }; SnapAreaList; // Represents the result of a call to SnapContainerData::FindSnapPosition. struct SnapPositionData { … }; // Snap container is a scroll container that at least one snap area assigned to // it. If the snap-type is not 'none', then it can be snapped to one of its // snap areas when a scroll happens. // This data structure describes the data needed for SnapCoordinator to perform // snapping in the snap container. // // Note that the snap area data should only be used when snap-type is not 'none' // There is not guarantee that this information is up-to-date otherwise. In // fact, we skip updating these info as an optiomization. class CC_EXPORT SnapContainerData { … }; CC_EXPORT std::ostream& operator<<(std::ostream&, const SnapAreaData&); CC_EXPORT std::ostream& operator<<(std::ostream&, const SnapContainerData&); } // namespace cc #endif // CC_INPUT_SCROLL_SNAP_DATA_H_