Source code
Revision control
Copy as Markdown
Other Tools
/* -*- 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
/* Helper structs or classes used throughout the Layout module */
#ifndef mozilla_LayoutStructs_h
#define mozilla_LayoutStructs_h
#include "mozilla/AspectRatio.h"
#include "mozilla/ServoStyleConsts.h"
namespace mozilla {
/**
* A set of StyleSizes used as an input parameter to various functions that
* compute sizes like nsIFrame::ComputeSize(). If any of the member fields has a
* value, the function may use the value instead of retrieving it from the
* frame's style.
*
* The logical sizes are assumed to be in the associated frame's writing-mode.
*/
struct StyleSizeOverrides {
Maybe<StyleSize> mStyleISize;
Maybe<StyleSize> mStyleBSize;
Maybe<AspectRatio> mAspectRatio;
bool HasAnyOverrides() const { return mStyleISize || mStyleBSize; }
bool HasAnyLengthOverrides() const {
return (mStyleISize && mStyleISize->ConvertsToLength()) ||
(mStyleBSize && mStyleBSize->ConvertsToLength());
}
// By default, table wrapper frame considers the size overrides applied to
// itself, so it creates any length size overrides for inner table frame by
// subtracting the area occupied by the caption and border & padding according
// to box-sizing.
//
// When this flag is true, table wrapper frame is required to apply the size
// overrides to the inner table frame directly, without any modification,
// which is useful for flex container to override the inner table frame's
// preferred main size with 'flex-basis'.
//
// Note: if mStyleISize is a LengthPercentage, the inner table frame will
// comply with the inline-size override without enforcing its min-content
// inline-size in nsTableFrame::ComputeSize(). This is necessary so that small
// flex-basis values like 'flex-basis:1%' can be resolved correctly; the
// flexbox layout algorithm does still explicitly clamp to min-sizes *at a
// later step*, after the flex-basis has been resolved -- so this flag won't
// actually produce any user-visible tables whose final inline size is smaller
// than their min-content inline size.
bool mApplyOverridesVerbatim = false;
};
} // namespace mozilla
#endif // mozilla_LayoutStructs_h