summaryrefslogtreecommitdiffstats
path: root/layout/base/ScrollTypes.h
diff options
context:
space:
mode:
Diffstat (limited to 'layout/base/ScrollTypes.h')
-rw-r--r--layout/base/ScrollTypes.h73
1 files changed, 73 insertions, 0 deletions
diff --git a/layout/base/ScrollTypes.h b/layout/base/ScrollTypes.h
new file mode 100644
index 0000000000..512c2579bc
--- /dev/null
+++ b/layout/base/ScrollTypes.h
@@ -0,0 +1,73 @@
+/* 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/TypedEnumBits.h"
+
+// Types used in main-thread scrolling interfaces such as nsIScrollableFrame.
+
+namespace mozilla {
+
+/**
+ * Scroll modes for main-thread scroll operations. These are mostly used
+ * by nsIScrollableFrame 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.
+ */
+enum class ScrollMode { 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