forked from mirrors/gecko-dev
		
	 a457a5cfbb
			
		
	
	
		a457a5cfbb
		
	
	
	
	
		
			
			The scroll snap spec defines the concepts [1]. There are three type of scroll operations. 1) intended end position, 2) intended direction and end position and 3) intended direction. Basically our existing ScrollUnits types correspond; 1) DEVICE_PIXELS, WHOLE => intended end position 2) PAGES => intended direction and end position 3) LINES => intended direction There are two exceptions in the `intended direction and end position` case, scrollBy() and fling gestures (on Linux). They were defined as scroll operations with DEVICE_PIXELS unit, but the spec cleary says they are `intended direction and end position` operations. Note that we will also use this information for scroll-snap-stop property since the properly will only have effects on both 2) and 3) cases. [1] https://drafts.csswg.org/css-scroll-snap/#scroll-types Depends on D145190 Differential Revision: https://phabricator.services.mozilla.com/D145191
		
			
				
	
	
		
			73 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
	
		
			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
 |