diff options
Diffstat (limited to '')
-rw-r--r-- | layout/generic/CSSAlignUtils.h | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/layout/generic/CSSAlignUtils.h b/layout/generic/CSSAlignUtils.h new file mode 100644 index 0000000000..ae715f4081 --- /dev/null +++ b/layout/generic/CSSAlignUtils.h @@ -0,0 +1,65 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* 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/. */ + +/* Utility code for performing CSS Box Alignment */ + +#ifndef mozilla_CSSAlignUtils_h +#define mozilla_CSSAlignUtils_h + +#include "mozilla/WritingModes.h" + +namespace mozilla { + +struct ReflowInput; +struct StyleAlignFlags; + +class CSSAlignUtils { + public: + /** + * Flags to customize the behavior of AlignJustifySelf: + */ + enum class AlignJustifyFlags { + NoFlags = 0, + // Indicates that we have <overflow-position> = safe. + OverflowSafe = 1 << 0, + // Indicates that the container's start side in aAxis is the same + // as the child's start side in the child's parallel axis. + SameSide = 1 << 1, + // Indicates that AlignJustifySelf() shouldn't expand "auto" margins. + // (By default, AlignJustifySelf() *will* expand such margins, to fill the + // available space before any alignment is done.) + IgnoreAutoMargins = 1 << 2, + }; + + /** + * This computes the aligned offset of a CSS-aligned child within its + * alignment container. The returned offset is distance between the + * logical "start" edge of the alignment container & the logical "start" edge + * of the aligned child (in terms of the alignment container's writing mode). + * + * @param aAlignment An enumerated value representing a keyword for + * "align-self" or "justify-self". The values + * StyleAlignFlags::{AUTO,LEFT,RIGHT} must *not* be + * passed here; this method expects the caller to have + * already resolved those to 'start', 'end', or 'stretch'. + * @param aAxis The container's axis in which we're doing alignment. + * @param aBaselineAdjust The amount to offset baseline-aligned children. + * @param aCBSize The size of the alignment container, in its aAxis. + * @param aRI A ReflowInput for the child. + * @param aChildSize The child's LogicalSize (in its own writing mode). + */ + static nscoord AlignJustifySelf(const StyleAlignFlags& aAlignment, + LogicalAxis aAxis, AlignJustifyFlags aFlags, + nscoord aBaselineAdjust, nscoord aCBSize, + const ReflowInput& aRI, + const LogicalSize& aChildSize); +}; + +MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(CSSAlignUtils::AlignJustifyFlags) + +} // namespace mozilla + +#endif // mozilla_CSSAlignUtils_h |