1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #ifndef ScrollbarStyles_h 8 #define ScrollbarStyles_h 9 10 #include <stdint.h> 11 #include "nsStyleConsts.h" // for NS_STYLE_SCROLL_SNAP_* 12 #include "nsStyleCoord.h" // for nsStyleCoord 13 #include "mozilla/dom/WindowBinding.h" 14 15 // Forward declarations 16 struct nsStyleDisplay; 17 18 namespace mozilla { 19 20 struct ScrollbarStyles { 21 // Always one of NS_STYLE_OVERFLOW_SCROLL, NS_STYLE_OVERFLOW_HIDDEN, 22 // or NS_STYLE_OVERFLOW_AUTO. 23 uint8_t mHorizontal; 24 uint8_t mVertical; 25 // Always one of NS_STYLE_SCROLL_BEHAVIOR_AUTO or 26 // NS_STYLE_SCROLL_BEHAVIOR_SMOOTH 27 uint8_t mScrollBehavior; 28 mozilla::StyleOverscrollBehavior mOverscrollBehaviorX; 29 mozilla::StyleOverscrollBehavior mOverscrollBehaviorY; 30 // Always one of NS_STYLE_SCROLL_SNAP_NONE, NS_STYLE_SCROLL_SNAP_MANDATORY, 31 // or NS_STYLE_SCROLL_SNAP_PROXIMITY. 32 uint8_t mScrollSnapTypeX; 33 uint8_t mScrollSnapTypeY; 34 nsStyleCoord mScrollSnapPointsX; 35 nsStyleCoord mScrollSnapPointsY; 36 nsStyleCoord::CalcValue mScrollSnapDestinationX; 37 nsStyleCoord::CalcValue mScrollSnapDestinationY; 38 ScrollbarStylesScrollbarStyles39 ScrollbarStyles(uint8_t aH, uint8_t aV) 40 : mHorizontal(aH), 41 mVertical(aV), 42 mScrollBehavior(NS_STYLE_SCROLL_BEHAVIOR_AUTO), 43 mOverscrollBehaviorX(StyleOverscrollBehavior::Auto), 44 mOverscrollBehaviorY(StyleOverscrollBehavior::Auto), 45 mScrollSnapTypeX(NS_STYLE_SCROLL_SNAP_TYPE_NONE), 46 mScrollSnapTypeY(NS_STYLE_SCROLL_SNAP_TYPE_NONE), 47 mScrollSnapPointsX(nsStyleCoord(eStyleUnit_None)), 48 mScrollSnapPointsY(nsStyleCoord(eStyleUnit_None)) { 49 mScrollSnapDestinationX.mPercent = 0; 50 mScrollSnapDestinationX.mLength = nscoord(0.0f); 51 mScrollSnapDestinationX.mHasPercent = false; 52 mScrollSnapDestinationY.mPercent = 0; 53 mScrollSnapDestinationY.mLength = nscoord(0.0f); 54 mScrollSnapDestinationY.mHasPercent = false; 55 } 56 57 explicit ScrollbarStyles(const nsStyleDisplay* aDisplay); 58 ScrollbarStyles(uint8_t aH, uint8_t aV, const nsStyleDisplay* aDisplay); 59 bool operator==(const ScrollbarStyles& aStyles) const { 60 return aStyles.mHorizontal == mHorizontal && 61 aStyles.mVertical == mVertical && 62 aStyles.mScrollBehavior == mScrollBehavior && 63 aStyles.mOverscrollBehaviorX == mOverscrollBehaviorX && 64 aStyles.mOverscrollBehaviorY == mOverscrollBehaviorY && 65 aStyles.mScrollSnapTypeX == mScrollSnapTypeX && 66 aStyles.mScrollSnapTypeY == mScrollSnapTypeY && 67 aStyles.mScrollSnapPointsX == mScrollSnapPointsX && 68 aStyles.mScrollSnapPointsY == mScrollSnapPointsY && 69 aStyles.mScrollSnapDestinationX == mScrollSnapDestinationX && 70 aStyles.mScrollSnapDestinationY == mScrollSnapDestinationY; 71 } 72 bool operator!=(const ScrollbarStyles& aStyles) const { 73 return !(*this == aStyles); 74 } IsHiddenInBothDirectionsScrollbarStyles75 bool IsHiddenInBothDirections() const { 76 return mHorizontal == NS_STYLE_OVERFLOW_HIDDEN && 77 mVertical == NS_STYLE_OVERFLOW_HIDDEN; 78 } IsSmoothScrollScrollbarStyles79 bool IsSmoothScroll(dom::ScrollBehavior aBehavior) const { 80 return aBehavior == dom::ScrollBehavior::Smooth || 81 (aBehavior == dom::ScrollBehavior::Auto && 82 mScrollBehavior == NS_STYLE_SCROLL_BEHAVIOR_SMOOTH); 83 } 84 }; 85 86 } // namespace mozilla 87 88 #endif 89