diff options
Diffstat (limited to 'layout/style/nsStyleConsts.h')
-rw-r--r-- | layout/style/nsStyleConsts.h | 679 |
1 files changed, 679 insertions, 0 deletions
diff --git a/layout/style/nsStyleConsts.h b/layout/style/nsStyleConsts.h new file mode 100644 index 0000000000..68826cabec --- /dev/null +++ b/layout/style/nsStyleConsts.h @@ -0,0 +1,679 @@ +/* -*- 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/. */ + +/* constants used in the style struct data provided by ComputedStyle */ + +#ifndef nsStyleConsts_h___ +#define nsStyleConsts_h___ + +#include <inttypes.h> + +#include "X11UndefineNone.h" + +#include "gfxFontConstants.h" +#include "mozilla/ServoStyleConsts.h" + +// XXX fold this into ComputedStyle and group by nsStyleXXX struct + +namespace mozilla { + +static constexpr uint16_t STYLE_DISPLAY_LIST_ITEM_BIT = 0x8000; +static constexpr uint8_t STYLE_DISPLAY_OUTSIDE_BITS = 7; +static constexpr uint8_t STYLE_DISPLAY_INSIDE_BITS = 8; + +// The `display` longhand. +uint16_t constexpr StyleDisplayFrom(StyleDisplayOutside aOuter, + StyleDisplayInside aInner) { + return uint16_t(uint16_t(aOuter) << STYLE_DISPLAY_INSIDE_BITS) | + uint16_t(aInner); +} + +enum class StyleDisplay : uint16_t { + // These MUST be in sync with the Rust enum values in + // servo/components/style/values/specified/box.rs + /// https://drafts.csswg.org/css-display/#the-display-properties + None = StyleDisplayFrom(StyleDisplayOutside::None, StyleDisplayInside::None), + Contents = + StyleDisplayFrom(StyleDisplayOutside::None, StyleDisplayInside::Contents), + Inline = + StyleDisplayFrom(StyleDisplayOutside::Inline, StyleDisplayInside::Flow), + Block = + StyleDisplayFrom(StyleDisplayOutside::Block, StyleDisplayInside::Flow), + FlowRoot = StyleDisplayFrom(StyleDisplayOutside::Block, + StyleDisplayInside::FlowRoot), + Flex = StyleDisplayFrom(StyleDisplayOutside::Block, StyleDisplayInside::Flex), + Grid = StyleDisplayFrom(StyleDisplayOutside::Block, StyleDisplayInside::Grid), + Table = + StyleDisplayFrom(StyleDisplayOutside::Block, StyleDisplayInside::Table), + InlineTable = + StyleDisplayFrom(StyleDisplayOutside::Inline, StyleDisplayInside::Table), + TableCaption = StyleDisplayFrom(StyleDisplayOutside::TableCaption, + StyleDisplayInside::Flow), + Ruby = + StyleDisplayFrom(StyleDisplayOutside::Inline, StyleDisplayInside::Ruby), + WebkitBox = StyleDisplayFrom(StyleDisplayOutside::Block, + StyleDisplayInside::WebkitBox), + WebkitInlineBox = StyleDisplayFrom(StyleDisplayOutside::Inline, + StyleDisplayInside::WebkitBox), + ListItem = Block | STYLE_DISPLAY_LIST_ITEM_BIT, + + /// Internal table boxes. + TableRowGroup = StyleDisplayFrom(StyleDisplayOutside::InternalTable, + StyleDisplayInside::TableRowGroup), + TableHeaderGroup = StyleDisplayFrom(StyleDisplayOutside::InternalTable, + StyleDisplayInside::TableHeaderGroup), + TableFooterGroup = StyleDisplayFrom(StyleDisplayOutside::InternalTable, + StyleDisplayInside::TableFooterGroup), + TableColumn = StyleDisplayFrom(StyleDisplayOutside::InternalTable, + StyleDisplayInside::TableColumn), + TableColumnGroup = StyleDisplayFrom(StyleDisplayOutside::InternalTable, + StyleDisplayInside::TableColumnGroup), + TableRow = StyleDisplayFrom(StyleDisplayOutside::InternalTable, + StyleDisplayInside::TableRow), + TableCell = StyleDisplayFrom(StyleDisplayOutside::InternalTable, + StyleDisplayInside::TableCell), + + /// Internal ruby boxes. + RubyBase = StyleDisplayFrom(StyleDisplayOutside::InternalRuby, + StyleDisplayInside::RubyBase), + RubyBaseContainer = StyleDisplayFrom(StyleDisplayOutside::InternalRuby, + StyleDisplayInside::RubyBaseContainer), + RubyText = StyleDisplayFrom(StyleDisplayOutside::InternalRuby, + StyleDisplayInside::RubyText), + RubyTextContainer = StyleDisplayFrom(StyleDisplayOutside::InternalRuby, + StyleDisplayInside::RubyTextContainer), + + /// XUL boxes. + MozBox = + StyleDisplayFrom(StyleDisplayOutside::Block, StyleDisplayInside::MozBox), + MozInlineBox = + StyleDisplayFrom(StyleDisplayOutside::Inline, StyleDisplayInside::MozBox), +}; +// The order of the StyleDisplay values isn't meaningful. +bool operator<(const StyleDisplay&, const StyleDisplay&) = delete; +bool operator<=(const StyleDisplay&, const StyleDisplay&) = delete; +bool operator>(const StyleDisplay&, const StyleDisplay&) = delete; +bool operator>=(const StyleDisplay&, const StyleDisplay&) = delete; + +// Basic shapes +enum class StyleBasicShapeType : uint8_t { + Polygon, + Circle, + Ellipse, + Inset, +}; + +// box-align +enum class StyleBoxAlign : uint8_t { + Stretch, + Start, + Center, + Baseline, + End, +}; + +// box-decoration-break +enum class StyleBoxDecorationBreak : uint8_t { + Slice, + Clone, +}; + +// box-direction +enum class StyleBoxDirection : uint8_t { + Normal, + Reverse, +}; + +// box-orient +enum class StyleBoxOrient : uint8_t { + Horizontal, + Vertical, +}; + +// box-pack +enum class StyleBoxPack : uint8_t { + Start, + Center, + End, + Justify, +}; + +// box-sizing +enum class StyleBoxSizing : uint8_t { Content, Border }; + +// box-shadow +enum class StyleBoxShadowType : uint8_t { + Inset, +}; + +enum class StyleColumnFill : uint8_t { + Balance, + Auto, +}; + +enum class StyleColumnSpan : uint8_t { + None, + All, +}; + +// Define geometry box for clip-path's reference-box, background-clip, +// background-origin, mask-clip, mask-origin, shape-box and transform-box. +enum class StyleGeometryBox : uint8_t { + ContentBox, // Used by everything, except transform-box. + PaddingBox, // Used by everything, except transform-box. + BorderBox, + MarginBox, // XXX Bug 1260094 comment 9. + // Although margin-box is required by mask-origin and mask-clip, + // we do not implement that due to lack of support in other + // browsers. clip-path reference-box only. + FillBox, // Used by everything, except shape-box. + StrokeBox, // mask-clip, mask-origin and clip-path reference-box only. + ViewBox, // Used by everything, except shape-box. + NoClip, // mask-clip only. + Text, // background-clip only. + NoBox, // Depending on which kind of element this style value applied on, + // the default value of a reference-box can be different. + // For an HTML element, the default value of reference-box is + // border-box; for an SVG element, the default value is fill-box. + // Since we can not determine the default value at parsing time, + // set it as NoBox so that we make a decision later. + // clip-path reference-box only. + MozAlmostPadding = 127 // A magic value that we use for our "pretend that + // background-clip is 'padding' when we have a solid + // border" optimization. This isn't actually equal + // to StyleGeometryBox::Padding because using that + // causes antialiasing seams between the background + // and border. + // background-clip only. +}; + +// float-edge +enum class StyleFloatEdge : uint8_t { + ContentBox, + MarginBox, +}; + +// Hyphens +enum class StyleHyphens : uint8_t { + None, + Manual, + Auto, +}; + +// image-orientation +enum class StyleImageOrientation : uint8_t { + None, + FromImage, +}; + +// scrollbar-width +enum class StyleScrollbarWidth : uint8_t { + Auto, + Thin, + None, +}; + +// Shape source type +enum class StyleShapeSourceType : uint8_t { + None, + Image, // shape-outside / clip-path only, and clip-path only uses it for + // <url>s + Shape, + Box, + Path, // SVG path function +}; + +// user-focus +enum class StyleUserFocus : uint8_t { + None, + Ignore, + Normal, + SelectAll, + SelectBefore, + SelectAfter, + SelectSame, + SelectMenu, +}; + +// user-input +enum class StyleUserInput : uint8_t { + None, + Auto, +}; + +// user-modify +enum class StyleUserModify : uint8_t { + ReadOnly, + ReadWrite, + WriteOnly, +}; + +// -moz-inert +enum class StyleInert : uint8_t { + None, + Inert, +}; + +// -moz-window-dragging +enum class StyleWindowDragging : uint8_t { + Default, + Drag, + NoDrag, +}; + +// orient +enum class StyleOrient : uint8_t { + Inline, + Block, + Horizontal, + Vertical, +}; + +// See AnimationEffect.webidl +// and mozilla/dom/AnimationEffectBinding.h +namespace dom { +enum class PlaybackDirection : uint8_t; +enum class FillMode : uint8_t; +} // namespace dom + +// Animation play state +enum class StyleAnimationPlayState : uint8_t { Running, Paused }; + +// See nsStyleImageLayers +enum class StyleImageLayerAttachment : uint8_t { Scroll, Fixed, Local }; + +// See nsStyleImageLayers +enum class StyleImageLayerRepeat : uint8_t { + NoRepeat = 0x00, + RepeatX, + RepeatY, + Repeat, + Space, + Round +}; + +// Mask mode +enum class StyleMaskMode : uint8_t { Alpha = 0, Luminance, MatchSource }; + +// See nsStyleTable +enum class StyleBorderCollapse : uint8_t { Collapse, Separate }; + +// border-image-repeat +enum class StyleBorderImageRepeat : uint8_t { Stretch, Repeat, Round, Space }; + +// See nsStyleVisibility +enum class StyleDirection : uint8_t { Ltr, Rtl }; + +// See nsStyleVisibility +// NOTE: WritingModes.h depends on the particular values used here. + +// Single-bit flag, used in combination with VerticalLR and RL to specify +// the corresponding Sideways* modes. +// (To avoid ambiguity, this bit must be high enough such that no other +// values here accidentally use it in their binary representation.) +static constexpr uint8_t kWritingModeSidewaysMask = 4; + +enum class StyleWritingModeProperty : uint8_t { + HorizontalTb = 0, + VerticalRl = 1, + // HorizontalBT = 2, // hypothetical + VerticalLr = 3, + SidewaysRl = VerticalRl | kWritingModeSidewaysMask, + SidewaysLr = VerticalLr | kWritingModeSidewaysMask, +}; + +// See nsStylePosition +enum class StyleFlexDirection : uint8_t { + Row, + RowReverse, + Column, + ColumnReverse, +}; + +// See nsStylePosition +enum class StyleFlexWrap : uint8_t { + Nowrap, + Wrap, + WrapReverse, +}; + +// CSS Grid <track-breadth> keywords +enum class StyleGridTrackBreadth : uint8_t { + MaxContent = 1, + MinContent = 2, +}; + +// defaults per MathML spec +static constexpr float kMathMLDefaultScriptSizeMultiplier{0.71f}; +static constexpr float kMathMLDefaultScriptMinSizePt{8.f}; + +// See nsStyleFont +enum class StyleMathVariant : uint8_t { + None = 0, + Normal = 1, + Bold = 2, + Italic = 3, + BoldItalic = 4, + Script = 5, + BoldScript = 6, + Fraktur = 7, + DoubleStruck = 8, + BoldFraktur = 9, + SansSerif = 10, + BoldSansSerif = 11, + SansSerifItalic = 12, + SansSerifBoldItalic = 13, + Monospace = 14, + Initial = 15, + Tailed = 16, + Looped = 17, + Stretched = 18, +}; + +// See nsStyleFont::mMathStyle +enum class StyleMathStyle : uint8_t { Compact = 0, Normal = 1 }; + +// See nsStyleDisplay.mPosition +enum class StylePositionProperty : uint8_t { + Static, + Relative, + Absolute, + Fixed, + Sticky, +}; + +enum class FrameBorderProperty : uint8_t { Yes, No, One, Zero }; + +enum class ScrollingAttribute : uint8_t { + Yes, + No, + On, + Off, + Scroll, + Noscroll, + Auto +}; + +// See nsStyleList +enum class ListStyle : uint8_t { + Custom = 255, // for @counter-style + None = 0, + Decimal, + Disc, + Circle, + Square, + DisclosureClosed, + DisclosureOpen, + Hebrew, + JapaneseInformal, + JapaneseFormal, + KoreanHangulFormal, + KoreanHanjaInformal, + KoreanHanjaFormal, + SimpChineseInformal, + SimpChineseFormal, + TradChineseInformal, + TradChineseFormal, + EthiopicNumeric, + // These styles are handled as custom styles defined in counterstyles.css. + // They are preserved here only for html attribute map. + LowerRoman = 100, + UpperRoman, + LowerAlpha, + UpperAlpha +}; + +// See nsStyleList +enum class StyleListStylePosition : uint8_t { Inside, Outside }; + +// See nsStyleVisibility +enum class StylePointerEvents : uint8_t { + None, + Visiblepainted, + Visiblefill, + Visiblestroke, + Visible, + Painted, + Fill, + Stroke, + All, + Auto, +}; + +enum class StyleIsolation : uint8_t { + Auto, + Isolate, +}; + +// See nsStylePosition.mObjectFit +enum class StyleObjectFit : uint8_t { + Fill, + Contain, + Cover, + None, + ScaleDown, +}; + +// See nsStyleText +enum class StyleTextDecorationStyle : uint8_t { + None, // not in CSS spec, mapped to -moz-none + Dotted, + Dashed, + Solid, + Double, + Wavy, + Sentinel = Wavy +}; + +// See nsStyleDisplay +enum class StyleTopLayer : uint8_t { + None, + Top, +}; + +// See nsStyleVisibility +enum class StyleVisibility : uint8_t { + Hidden, + Visible, + Collapse, +}; + +// See nsStyleText +enum class StyleWhiteSpace : uint8_t { + Normal = 0, + Pre, + Nowrap, + PreWrap, + PreLine, + PreSpace, + BreakSpaces, +}; + +// ruby-align, see nsStyleText +enum class StyleRubyAlign : uint8_t { + Start, + Center, + SpaceBetween, + SpaceAround, +}; + +// See nsStyleText +enum class StyleTextSizeAdjust : uint8_t { + None, + Auto, +}; + +// See nsStyleVisibility +enum class StyleTextOrientation : uint8_t { + Mixed, + Upright, + Sideways, +}; + +// Whether to emulate -moz-box with flex. See nsStyleVisibility +enum class StyleMozBoxLayout : uint8_t { + Legacy, + Flex, +}; + +// See nsStyleText +enum class StyleTextCombineUpright : uint8_t { + None, + All, +}; + +// See nsStyleText +enum class StyleUnicodeBidi : uint8_t { + Normal, + Embed, + Isolate, + BidiOverride, + IsolateOverride, + Plaintext +}; + +enum class StyleTableLayout : uint8_t { + Auto, + Fixed, +}; + +enum class StyleEmptyCells : uint8_t { + Hide, + Show, +}; + +// See nsStyleUIReset +enum class StyleImeMode : uint8_t { + Auto, + Normal, + Active, + Disabled, + Inactive, +}; + +// See nsStyleSVG + +/* + * -moz-window-shadow + * Also used in widget code + */ +enum class StyleWindowShadow : uint8_t { + None, + Default, + + // These can't be specified in CSS, they get computed from the "default" + // value. + Menu, + Tooltip, +}; + +// dominant-baseline +enum class StyleDominantBaseline : uint8_t { + Auto, + Ideographic, + Alphabetic, + Hanging, + Mathematical, + Central, + Middle, + TextAfterEdge, + TextBeforeEdge, +}; + +// mask-type +enum class StyleMaskType : uint8_t { + Luminance, + Alpha, +}; + +// shape-rendering +enum class StyleShapeRendering : uint8_t { + Auto, + Optimizespeed, + Crispedges, + Geometricprecision, +}; + +// stroke-linecap +enum class StyleStrokeLinecap : uint8_t { + Butt, + Round, + Square, +}; + +// stroke-linejoin +enum class StyleStrokeLinejoin : uint8_t { + Miter, + Round, + Bevel, +}; + +// text-anchor +enum class StyleTextAnchor : uint8_t { + Start, + Middle, + End, +}; + +// text-rendering +enum class StyleTextRendering : uint8_t { + Auto, + Optimizespeed, + Optimizelegibility, + Geometricprecision, +}; + +// color-interpolation and color-interpolation-filters +enum class StyleColorInterpolation : uint8_t { + Auto = 0, + Srgb = 1, + Linearrgb = 2, +}; + +// vector-effect +enum class StyleVectorEffect : uint8_t { None = 0, NonScalingStroke = 1 }; + +// 3d Transforms - Backface visibility +enum class StyleBackfaceVisibility : uint8_t { Hidden = 0, Visible = 1 }; + +// blending +enum class StyleBlend : uint8_t { + Normal = 0, + Multiply, + Screen, + Overlay, + Darken, + Lighten, + ColorDodge, + ColorBurn, + HardLight, + SoftLight, + Difference, + Exclusion, + Hue, + Saturation, + Color, + Luminosity, + PlusLighter, +}; + +// composite +enum class StyleMaskComposite : uint8_t { + Add = 0, + Subtract, + Intersect, + Exclude +}; + +// scroll-behavior +enum class StyleScrollBehavior : uint8_t { + Auto, + Smooth, +}; + +} // namespace mozilla + +#endif /* nsStyleConsts_h___ */ |