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