Unprefix CSS cursor values grab and grabbing
[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     CursorDefault,
512     // CursorNone
513     CursorContextMenu,
514     CursorHelp,
515     CursorPointer,
516     CursorProgress,
517     CursorWait,
518     CursorCell,
519     CursorCrosshair,
520     CursorText,
521     CursorVerticalText,
522     CursorAlias,
523     // CursorCopy
524     CursorMove,
525     CursorNoDrop,
526     CursorNotAllowed,
527     CursorGrab,
528     CursorGrabbing,
529     CursorEResize,
530     CursorNResize,
531     CursorNeResize,
532     CursorNwResize,
533     CursorSResize,
534     CursorSeResize,
535     CursorSwResize,
536     CursorWResize,
537     CursorEwResize,
538     CursorNsResize,
539     CursorNeswResize,
540     CursorNwseResize,
541     CursorColResize,
542     CursorRowResize,
543     CursorAllScroll,
544     CursorZoomIn,
545     CursorZoomOut,
546
547     // The following are handled as exceptions so don't need to match.
548     CursorCopy,
549     CursorNone
550 };
551
552 #if ENABLE(CURSOR_VISIBILITY)
553 enum CursorVisibility {
554     CursorVisibilityAuto,
555     CursorVisibilityAutoHide,
556 };
557 #endif
558
559 // The order of this enum must match the order of the display values in CSSValueKeywords.in.
560 enum EDisplay {
561     INLINE, BLOCK, LIST_ITEM, COMPACT, INLINE_BLOCK,
562     TABLE, INLINE_TABLE, TABLE_ROW_GROUP,
563     TABLE_HEADER_GROUP, TABLE_FOOTER_GROUP, TABLE_ROW,
564     TABLE_COLUMN_GROUP, TABLE_COLUMN, TABLE_CELL,
565     TABLE_CAPTION, BOX, INLINE_BOX,
566     FLEX, WEBKIT_FLEX, INLINE_FLEX, WEBKIT_INLINE_FLEX,
567     CONTENTS, GRID, INLINE_GRID, NONE
568 };
569
570 enum EInsideLink {
571     NotInsideLink, InsideUnvisitedLink, InsideVisitedLink
572 };
573     
574 enum EPointerEvents {
575     PE_NONE, PE_AUTO, PE_STROKE, PE_FILL, PE_PAINTED, PE_VISIBLE,
576     PE_VISIBLE_STROKE, PE_VISIBLE_FILL, PE_VISIBLE_PAINTED, PE_ALL
577 };
578
579 enum ETransformStyle3D {
580     TransformStyle3DFlat, TransformStyle3DPreserve3D
581 };
582
583 enum EBackfaceVisibility {
584     BackfaceVisibilityVisible, BackfaceVisibilityHidden
585 };
586     
587 enum ELineClampType { LineClampLineCount, LineClampPercentage };
588
589 enum Hyphens { HyphensNone, HyphensManual, HyphensAuto };
590
591 enum ESpeak { SpeakNone, SpeakNormal, SpeakSpellOut, SpeakDigits, SpeakLiteralPunctuation, SpeakNoPunctuation };
592
593 enum TextEmphasisFill { TextEmphasisFillFilled, TextEmphasisFillOpen };
594
595 enum TextEmphasisMark { TextEmphasisMarkNone, TextEmphasisMarkAuto, TextEmphasisMarkDot, TextEmphasisMarkCircle, TextEmphasisMarkDoubleCircle, TextEmphasisMarkTriangle, TextEmphasisMarkSesame, TextEmphasisMarkCustom };
596
597 enum TextEmphasisPositions {
598     TextEmphasisPositionOver = 1 << 0,
599     TextEmphasisPositionUnder = 1 << 1,
600     TextEmphasisPositionLeft = 1 << 2,
601     TextEmphasisPositionRight = 1 << 3
602 };
603 typedef unsigned TextEmphasisPosition;
604
605 enum class TextOrientation { Mixed, Upright, Sideways };
606
607 enum TextOverflow { TextOverflowClip = 0, TextOverflowEllipsis };
608
609 enum EImageRendering {
610     ImageRenderingAuto = 0,
611     ImageRenderingOptimizeSpeed,
612     ImageRenderingOptimizeQuality,
613     ImageRenderingCrispEdges,
614     ImageRenderingPixelated
615 };
616
617 enum ImageResolutionSource { ImageResolutionSpecified = 0, ImageResolutionFromImage };
618
619 enum ImageResolutionSnap { ImageResolutionNoSnap = 0, ImageResolutionSnapPixels };
620
621 enum Order { LogicalOrder = 0, VisualOrder };
622
623 enum RegionFragment { AutoRegionFragment, BreakRegionFragment };
624
625 enum ColumnAxis { HorizontalColumnAxis, VerticalColumnAxis, AutoColumnAxis };
626
627 enum ColumnProgression { NormalColumnProgression, ReverseColumnProgression };
628
629 enum LineSnap { LineSnapNone, LineSnapBaseline, LineSnapContain };
630
631 enum LineAlign { LineAlignNone, LineAlignEdges };
632
633 enum RubyPosition { RubyPositionBefore, RubyPositionAfter, RubyPositionInterCharacter };
634
635 static const size_t GridAutoFlowBits = 4;
636 enum InternalGridAutoFlowAlgorithm {
637     InternalAutoFlowAlgorithmSparse = 0x1,
638     InternalAutoFlowAlgorithmDense = 0x2,
639 };
640
641 enum InternalGridAutoFlowDirection {
642     InternalAutoFlowDirectionRow = 0x4,
643     InternalAutoFlowDirectionColumn = 0x8
644 };
645
646 enum GridAutoFlow {
647     AutoFlowRow = InternalAutoFlowAlgorithmSparse | InternalAutoFlowDirectionRow,
648     AutoFlowColumn = InternalAutoFlowAlgorithmSparse | InternalAutoFlowDirectionColumn,
649     AutoFlowRowDense = InternalAutoFlowAlgorithmDense | InternalAutoFlowDirectionRow,
650     AutoFlowColumnDense = InternalAutoFlowAlgorithmDense | InternalAutoFlowDirectionColumn
651 };
652
653 enum AutoRepeatType {
654     NoAutoRepeat,
655     AutoFill,
656     AutoFit
657 };
658
659 // Reasonable maximum to prevent insane font sizes from causing crashes on some platforms (such as Windows).
660 static const float maximumAllowedFontSize = 1000000.0f;
661
662 #if ENABLE(CSS3_TEXT)
663 enum TextIndentLine { TextIndentFirstLine, TextIndentEachLine };
664 enum TextIndentType { TextIndentNormal, TextIndentHanging };
665 #endif
666
667 enum Isolation { IsolationAuto, IsolationIsolate };
668
669 // Fill, Stroke, ViewBox are just used for SVG.
670 enum CSSBoxType { BoxMissing = 0, MarginBox, BorderBox, PaddingBox, ContentBox, Fill, Stroke, ViewBox };
671
672 #if ENABLE(TOUCH_EVENTS)
673 enum class TouchAction {
674     Auto,
675     Manipulation
676 };
677 #endif
678
679 #if ENABLE(CSS_SCROLL_SNAP)
680 enum class ScrollSnapStrictness {
681     None,
682     Proximity,
683     Mandatory
684 };
685
686 enum class ScrollSnapAxis {
687     XAxis,
688     YAxis,
689     Block,
690     Inline,
691     Both
692 };
693
694 enum class ScrollSnapAxisAlignType {
695     None,
696     Start,
697     Center,
698     End
699 };
700 #endif
701
702 #if ENABLE(CSS_TRAILING_WORD)
703 enum class TrailingWord {
704     Auto,
705     PartiallyBalanced
706 };
707 #endif
708
709 #if ENABLE(APPLE_PAY)
710 enum class ApplePayButtonStyle {
711     White,
712     WhiteOutline,
713     Black,
714 };
715
716 enum class ApplePayButtonType {
717     Plain,
718     Buy,
719     SetUp,
720     Donate,
721 };
722 #endif
723
724 TextStream& operator<<(TextStream&, EFillSizeType);
725 TextStream& operator<<(TextStream&, EFillAttachment);
726 TextStream& operator<<(TextStream&, EFillBox);
727 TextStream& operator<<(TextStream&, EFillRepeat);
728 TextStream& operator<<(TextStream&, EMaskSourceType);
729 TextStream& operator<<(TextStream&, Edge);
730
731 // These are all minimized combinations of paint-order.
732 enum class PaintOrder {
733     Normal,
734     Fill,
735     FillMarkers,
736     Stroke,
737     StrokeMarkers,
738     Markers,
739     MarkersStroke
740 };
741
742 enum class PaintType {
743     Fill,
744     Stroke,
745     Markers
746 };
747
748 extern const float defaultMiterLimit;
749
750 } // namespace WebCore