will-change should sometimes trigger compositing
[WebKit-https.git] / Source / WebCore / rendering / style / RenderStyleConstants.h
1 /*
2  * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
3  *           (C) 2000 Antti Koivisto (koivisto@kde.org)
4  *           (C) 2000 Dirk Mueller (mueller@kde.org)
5  * Copyright (C) 2003, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
6  * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com)
7  * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
8  *
9  * This library is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Library General Public
11  * License as published by the Free Software Foundation; either
12  * version 2 of the License, or (at your option) any later version.
13  *
14  * This library is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  * Library General Public License for more details.
18  *
19  * You should have received a copy of the GNU Library General Public License
20  * along with this library; see the file COPYING.LIB.  If not, write to
21  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
22  * Boston, MA 02110-1301, USA.
23  *
24  */
25
26 #ifndef RenderStyleConstants_h
27 #define RenderStyleConstants_h
28
29 #include <initializer_list>
30
31 namespace WebCore {
32
33 static const size_t PrintColorAdjustBits = 1;
34 enum PrintColorAdjust {
35     PrintColorAdjustEconomy,
36     PrintColorAdjustExact
37 };
38
39 // The difference between two styles.  The following values are used:
40 // - StyleDifferenceEqual - The two styles are identical
41 // - StyleDifferenceRecompositeLayer - The layer needs its position and transform updated, but no repaint
42 // - StyleDifferenceRepaint - The object just needs to be repainted.
43 // - StyleDifferenceRepaintIfTextOrBorderOrOutline - The object needs to be repainted if it contains text or a border or outline.
44 // - StyleDifferenceRepaintLayer - The layer and its descendant layers needs to be repainted.
45 // - StyleDifferenceLayoutPositionedMovementOnly - Only the position of this positioned object has been updated
46 // - StyleDifferenceSimplifiedLayout - Only overflow needs to be recomputed
47 // - StyleDifferenceSimplifiedLayoutAndPositionedMovement - Both positioned movement and simplified layout updates are required.
48 // - StyleDifferenceLayout - A full layout is required.
49 enum StyleDifference {
50     StyleDifferenceEqual,
51     StyleDifferenceRecompositeLayer,
52     StyleDifferenceRepaint,
53     StyleDifferenceRepaintIfTextOrBorderOrOutline,
54     StyleDifferenceRepaintLayer,
55     StyleDifferenceLayoutPositionedMovementOnly,
56     StyleDifferenceSimplifiedLayout,
57     StyleDifferenceSimplifiedLayoutAndPositionedMovement,
58     StyleDifferenceLayout,
59     StyleDifferenceNewStyle
60 };
61
62 // When some style properties change, different amounts of work have to be done depending on
63 // context (e.g. whether the property is changing on an element which has a compositing layer).
64 // A simple StyleDifference does not provide enough information so we return a bit mask of
65 // StyleDifferenceContextSensitiveProperties from RenderStyle::diff() too.
66 enum StyleDifferenceContextSensitiveProperty {
67     ContextSensitivePropertyNone        = 0,
68     ContextSensitivePropertyTransform   = 1 << 0,
69     ContextSensitivePropertyOpacity     = 1 << 1,
70     ContextSensitivePropertyFilter      = 1 << 2,
71     ContextSensitivePropertyClipRect    = 1 << 3,
72     ContextSensitivePropertyClipPath    = 1 << 4,
73     ContextSensitivePropertyWillChange  = 1 << 5,
74 };
75
76 // Static pseudo styles. Dynamic ones are produced on the fly.
77 enum PseudoId : unsigned char {
78     // The order must be NOP ID, public IDs, and then internal IDs.
79     NOPSEUDO, FIRST_LINE, FIRST_LETTER, BEFORE, AFTER, SELECTION, FIRST_LINE_INHERITED, SCROLLBAR,
80     // Internal IDs follow:
81     SCROLLBAR_THUMB, SCROLLBAR_BUTTON, SCROLLBAR_TRACK, SCROLLBAR_TRACK_PIECE, SCROLLBAR_CORNER, RESIZER,
82     AFTER_LAST_INTERNAL_PSEUDOID,
83     FIRST_PUBLIC_PSEUDOID = FIRST_LINE,
84     FIRST_INTERNAL_PSEUDOID = SCROLLBAR_THUMB,
85     PUBLIC_PSEUDOID_MASK = ((1 << FIRST_INTERNAL_PSEUDOID) - 1) & ~((1 << FIRST_PUBLIC_PSEUDOID) - 1)
86 };
87
88 class PseudoIdSet {
89 public:
90     PseudoIdSet()
91         : m_data(0)
92     {
93     }
94
95     PseudoIdSet(std::initializer_list<PseudoId> initializerList)
96         : m_data(0)
97     {
98         for (PseudoId pseudoId : initializerList)
99             add(pseudoId);
100     }
101
102     static PseudoIdSet fromMask(unsigned rawPseudoIdSet)
103     {
104         return PseudoIdSet(rawPseudoIdSet);
105     }
106
107     bool has(PseudoId pseudoId) const
108     {
109         ASSERT((sizeof(m_data) * 8) > pseudoId);
110         return m_data & (1U << pseudoId);
111     }
112
113     void add(PseudoId pseudoId)
114     {
115         ASSERT((sizeof(m_data) * 8) > pseudoId);
116         m_data |= (1U << pseudoId);
117     }
118
119     void merge(PseudoIdSet source)
120     {
121         m_data |= source.m_data;
122     }
123
124     PseudoIdSet operator &(const PseudoIdSet& pseudoIdSet) const
125     {
126         return PseudoIdSet(m_data & pseudoIdSet.m_data);
127     }
128
129     PseudoIdSet operator |(const PseudoIdSet& pseudoIdSet) const
130     {
131         return PseudoIdSet(m_data | pseudoIdSet.m_data);
132     }
133
134     explicit operator bool() const
135     {
136         return m_data;
137     }
138
139     unsigned data() const { return m_data; }
140 private:
141     explicit PseudoIdSet(unsigned rawPseudoIdSet)
142         : m_data(rawPseudoIdSet)
143     {
144     }
145
146     unsigned m_data;
147 };
148
149 enum ColumnFill { ColumnFillBalance, ColumnFillAuto };
150
151 enum ColumnSpan { ColumnSpanNone = 0, ColumnSpanAll };
152
153 enum EBorderCollapse { BSEPARATE = 0, BCOLLAPSE = 1 };
154
155 // These have been defined in the order of their precedence for border-collapsing. Do
156 // not change this order! This order also must match the order in CSSValueKeywords.in.
157 enum EBorderStyle { BNONE, BHIDDEN, INSET, GROOVE, OUTSET, RIDGE, DOTTED, DASHED, SOLID, DOUBLE };
158
159 enum EBorderPrecedence { BOFF, BTABLE, BCOLGROUP, BCOL, BROWGROUP, BROW, BCELL };
160
161 enum OutlineIsAuto { AUTO_OFF = 0, AUTO_ON };
162
163 enum EPosition {
164     StaticPosition = 0,
165     RelativePosition = 1,
166     AbsolutePosition = 2,
167     StickyPosition = 3,
168     // This value is required to pack our bits efficiently in RenderObject.
169     FixedPosition = 6
170 };
171
172 enum EFloat {
173     NoFloat, LeftFloat, RightFloat
174 };
175
176 enum EMarginCollapse { MCOLLAPSE, MSEPARATE, MDISCARD };
177
178 // Box decoration attributes. Not inherited.
179
180 enum EBoxDecorationBreak { DSLICE, DCLONE };
181
182 // Box attributes. Not inherited.
183
184 enum EBoxSizing { CONTENT_BOX, BORDER_BOX };
185
186 // Random visual rendering model attributes. Not inherited.
187
188 enum EOverflow {
189     OVISIBLE, OHIDDEN, OSCROLL, OAUTO, OOVERLAY, OMARQUEE, OPAGEDX, OPAGEDY
190 };
191
192 enum EVerticalAlign {
193     BASELINE, MIDDLE, SUB, SUPER, TEXT_TOP,
194     TEXT_BOTTOM, TOP, BOTTOM, BASELINE_MIDDLE, LENGTH
195 };
196
197 enum EClear {
198     CNONE = 0, CLEFT = 1, CRIGHT = 2, CBOTH = 3
199 };
200
201 enum ETableLayout {
202     TAUTO, TFIXED
203 };
204
205 enum TextCombine {
206     TextCombineNone, TextCombineHorizontal
207 };
208
209 enum EFillAttachment {
210     ScrollBackgroundAttachment, LocalBackgroundAttachment, FixedBackgroundAttachment
211 };
212
213 enum EFillBox {
214     BorderFillBox, PaddingFillBox, ContentFillBox, TextFillBox
215 };
216
217 enum EFillRepeat {
218     RepeatFill, NoRepeatFill, RoundFill, SpaceFill
219 };
220
221 enum EFillLayerType {
222     BackgroundFillLayer, MaskFillLayer
223 };
224
225 // CSS3 Background Values
226 enum EFillSizeType { Contain, Cover, SizeLength, SizeNone };
227
228 // CSS3 Background Position
229 enum BackgroundEdgeOrigin { TopEdge, RightEdge, BottomEdge, LeftEdge };
230
231 // CSS3 Mask Source Types
232 enum EMaskSourceType { MaskAlpha, MaskLuminance };
233
234 // CSS3 Marquee Properties
235
236 enum EMarqueeBehavior { MNONE, MSCROLL, MSLIDE, MALTERNATE };
237 enum EMarqueeDirection { MAUTO = 0, MLEFT = 1, MRIGHT = -1, MUP = 2, MDOWN = -2, MFORWARD = 3, MBACKWARD = -3 };
238
239 // Deprecated Flexible Box Properties
240
241 enum EBoxPack { Start, Center, End, Justify };
242 enum EBoxAlignment { BSTRETCH, BSTART, BCENTER, BEND, BBASELINE };
243 enum EBoxOrient { HORIZONTAL, VERTICAL };
244 enum EBoxLines { SINGLE, MULTIPLE };
245 enum EBoxDirection { BNORMAL, BREVERSE };
246
247 // CSS3 Flexbox Properties
248
249 enum EAlignContent { AlignContentFlexStart, AlignContentFlexEnd, AlignContentCenter, AlignContentSpaceBetween, AlignContentSpaceAround, AlignContentStretch };
250 enum EFlexDirection { FlowRow, FlowRowReverse, FlowColumn, FlowColumnReverse };
251 enum EFlexWrap { FlexNoWrap, FlexWrap, FlexWrapReverse };
252 enum ItemPosition {ItemPositionAuto, ItemPositionStretch, ItemPositionBaseline, ItemPositionLastBaseline, ItemPositionCenter, ItemPositionStart, ItemPositionEnd, ItemPositionSelfStart, ItemPositionSelfEnd, ItemPositionFlexStart, ItemPositionFlexEnd, ItemPositionLeft, ItemPositionRight};
253 enum OverflowAlignment {OverflowAlignmentDefault, OverflowAlignmentTrue, OverflowAlignmentSafe};
254 enum ItemPositionType {NonLegacyPosition, LegacyPosition};
255 enum ContentPosition {ContentPositionAuto, ContentPositionBaseline, ContentPositionLastBaseline, ContentPositionCenter, ContentPositionStart, ContentPositionEnd, ContentPositionFlexStart, ContentPositionFlexEnd, ContentPositionLeft, ContentPositionRight};
256 enum ContentDistributionType {ContentDistributionDefault, ContentDistributionSpaceBetween, ContentDistributionSpaceAround, ContentDistributionSpaceEvenly, ContentDistributionStretch};
257
258 enum ETextSecurity {
259     TSNONE, TSDISC, TSCIRCLE, TSSQUARE
260 };
261
262 // CSS3 User Modify Properties
263
264 enum EUserModify {
265     READ_ONLY, READ_WRITE, READ_WRITE_PLAINTEXT_ONLY
266 };
267
268 // CSS3 User Drag Values
269
270 enum EUserDrag {
271     DRAG_AUTO, DRAG_NONE, DRAG_ELEMENT
272 };
273
274 // CSS3 User Select Values
275
276 enum EUserSelect {
277     SELECT_NONE, SELECT_TEXT, SELECT_ALL
278 };
279
280 // CSS3 Image Values
281 enum ObjectFit {
282     ObjectFitFill, ObjectFitContain, ObjectFitCover, ObjectFitNone, ObjectFitScaleDown
283 };
284
285 enum AspectRatioType {
286     AspectRatioAuto, AspectRatioFromIntrinsic, AspectRatioFromDimensions, AspectRatioSpecified
287 };
288
289 enum EWordBreak {
290     NormalWordBreak, BreakAllWordBreak, KeepAllWordBreak, BreakWordBreak
291 };
292
293 enum EOverflowWrap {
294     NormalOverflowWrap, BreakOverflowWrap
295 };
296
297 enum ENBSPMode {
298     NBNORMAL, SPACE
299 };
300
301 enum LineBreak {
302     LineBreakAuto, LineBreakLoose, LineBreakNormal, LineBreakStrict, LineBreakAfterWhiteSpace
303 };
304
305 enum EResize {
306     RESIZE_NONE, RESIZE_BOTH, RESIZE_HORIZONTAL, RESIZE_VERTICAL
307 };
308
309 // The order of this enum must match the order of the list style types in CSSValueKeywords.in.
310 enum EListStyleType {
311     Disc,
312     Circle,
313     Square,
314     DecimalListStyle,
315     DecimalLeadingZero,
316     ArabicIndic,
317     BinaryListStyle,
318     Bengali,
319     Cambodian,
320     Khmer,
321     Devanagari,
322     Gujarati,
323     Gurmukhi,
324     Kannada,
325     LowerHexadecimal,
326     Lao,
327     Malayalam,
328     Mongolian,
329     Myanmar,
330     Octal,
331     Oriya,
332     Persian,
333     Urdu,
334     Telugu,
335     Tibetan,
336     Thai,
337     UpperHexadecimal,
338     LowerRoman,
339     UpperRoman,
340     LowerGreek,
341     LowerAlpha,
342     LowerLatin,
343     UpperAlpha,
344     UpperLatin,
345     Afar,
346     EthiopicHalehameAaEt,
347     EthiopicHalehameAaEr,
348     Amharic,
349     EthiopicHalehameAmEt,
350     AmharicAbegede,
351     EthiopicAbegedeAmEt,
352     CjkEarthlyBranch,
353     CjkHeavenlyStem,
354     Ethiopic,
355     EthiopicHalehameGez,
356     EthiopicAbegede,
357     EthiopicAbegedeGez,
358     HangulConsonant,
359     Hangul,
360     LowerNorwegian,
361     Oromo,
362     EthiopicHalehameOmEt,
363     Sidama,
364     EthiopicHalehameSidEt,
365     Somali,
366     EthiopicHalehameSoEt,
367     Tigre,
368     EthiopicHalehameTig,
369     TigrinyaEr,
370     EthiopicHalehameTiEr,
371     TigrinyaErAbegede,
372     EthiopicAbegedeTiEr,
373     TigrinyaEt,
374     EthiopicHalehameTiEt,
375     TigrinyaEtAbegede,
376     EthiopicAbegedeTiEt,
377     UpperGreek,
378     UpperNorwegian,
379     Asterisks,
380     Footnotes,
381     Hebrew,
382     Armenian,
383     LowerArmenian,
384     UpperArmenian,
385     Georgian,
386     CJKIdeographic,
387     Hiragana,
388     Katakana,
389     HiraganaIroha,
390     KatakanaIroha,
391     NoneListStyle
392 };
393
394 enum QuoteType {
395     OPEN_QUOTE, CLOSE_QUOTE, NO_OPEN_QUOTE, NO_CLOSE_QUOTE
396 };
397
398 enum EBorderFit { BorderFitBorder, BorderFitLines };
399
400 enum EAnimationFillMode { AnimationFillModeNone, AnimationFillModeForwards, AnimationFillModeBackwards, AnimationFillModeBoth };
401
402 enum EAnimPlayState {
403     AnimPlayStatePlaying = 0x0,
404     AnimPlayStatePaused = 0x1
405 };
406
407 enum EWhiteSpace {
408     NORMAL, PRE, PRE_WRAP, PRE_LINE, NOWRAP, KHTML_NOWRAP
409 };
410
411 // The order of this enum must match the order of the text align values in CSSValueKeywords.in.
412 enum ETextAlign {
413     LEFT, RIGHT, CENTER, JUSTIFY, WEBKIT_LEFT, WEBKIT_RIGHT, WEBKIT_CENTER, TASTART, TAEND,
414 };
415
416 enum ETextTransform {
417     CAPITALIZE, UPPERCASE, LOWERCASE, TTNONE
418 };
419
420 #if ENABLE(LETTERPRESS)
421 static const size_t TextDecorationBits = 5;
422 #else
423 static const size_t TextDecorationBits = 4;
424 #endif
425 enum TextDecoration {
426     TextDecorationNone = 0x0,
427     TextDecorationUnderline = 0x1,
428     TextDecorationOverline = 0x2,
429     TextDecorationLineThrough = 0x4,
430     TextDecorationBlink = 0x8,
431 #if ENABLE(LETTERPRESS)
432     TextDecorationLetterpress = 0x10,
433 #endif
434 };
435 inline TextDecoration operator| (TextDecoration a, TextDecoration b) { return TextDecoration(int(a) | int(b)); }
436 inline TextDecoration& operator|= (TextDecoration& a, TextDecoration b) { return a = a | b; }
437
438 enum TextDecorationStyle {
439     TextDecorationStyleSolid,
440     TextDecorationStyleDouble,
441     TextDecorationStyleDotted,
442     TextDecorationStyleDashed,
443     TextDecorationStyleWavy
444 };
445
446 #if ENABLE(CSS3_TEXT)
447 enum TextAlignLast {
448     TextAlignLastAuto, TextAlignLastStart, TextAlignLastEnd, TextAlignLastLeft, TextAlignLastRight, TextAlignLastCenter, TextAlignLastJustify
449 };
450
451 enum TextJustify {
452     TextJustifyAuto, TextJustifyNone, TextJustifyInterWord, TextJustifyDistribute
453 };
454 #endif // CSS3_TEXT
455
456 enum TextDecorationSkipItems {
457     TextDecorationSkipNone = 0,
458     TextDecorationSkipInk = 1 << 0,
459     TextDecorationSkipObjects = 1 << 1,
460     TextDecorationSkipAuto = 1 << 2
461 };
462 typedef unsigned TextDecorationSkip;
463
464 enum TextUnderlinePosition {
465     // FIXME: Implement support for 'under left' and 'under right' values.
466     TextUnderlinePositionAuto = 0x1, TextUnderlinePositionAlphabetic = 0x2, TextUnderlinePositionUnder = 0x4
467 };
468
469 enum TextZoom {
470     TextZoomNormal, TextZoomReset
471 };
472
473 enum EPageBreak {
474     PBAUTO, PBALWAYS, PBAVOID
475 };
476
477 enum EEmptyCell {
478     SHOW, HIDE
479 };
480
481 enum ECaptionSide {
482     CAPTOP, CAPBOTTOM, CAPLEFT, CAPRIGHT
483 };
484
485 enum EListStylePosition { OUTSIDE, INSIDE };
486
487 enum EVisibility { VISIBLE, HIDDEN, COLLAPSE };
488
489 enum ECursor {
490     // The following must match the order in CSSValueKeywords.in.
491     CursorAuto,
492     CursorCross,
493     CursorDefault,
494     CursorPointer,
495     CursorMove,
496     CursorVerticalText,
497     CursorCell,
498     CursorContextMenu,
499     CursorAlias,
500     CursorProgress,
501     CursorNoDrop,
502     CursorNotAllowed,
503     CursorZoomIn,
504     CursorZoomOut,
505     CursorEResize,
506     CursorNeResize,
507     CursorNwResize,
508     CursorNResize,
509     CursorSeResize,
510     CursorSwResize,
511     CursorSResize,
512     CursorWResize,
513     CursorEwResize,
514     CursorNsResize,
515     CursorNeswResize,
516     CursorNwseResize,
517     CursorColResize,
518     CursorRowResize,
519     CursorText,
520     CursorWait,
521     CursorHelp,
522     CursorAllScroll,
523     CursorWebkitGrab,
524     CursorWebkitGrabbing,
525
526     // The following are handled as exceptions so don't need to match.
527     CursorCopy,
528     CursorNone
529 };
530
531 #if ENABLE(CURSOR_VISIBILITY)
532 enum CursorVisibility {
533     CursorVisibilityAuto,
534     CursorVisibilityAutoHide,
535 };
536 #endif
537
538 // The order of this enum must match the order of the display values in CSSValueKeywords.in.
539 enum EDisplay {
540     INLINE, BLOCK, LIST_ITEM, COMPACT, INLINE_BLOCK,
541     TABLE, INLINE_TABLE, TABLE_ROW_GROUP,
542     TABLE_HEADER_GROUP, TABLE_FOOTER_GROUP, TABLE_ROW,
543     TABLE_COLUMN_GROUP, TABLE_COLUMN, TABLE_CELL,
544     TABLE_CAPTION, BOX, INLINE_BOX,
545     FLEX, WEBKIT_FLEX, INLINE_FLEX, WEBKIT_INLINE_FLEX,
546 #if ENABLE(CSS_GRID_LAYOUT)
547     GRID, INLINE_GRID,
548 #endif
549     NONE
550 };
551
552 enum EInsideLink {
553     NotInsideLink, InsideUnvisitedLink, InsideVisitedLink
554 };
555     
556 enum EPointerEvents {
557     PE_NONE, PE_AUTO, PE_STROKE, PE_FILL, PE_PAINTED, PE_VISIBLE,
558     PE_VISIBLE_STROKE, PE_VISIBLE_FILL, PE_VISIBLE_PAINTED, PE_ALL
559 };
560
561 enum ETransformStyle3D {
562     TransformStyle3DFlat, TransformStyle3DPreserve3D
563 };
564
565 enum EBackfaceVisibility {
566     BackfaceVisibilityVisible, BackfaceVisibilityHidden
567 };
568     
569 enum ELineClampType { LineClampLineCount, LineClampPercentage };
570
571 enum Hyphens { HyphensNone, HyphensManual, HyphensAuto };
572
573 enum ESpeak { SpeakNone, SpeakNormal, SpeakSpellOut, SpeakDigits, SpeakLiteralPunctuation, SpeakNoPunctuation };
574
575 enum TextEmphasisFill { TextEmphasisFillFilled, TextEmphasisFillOpen };
576
577 enum TextEmphasisMark { TextEmphasisMarkNone, TextEmphasisMarkAuto, TextEmphasisMarkDot, TextEmphasisMarkCircle, TextEmphasisMarkDoubleCircle, TextEmphasisMarkTriangle, TextEmphasisMarkSesame, TextEmphasisMarkCustom };
578
579 enum TextEmphasisPositions {
580     TextEmphasisPositionOver = 1 << 0,
581     TextEmphasisPositionUnder = 1 << 1,
582     TextEmphasisPositionLeft = 1 << 2,
583     TextEmphasisPositionRight = 1 << 3
584 };
585 typedef unsigned TextEmphasisPosition;
586
587 enum TextOrientation { TextOrientationVerticalRight, TextOrientationUpright, TextOrientationSideways, TextOrientationSidewaysRight };
588
589 enum TextOverflow { TextOverflowClip = 0, TextOverflowEllipsis };
590
591 enum EImageRendering { ImageRenderingAuto = 0, ImageRenderingOptimizeSpeed, ImageRenderingOptimizeQuality, ImageRenderingCrispEdges };
592
593 enum ImageResolutionSource { ImageResolutionSpecified = 0, ImageResolutionFromImage };
594
595 enum ImageResolutionSnap { ImageResolutionNoSnap = 0, ImageResolutionSnapPixels };
596
597 enum Order { LogicalOrder = 0, VisualOrder };
598
599 enum RegionFragment { AutoRegionFragment, BreakRegionFragment };
600
601 enum ColumnAxis { HorizontalColumnAxis, VerticalColumnAxis, AutoColumnAxis };
602
603 enum ColumnProgression { NormalColumnProgression, ReverseColumnProgression };
604
605 enum LineSnap { LineSnapNone, LineSnapBaseline, LineSnapContain };
606
607 enum LineAlign { LineAlignNone, LineAlignEdges };
608
609 enum RubyPosition { RubyPositionBefore, RubyPositionAfter, RubyPositionInterCharacter };
610
611 #if ENABLE(CSS_GRID_LAYOUT)
612 static const size_t GridAutoFlowBits = 4;
613 enum InternalGridAutoFlowAlgorithm {
614     InternalAutoFlowAlgorithmSparse = 0x1,
615     InternalAutoFlowAlgorithmDense = 0x2,
616 };
617
618 enum InternalGridAutoFlowDirection {
619     InternalAutoFlowDirectionRow = 0x4,
620     InternalAutoFlowDirectionColumn = 0x8
621 };
622
623 enum GridAutoFlow {
624     AutoFlowRow = InternalAutoFlowAlgorithmSparse | InternalAutoFlowDirectionRow,
625     AutoFlowColumn = InternalAutoFlowAlgorithmSparse | InternalAutoFlowDirectionColumn,
626     AutoFlowRowDense = InternalAutoFlowAlgorithmDense | InternalAutoFlowDirectionRow,
627     AutoFlowColumnDense = InternalAutoFlowAlgorithmDense | InternalAutoFlowDirectionColumn
628 };
629 #endif
630
631 // Reasonable maximum to prevent insane font sizes from causing crashes on some platforms (such as Windows).
632 static const float maximumAllowedFontSize = 1000000.0f;
633
634 #if ENABLE(CSS3_TEXT)
635 enum TextIndentLine { TextIndentFirstLine, TextIndentEachLine };
636 enum TextIndentType { TextIndentNormal, TextIndentHanging };
637 #endif
638
639 enum Isolation { IsolationAuto, IsolationIsolate };
640
641 // Fill, Stroke, ViewBox are just used for SVG.
642 enum CSSBoxType { BoxMissing = 0, MarginBox, BorderBox, PaddingBox, ContentBox, Fill, Stroke, ViewBox };
643
644 #if ENABLE(CSS_SCROLL_SNAP)
645 enum class ScrollSnapType {
646     None,
647     Proximity,
648     Mandatory
649 };
650 #endif
651
652 #if ENABLE(CSS_TRAILING_WORD)
653 enum class TrailingWord {
654     Auto,
655     PartiallyBalanced
656 };
657 #endif
658
659 } // namespace WebCore
660
661 #endif // RenderStyleConstants_h