File: ScrollTypes.h

package info (click to toggle)
firefox 141.0.2-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,550,616 kB
  • sloc: cpp: 7,426,508; javascript: 6,367,238; ansic: 3,707,354; python: 1,368,984; xml: 623,983; asm: 426,916; java: 184,324; sh: 64,488; makefile: 19,203; objc: 13,059; perl: 12,955; yacc: 4,583; cs: 3,846; pascal: 3,352; lex: 1,720; ruby: 1,071; exp: 762; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10
file content (76 lines) | stat: -rw-r--r-- 2,884 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef mozilla_ScrollTypes_h
#define mozilla_ScrollTypes_h

#include "mozilla/DefineEnum.h"
#include "mozilla/TypedEnumBits.h"

// Types used in main-thread scrolling interfaces such as ScrollContainerFrame.

namespace mozilla {

/**
 * Scroll modes for main-thread scroll operations. These are mostly used
 * by ScrollContainerFrame methods.
 *
 * When a scroll operation is requested, we ask for instant, smooth,
 * smooth msd, or normal scrolling.
 *
 * |Smooth| scrolls have a symmetrical acceleration and deceleration curve
 * modeled with a set of splines that guarantee that the destination will be
 * reached over a fixed time interval.  |Smooth| will only be smooth if smooth
 * scrolling is actually enabled.  This behavior is utilized by keyboard and
 * mouse wheel scrolling events.
 *
 * |SmoothMsd| implements a physically based model that approximates the
 * behavior of a mass-spring-damper system.  |SmoothMsd| scrolls have a
 * non-symmetrical acceleration and deceleration curve, can potentially
 * overshoot the destination on intermediate frames, and complete over a
 * variable time interval.  |SmoothMsd| will only be smooth if cssom-view
 * smooth-scrolling is enabled.
 *
 * |Instant| is always synchronous, |Normal| can be asynchronous.
 *
 * If an |Instant| scroll request happens while a |Smooth| or async scroll is
 * already in progress, the async scroll is interrupted and we instantly
 * scroll to the destination.
 *
 * If an |Instant| or |Smooth| scroll request happens while a |SmoothMsd|
 * scroll is already in progress, the |SmoothMsd| scroll is interrupted without
 * first scrolling to the destination.
 */
MOZ_DEFINE_ENUM_CLASS_WITH_BASE_AND_TOSTRING(ScrollMode, uint8_t,
                                             (Instant, Smooth, SmoothMsd,
                                              Normal));

/**
 * When scrolling by a relative amount, we can choose various units.
 */
enum class ScrollUnit { DEVICE_PIXELS, LINES, PAGES, WHOLE };

/**
 * Representing whether there's an on-going animation in APZC and it was
 * triggered by script or by user input.
 */
enum class APZScrollAnimationType {
  No,                   // No animation.
  TriggeredByScript,    // Animation triggered by script.
  TriggeredByUserInput  // Animation triggered by user input.
};

enum class ScrollSnapFlags : uint8_t {
  Disabled = 0,
  // https://drafts.csswg.org/css-scroll-snap/#intended-end-position
  IntendedEndPosition = 1 << 0,
  // https://drafts.csswg.org/css-scroll-snap/#intended-direction
  IntendedDirection = 1 << 1
};

MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(ScrollSnapFlags);

}  // namespace mozilla

#endif  // mozilla_ScrollTypes_h