Implement stroke-miterlimit.
[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, GRID, INLINE_GRID, NONE
566 };
567
568 enum EInsideLink {
569     NotInsideLink, InsideUnvisitedLink, InsideVisitedLink
570 };
571     
572 enum EPointerEvents {
573     PE_NONE, PE_AUTO, PE_STROKE, PE_FILL, PE_PAINTED, PE_VISIBLE,
574     PE_VISIBLE_STROKE, PE_VISIBLE_FILL, PE_VISIBLE_PAINTED, PE_ALL
575 };
576
577 enum ETransformStyle3D {
578     TransformStyle3DFlat, TransformStyle3DPreserve3D
579 };
580
581 enum EBackfaceVisibility {
582     BackfaceVisibilityVisible, BackfaceVisibilityHidden
583 };
584     
585 enum ELineClampType { LineClampLineCount, LineClampPercentage };
586
587 enum Hyphens { HyphensNone, HyphensManual, HyphensAuto };
588
589 enum ESpeak { SpeakNone, SpeakNormal, SpeakSpellOut, SpeakDigits, SpeakLiteralPunctuation, SpeakNoPunctuation };
590
591 enum TextEmphasisFill { TextEmphasisFillFilled, TextEmphasisFillOpen };
592
593 enum TextEmphasisMark { TextEmphasisMarkNone, TextEmphasisMarkAuto, TextEmphasisMarkDot, TextEmphasisMarkCircle, TextEmphasisMarkDoubleCircle, TextEmphasisMarkTriangle, TextEmphasisMarkSesame, TextEmphasisMarkCustom };
594
595 enum TextEmphasisPositions {
596     TextEmphasisPositionOver = 1 << 0,
597     TextEmphasisPositionUnder = 1 << 1,
598     TextEmphasisPositionLeft = 1 << 2,
599     TextEmphasisPositionRight = 1 << 3
600 };
601 typedef unsigned TextEmphasisPosition;
602
603 enum class TextOrientation { Mixed, Upright, Sideways };
604
605 enum TextOverflow { TextOverflowClip = 0, TextOverflowEllipsis };
606
607 enum EImageRendering {
608     ImageRenderingAuto = 0,
609     ImageRenderingOptimizeSpeed,
610     ImageRenderingOptimizeQuality,
611     ImageRenderingCrispEdges,
612     ImageRenderingPixelated
613 };
614
615 enum ImageResolutionSource { ImageResolutionSpecified = 0, ImageResolutionFromImage };
616
617 enum ImageResolutionSnap { ImageResolutionNoSnap = 0, ImageResolutionSnapPixels };
618
619 enum Order { LogicalOrder = 0, VisualOrder };
620
621 enum RegionFragment { AutoRegionFragment, BreakRegionFragment };
622
623 enum ColumnAxis { HorizontalColumnAxis, VerticalColumnAxis, AutoColumnAxis };
624
625 enum ColumnProgression { NormalColumnProgression, ReverseColumnProgression };
626
627 enum LineSnap { LineSnapNone, LineSnapBaseline, LineSnapContain };
628
629 enum LineAlign { LineAlignNone, LineAlignEdges };
630
631 enum RubyPosition { RubyPositionBefore, RubyPositionAfter, RubyPositionInterCharacter };
632
633 static const size_t GridAutoFlowBits = 4;
634 enum InternalGridAutoFlowAlgorithm {
635     InternalAutoFlowAlgorithmSparse = 0x1,
636     InternalAutoFlowAlgorithmDense = 0x2,
637 };
638
639 enum InternalGridAutoFlowDirection {
640     InternalAutoFlowDirectionRow = 0x4,
641     InternalAutoFlowDirectionColumn = 0x8
642 };
643
644 enum GridAutoFlow {
645     AutoFlowRow = InternalAutoFlowAlgorithmSparse | InternalAutoFlowDirectionRow,
646     AutoFlowColumn = InternalAutoFlowAlgorithmSparse | InternalAutoFlowDirectionColumn,
647     AutoFlowRowDense = InternalAutoFlowAlgorithmDense | InternalAutoFlowDirectionRow,
648     AutoFlowColumnDense = InternalAutoFlowAlgorithmDense | InternalAutoFlowDirectionColumn
649 };
650
651 enum AutoRepeatType {
652     NoAutoRepeat,
653     AutoFill,
654     AutoFit
655 };
656
657 // Reasonable maximum to prevent insane font sizes from causing crashes on some platforms (such as Windows).
658 static const float maximumAllowedFontSize = 1000000.0f;
659
660 #if ENABLE(CSS3_TEXT)
661 enum TextIndentLine { TextIndentFirstLine, TextIndentEachLine };
662 enum TextIndentType { TextIndentNormal, TextIndentHanging };
663 #endif
664
665 enum Isolation { IsolationAuto, IsolationIsolate };
666
667 // Fill, Stroke, ViewBox are just used for SVG.
668 enum CSSBoxType { BoxMissing = 0, MarginBox, BorderBox, PaddingBox, ContentBox, Fill, Stroke, ViewBox };
669
670 #if ENABLE(TOUCH_EVENTS)
671 enum class TouchAction {
672     Auto,
673     Manipulation
674 };
675 #endif
676
677 #if ENABLE(CSS_SCROLL_SNAP)
678 enum class ScrollSnapStrictness {
679     None,
680     Proximity,
681     Mandatory
682 };
683
684 enum class ScrollSnapAxis {
685     XAxis,
686     YAxis,
687     Block,
688     Inline,
689     Both
690 };
691
692 enum class ScrollSnapAxisAlignType {
693     None,
694     Start,
695     Center,
696     End
697 };
698 #endif
699
700 #if ENABLE(CSS_TRAILING_WORD)
701 enum class TrailingWord {
702     Auto,
703     PartiallyBalanced
704 };
705 #endif
706
707 #if ENABLE(APPLE_PAY)
708 enum class ApplePayButtonStyle {
709     White,
710     WhiteOutline,
711     Black,
712 };
713
714 enum class ApplePayButtonType {
715     Plain,
716     Buy,
717     SetUp,
718     Donate,
719 };
720 #endif
721
722 TextStream& operator<<(TextStream&, EFillSizeType);
723 TextStream& operator<<(TextStream&, EFillAttachment);
724 TextStream& operator<<(TextStream&, EFillBox);
725 TextStream& operator<<(TextStream&, EFillRepeat);
726 TextStream& operator<<(TextStream&, EMaskSourceType);
727 TextStream& operator<<(TextStream&, Edge);
728
729 // These are all minimized combinations of paint-order.
730 enum class PaintOrder {
731     Normal,
732     Fill,
733     FillMarkers,
734     Stroke,
735     StrokeMarkers,
736     Markers,
737     MarkersStroke
738 };
739
740 enum class PaintType {
741     Fill,
742     Stroke,
743     Markers
744 };
745
746 extern const float defaultMiterLimit;
747
748 } // namespace WebCore