diff options
Diffstat (limited to '')
-rw-r--r-- | layout/base/ScrollTypes.h | 73 |
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 |