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