5#include "qml_material/token/duration.hpp"
11namespace CarouselLayoutId
13constexpr int Uncontained = 0;
14constexpr int MultiBrowse = 1;
15constexpr int Hero = 2;
16constexpr int HeroCenter = 3;
17constexpr int FullScreen = 4;
18constexpr int UncontainedMultiAspect = 5;
22struct CarouselEngineDefaults {
23 static constexpr qreal min_peek_px = 16;
24 static constexpr qreal parallax_ratio = 0.35;
25 static constexpr qreal parallax_ratio_uncontained = 0.5;
26 static constexpr int snap_duration = int(token::Duration {}.medium4);
27 static constexpr qreal min_item_aspect = 9.0 / 16.0;
28 static constexpr qreal max_item_aspect = 16.0 / 9.0;
31struct CarouselItemGeometry {
37 qreal parallax_shift = 0;
41struct CarouselLayoutInput {
43 Qt::Orientation orientation = Qt::Horizontal;
44 qreal viewport_size = 0;
46 qreal scroll_offset = 0;
47 qreal item_extent = 180;
49 qreal small_item_min = 40;
50 qreal small_item_max = 56;
51 qreal content_padding_start = 0;
52 qreal content_padding_end = 0;
53 qreal content_padding_cross = 0;
54 qreal min_peek_px = 16;
55 qreal item_corner_radius = 28;
56 qreal parallax_ratio = 0.35;
57 qreal min_item_aspect = 9.0 / 16.0;
58 qreal max_item_aspect = 16.0 / 9.0;
60 bool reduce_motion =
false;
61 QVector<qreal> item_aspects;
64struct CarouselLayoutOutput {
65 QVector<CarouselItemGeometry> items;
67 QVector<qreal> snap_offsets;
68 qreal content_size = 0;
69 qreal max_scroll_offset = 0;
70 qreal end_snap_offset = 0;
71 qreal scroll_step = 0;
72 int leading_index = 0;
75class CarouselStrategy {
77 static auto compute(
const CarouselLayoutInput& input) -> CarouselLayoutOutput;