зеркало из https://github.com/mozilla/gecko-dev.git
74 строки
2.7 KiB
C++
74 строки
2.7 KiB
C++
/* 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
|