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