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/. */
7 #include "mozilla/ScrollStyles.h"
8 #include "nsStyleStruct.h" // for nsStyleDisplay
12 // https://drafts.csswg.org/css-overflow/#overflow-propagation
13 // "If `visible` is applied to the viewport, it must be interpreted as `auto`.
14 // If `clip` is applied to the viewport, it must be interpreted as `hidden`."
15 static StyleOverflow
MapOverflowValueForViewportPropagation(
16 StyleOverflow aOverflow
) {
18 case StyleOverflow::Visible
:
19 return StyleOverflow::Auto
;
20 case StyleOverflow::Clip
:
21 return StyleOverflow::Hidden
;
27 ScrollStyles::ScrollStyles(StyleOverflow aH
, StyleOverflow aV
)
28 : mHorizontal(aH
), mVertical(aV
) {
29 MOZ_ASSERT(mHorizontal
== StyleOverflow::Auto
||
30 mHorizontal
== StyleOverflow::Hidden
||
31 mHorizontal
== StyleOverflow::Scroll
);
32 MOZ_ASSERT(mVertical
== StyleOverflow::Auto
||
33 mVertical
== StyleOverflow::Hidden
||
34 mVertical
== StyleOverflow::Scroll
);
37 ScrollStyles::ScrollStyles(const nsStyleDisplay
& aDisplay
,
38 MapOverflowToValidScrollStyleTag
)
40 MapOverflowValueForViewportPropagation(aDisplay
.mOverflowX
),
41 MapOverflowValueForViewportPropagation(aDisplay
.mOverflowY
)) {}
43 bool ScrollStyles::IsHiddenInBothDirections() const {
44 return mHorizontal
== StyleOverflow::Hidden
&&
45 mVertical
== StyleOverflow::Hidden
;
48 } // namespace mozilla