bf1c21eac3d793ae5d303638015bfd9b7748a796
[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 WTF {
31 class TextStream;
32 }
33
34 namespace WebCore {
35
36 static const size_t PrintColorAdjustBits = 1;
37 enum class PrintColorAdjust : uint8_t {
38     Economy,
39     Exact
40 };
41
42 // The difference between two styles.  The following values are used:
43 // - StyleDifference::Equal - The two styles are identical
44 // - StyleDifference::RecompositeLayer - The layer needs its position and transform updated, but no repaint
45 // - StyleDifference::Repaint - The object just needs to be repainted.
46 // - StyleDifference::RepaintIfTextOrBorderOrOutline - The object needs to be repainted if it contains text or a border or outline.
47 // - StyleDifference::RepaintLayer - The layer and its descendant layers needs to be repainted.
48 // - StyleDifference::LayoutPositionedMovementOnly - Only the position of this positioned object has been updated
49 // - StyleDifference::SimplifiedLayout - Only overflow needs to be recomputed
50 // - StyleDifference::SimplifiedLayoutAndPositionedMovement - Both positioned movement and simplified layout updates are required.
51 // - StyleDifference::Layout - A full layout is required.
52 enum class StyleDifference {
53     Equal,
54     RecompositeLayer,
55     Repaint,
56     RepaintIfTextOrBorderOrOutline,
57     RepaintLayer,
58     LayoutPositionedMovementOnly,
59     SimplifiedLayout,
60     SimplifiedLayoutAndPositionedMovement,
61     Layout,
62     NewStyle
63 };
64
65 // When some style properties change, different amounts of work have to be done depending on
66 // context (e.g. whether the property is changing on an element which has a compositing layer).
67 // A simple StyleDifference does not provide enough information so we return a bit mask of
68 // StyleDifferenceContextSensitiveProperties from RenderStyle::diff() too.
69 enum class StyleDifferenceContextSensitiveProperty {
70     None        = 0,
71     Transform   = 1 << 0,
72     Opacity     = 1 << 1,
73     Filter      = 1 << 2,
74     ClipRect    = 1 << 3,
75     ClipPath    = 1 << 4,
76     WillChange  = 1 << 5,
77 };
78
79 // Static pseudo styles. Dynamic ones are produced on the fly.
80 enum class PseudoId : uint8_t {
81     // The order must be None, public IDs, and then internal IDs.
82     None,
83
84     // Public:
85     FirstLine,
86     FirstLetter,
87     Marker,
88     Before,
89     After,
90     Selection,
91     Scrollbar,
92
93     // Internal:
94     ScrollbarThumb,
95     ScrollbarButton,
96     ScrollbarTrack,
97     ScrollbarTrackPiece,
98     ScrollbarCorner,
99     Resizer,
100
101     AfterLastInternalPseudoId,
102
103     FirstPublicPseudoId = FirstLine,
104     FirstInternalPseudoId = ScrollbarThumb,
105     PublicPseudoIdMask = ((1 << FirstInternalPseudoId) - 1) & ~((1 << FirstPublicPseudoId) - 1)
106 };
107
108 class PseudoIdSet {
109 public:
110     PseudoIdSet()
111         : m_data(0)
112     {
113     }
114
115     PseudoIdSet(std::initializer_list<PseudoId> initializerList)
116         : m_data(0)
117     {
118         for (PseudoId pseudoId : initializerList)
119             add(pseudoId);
120     }
121
122     static PseudoIdSet fromMask(unsigned rawPseudoIdSet)
123     {
124         return PseudoIdSet(rawPseudoIdSet);
125     }
126
127     bool has(PseudoId pseudoId) const
128     {
129         ASSERT((sizeof(m_data) * 8) > static_cast<unsigned>(pseudoId));
130         return m_data & (1U << static_cast<unsigned>(pseudoId));
131     }
132
133     void add(PseudoId pseudoId)
134     {
135         ASSERT((sizeof(m_data) * 8) > static_cast<unsigned>(pseudoId));
136         m_data |= (1U << static_cast<unsigned>(pseudoId));
137     }
138
139     void merge(PseudoIdSet source)
140     {
141         m_data |= source.m_data;
142     }
143
144     PseudoIdSet operator &(const PseudoIdSet& pseudoIdSet) const
145     {
146         return PseudoIdSet(m_data & pseudoIdSet.m_data);
147     }
148
149     PseudoIdSet operator |(const PseudoIdSet& pseudoIdSet) const
150     {
151         return PseudoIdSet(m_data | pseudoIdSet.m_data);
152     }
153
154     explicit operator bool() const
155     {
156         return m_data;
157     }
158
159     unsigned data() const { return m_data; }
160
161     static ptrdiff_t dataMemoryOffset() { return OBJECT_OFFSETOF(PseudoIdSet, m_data); }
162
163 private:
164     explicit PseudoIdSet(unsigned rawPseudoIdSet)
165         : m_data(rawPseudoIdSet)
166     {
167     }
168
169     unsigned m_data;
170 };
171
172 enum class ColumnFill : uint8_t {
173     Balance,
174     Auto
175 };
176
177 enum class ColumnSpan : uint8_t {
178     None = 0,
179     All
180 };
181
182 enum class BorderCollapse : uint8_t {
183     Separate = 0,
184     Collapse
185 };
186
187 // These have been defined in the order of their precedence for border-collapsing. Do
188 // not change this order! This order also must match the order in CSSValueKeywords.in.
189 enum class BorderStyle : uint8_t {
190     None,
191     Hidden,
192     Inset,
193     Groove,
194     Outset,
195     Ridge,
196     Dotted,
197     Dashed,
198     Solid,
199     Double
200 };
201
202 enum class BorderPrecedence : uint8_t {
203     Off,
204     Table,
205     ColumnGroup,
206     Column,
207     RowGroup,
208     Row,
209     Cell
210 };
211
212 enum class OutlineIsAuto : uint8_t {
213     Off = 0,
214     On
215 };
216
217 enum class PositionType : uint8_t {
218     Static = 0,
219     Relative = 1,
220     Absolute = 2,
221     Sticky = 3,
222     // This value is required to pack our bits efficiently in RenderObject.
223     Fixed = 6
224 };
225
226 enum class Float : uint8_t {
227     No,
228     Left,
229     Right
230 };
231
232 enum class MarginCollapse : uint8_t {
233     Collapse,
234     Separate,
235     Discard
236 };
237
238 // Box decoration attributes. Not inherited.
239
240 enum class BoxDecorationBreak : uint8_t {
241     Slice,
242     Clone
243 };
244
245 // Box attributes. Not inherited.
246
247 enum class BoxSizing : uint8_t {
248     ContentBox,
249     BorderBox
250 };
251
252 // Random visual rendering model attributes. Not inherited.
253
254 enum class Overflow : uint8_t {
255     Visible,
256     Hidden,
257     Scroll,
258     Auto,
259     Overlay,
260     PagedX,
261     PagedY
262 };
263
264 enum class VerticalAlign : uint8_t {
265     Baseline,
266     Middle,
267     Sub,
268     Super,
269     TextTop,
270     TextBottom,
271     Top,
272     Bottom,
273     BaselineMiddle,
274     Length
275 };
276
277 enum class Clear : uint8_t {
278     None = 0,
279     Left = 1,
280     Right = 2,
281     Both = 3
282 };
283
284 enum class TableLayoutType : uint8_t {
285     Auto,
286     Fixed
287 };
288
289 enum class TextCombine : uint8_t {
290     None,
291     Horizontal
292 };
293
294 enum class FillAttachment : uint8_t {
295     ScrollBackground,
296     LocalBackground,
297     FixedBackground
298 };
299
300 enum class FillBox : uint8_t {
301     Border,
302     Padding,
303     Content,
304     Text
305 };
306
307 enum class FillRepeat : uint8_t {
308     Repeat,
309     NoRepeat,
310     Round,
311     Space
312 };
313
314 enum class FillLayerType : uint8_t {
315     Background,
316     Mask
317 };
318
319 // CSS3 Background Values
320 enum class FillSizeType : uint8_t {
321     Contain,
322     Cover,
323     Size,
324     None
325 };
326
327 // CSS3 <position>
328 enum class Edge : uint8_t {
329     Top,
330     Right,
331     Bottom,
332     Left
333 };
334
335 // CSS3 Mask Source Types
336
337 enum class MaskSourceType : uint8_t {
338     Alpha,
339     Luminance
340 };
341
342 // CSS3 Marquee Properties
343
344 enum class MarqueeBehavior : uint8_t {
345     None,
346     Scroll,
347     Slide,
348     Alternate
349 };
350
351 enum class MarqueeDirection : uint8_t {
352     Auto,
353     Left,
354     Right,
355     Up,
356     Down,
357     Forward,
358     Backward
359 };
360
361 // Deprecated Flexible Box Properties
362
363 enum class BoxPack : uint8_t {
364     Start,
365     Center,
366     End,
367     Justify
368 };
369
370 enum class BoxAlignment : uint8_t {
371     Stretch,
372     Start,
373     Center,
374     End,
375     Baseline
376 };
377
378 enum class BoxOrient : uint8_t {
379     Horizontal,
380     Vertical
381 };
382
383 enum class BoxLines : uint8_t {
384     Single,
385     Multiple
386 };
387
388 enum class BoxDirection : uint8_t {
389     Normal,
390     Reverse
391 };
392
393 // CSS3 Flexbox Properties
394
395 enum class AlignContent : uint8_t {
396     FlexStart,
397     FlexEnd,
398     Center,
399     SpaceBetween,
400     SpaceAround,
401     Stretch
402 };
403
404 enum class FlexDirection : uint8_t {
405     Row,
406     RowReverse,
407     Column,
408     ColumnReverse
409 };
410
411 enum class FlexWrap : uint8_t {
412     NoWrap,
413     Wrap,
414     Reverse
415 };
416
417 enum class ItemPosition : uint8_t {
418     Legacy,
419     Auto,
420     Normal,
421     Stretch,
422     Baseline,
423     LastBaseline,
424     Center,
425     Start,
426     End,
427     SelfStart,
428     SelfEnd,
429     FlexStart,
430     FlexEnd,
431     Left,
432     Right
433 };
434
435 enum class OverflowAlignment : uint8_t {
436     Default,
437     Unsafe,
438     Safe
439 };
440
441 enum class ItemPositionType : uint8_t {
442     NonLegacy,
443     Legacy
444 };
445
446 enum class ContentPosition : uint8_t {
447     Normal,
448     Baseline,
449     LastBaseline,
450     Center,
451     Start,
452     End,
453     FlexStart,
454     FlexEnd,
455     Left,
456     Right
457 };
458
459 enum class ContentDistribution : uint8_t {
460     Default,
461     SpaceBetween,
462     SpaceAround,
463     SpaceEvenly,
464     Stretch
465 };
466
467
468 enum class TextSecurity : uint8_t {
469     None,
470     Disc,
471     Circle,
472     Square
473 };
474
475 // CSS3 User Modify Properties
476
477 enum class UserModify : uint8_t {
478     ReadOnly,
479     ReadWrite,
480     ReadWritePlaintextOnly
481 };
482
483 // CSS3 User Drag Values
484
485 enum class UserDrag : uint8_t {
486     Auto,
487     None,
488     Element
489 };
490
491 // CSS3 User Select Values
492
493 enum class UserSelect : uint8_t {
494     None,
495     Text,
496     All
497 };
498
499 // CSS3 Image Values
500 enum class ObjectFit : uint8_t {
501     Fill,
502     Contain,
503     Cover,
504     None,
505     ScaleDown
506 };
507
508 enum class AspectRatioType : uint8_t {
509     Auto,
510     FromIntrinsic,
511     FromDimensions,
512     Specified
513 };
514
515 enum class WordBreak : uint8_t {
516     Normal,
517     BreakAll,
518     KeepAll,
519     BreakWord
520 };
521
522 enum class OverflowWrap : uint8_t {
523     Normal,
524     Break
525 };
526
527 enum class NBSPMode : uint8_t {
528     Normal,
529     Space
530 };
531
532 enum class LineBreak : uint8_t {
533     Auto,
534     Loose,
535     Normal,
536     Strict,
537     AfterWhiteSpace
538 };
539
540 enum class Resize : uint8_t {
541     None,
542     Both,
543     Horizontal,
544     Vertical
545 };
546
547 // The order of this enum must match the order of the list style types in CSSValueKeywords.in.
548 enum class ListStyleType : uint8_t {
549     Disc,
550     Circle,
551     Square,
552     Decimal,
553     DecimalLeadingZero,
554     ArabicIndic,
555     Binary,
556     Bengali,
557     Cambodian,
558     Khmer,
559     Devanagari,
560     Gujarati,
561     Gurmukhi,
562     Kannada,
563     LowerHexadecimal,
564     Lao,
565     Malayalam,
566     Mongolian,
567     Myanmar,
568     Octal,
569     Oriya,
570     Persian,
571     Urdu,
572     Telugu,
573     Tibetan,
574     Thai,
575     UpperHexadecimal,
576     LowerRoman,
577     UpperRoman,
578     LowerGreek,
579     LowerAlpha,
580     LowerLatin,
581     UpperAlpha,
582     UpperLatin,
583     Afar,
584     EthiopicHalehameAaEt,
585     EthiopicHalehameAaEr,
586     Amharic,
587     EthiopicHalehameAmEt,
588     AmharicAbegede,
589     EthiopicAbegedeAmEt,
590     CjkEarthlyBranch,
591     CjkHeavenlyStem,
592     Ethiopic,
593     EthiopicHalehameGez,
594     EthiopicAbegede,
595     EthiopicAbegedeGez,
596     HangulConsonant,
597     Hangul,
598     LowerNorwegian,
599     Oromo,
600     EthiopicHalehameOmEt,
601     Sidama,
602     EthiopicHalehameSidEt,
603     Somali,
604     EthiopicHalehameSoEt,
605     Tigre,
606     EthiopicHalehameTig,
607     TigrinyaEr,
608     EthiopicHalehameTiEr,
609     TigrinyaErAbegede,
610     EthiopicAbegedeTiEr,
611     TigrinyaEt,
612     EthiopicHalehameTiEt,
613     TigrinyaEtAbegede,
614     EthiopicAbegedeTiEt,
615     UpperGreek,
616     UpperNorwegian,
617     Asterisks,
618     Footnotes,
619     Hebrew,
620     Armenian,
621     LowerArmenian,
622     UpperArmenian,
623     Georgian,
624     CJKIdeographic,
625     Hiragana,
626     Katakana,
627     HiraganaIroha,
628     KatakanaIroha,
629     None
630 };
631
632 enum class QuoteType : uint8_t {
633     OpenQuote,
634     CloseQuote,
635     NoOpenQuote,
636     NoCloseQuote
637 };
638
639 enum class BorderFit : uint8_t {
640     Border,
641     Lines
642 };
643
644 enum class AnimationFillMode : uint8_t {
645     None,
646     Forwards,
647     Backwards,
648     Both
649 };
650
651 enum class AnimationPlayState : uint8_t {
652     Playing = 0x0,
653     Paused = 0x1
654 };
655
656 enum class WhiteSpace : uint8_t {
657     Normal,
658     Pre,
659     PreWrap,
660     PreLine,
661     NoWrap,
662     KHTMLNoWrap
663 };
664
665 // The order of this enum must match the order of the text align values in CSSValueKeywords.in.
666 enum class TextAlignMode : uint8_t {
667     Left,
668     Right,
669     Center,
670     Justify,
671     WebKitLeft,
672     WebKitRight,
673     WebKitCenter,
674     Start,
675     End,
676 };
677
678 enum class TextTransform : uint8_t {
679     Capitalize,
680     Uppercase,
681     Lowercase,
682     None
683 };
684
685 #if ENABLE(LETTERPRESS)
686 static const size_t TextDecorationBits = 5;
687 #else
688 static const size_t TextDecorationBits = 4;
689 #endif
690 enum class TextDecoration : uint8_t {
691     None          = 0,
692     Underline     = 1 << 0,
693     Overline      = 1 << 1,
694     LineThrough   = 1 << 2,
695     Blink         = 1 << 3,
696 #if ENABLE(LETTERPRESS)
697     Letterpress   = 1 << 4,
698 #endif
699 };
700
701 enum class TextDecorationStyle : uint8_t {
702     Solid,
703     Double,
704     Dotted,
705     Dashed,
706     Wavy
707 };
708
709 #if ENABLE(CSS3_TEXT)
710 enum class TextAlignLast : uint8_t {
711     Auto,
712     Start,
713     End,
714     Left,
715     Right,
716     Center,
717     Justify
718 };
719
720 enum class TextJustify : uint8_t {
721     Auto,
722     None,
723     InterWord,
724     Distribute
725 };
726 #endif // CSS3_TEXT
727
728 enum class TextDecorationSkip : uint8_t {
729     None      = 0,
730     Ink       = 1 << 0,
731     Objects   = 1 << 1,
732     Auto      = 1 << 2
733 };
734
735 // FIXME: There is no reason for the values in the enum to be powers of two.
736 enum class TextUnderlinePosition : uint8_t {
737     // FIXME: Implement support for 'under left' and 'under right' values.
738     Auto       = 1 << 0,
739     Alphabetic = 1 << 1,
740     Under      = 1 << 2
741 };
742
743 enum class TextZoom : uint8_t {
744     Normal,
745     Reset
746 };
747
748 enum class BreakBetween : uint8_t {
749     Auto,
750     Avoid,
751     AvoidColumn,
752     AvoidPage,
753     Column,
754     Page,
755     LeftPage,
756     RightPage,
757     RectoPage,
758     VersoPage
759 };
760 bool alwaysPageBreak(BreakBetween);
761     
762 enum class BreakInside : uint8_t {
763     Auto,
764     Avoid,
765     AvoidColumn,
766     AvoidPage
767 };
768
769 enum class HangingPunctuation : uint8_t {
770     None      = 0,
771     First     = 1 << 0,
772     Last      = 1 << 1,
773     AllowEnd  = 1 << 2,
774     ForceEnd  = 1 << 3
775 };
776
777 enum class EmptyCell : uint8_t {
778     Show,
779     Hide
780 };
781
782 enum class CaptionSide : uint8_t {
783     Top,
784     Bottom,
785     Left,
786     Right
787 };
788
789 enum class ListStylePosition : uint8_t {
790     Outside,
791     Inside
792 };
793
794 enum class Visibility : uint8_t {
795     Visible,
796     Hidden,
797     Collapse
798 };
799
800 WTF::TextStream& operator<<(WTF::TextStream&, Visibility);
801
802 enum class CursorType : uint8_t {
803     // The following must match the order in CSSValueKeywords.in.
804     Auto,
805     Default,
806     // None
807     ContextMenu,
808     Help,
809     Pointer,
810     Progress,
811     Wait,
812     Cell,
813     Crosshair,
814     Text,
815     VerticalText,
816     Alias,
817     // Copy
818     Move,
819     NoDrop,
820     NotAllowed,
821     Grab,
822     Grabbing,
823     EResize,
824     NResize,
825     NEResize,
826     NWResize,
827     SResize,
828     SEResize,
829     SWResize,
830     WResize,
831     EWResize,
832     NSResize,
833     NESWResize,
834     NWSEResize,
835     ColumnResize,
836     RowResize,
837     AllScroll,
838     ZoomIn,
839     ZoomOut,
840
841     // The following are handled as exceptions so don't need to match.
842     Copy,
843     None
844 };
845
846 #if ENABLE(CURSOR_VISIBILITY)
847 enum class CursorVisibility : uint8_t {
848     Auto,
849     AutoHide,
850 };
851 #endif
852
853 // The order of this enum must match the order of the display values in CSSValueKeywords.in.
854 enum class DisplayType : uint8_t {
855     Inline,
856     Block,
857     ListItem,
858     Compact,
859     InlineBlock,
860     Table,
861     InlineTable,
862     TableRowGroup,
863     TableHeaderGroup,
864     TableFooterGroup,
865     TableRow,
866     TableColumnGroup,
867     TableColumn,
868     TableCell,
869     TableCaption,
870     Box,
871     InlineBox,
872     Flex,
873     WebKitFlex,
874     InlineFlex,
875     WebKitInlineFlex,
876     Contents,
877     Grid,
878     InlineGrid,
879     None
880 };
881
882 enum class InsideLink : uint8_t {
883     NotInside,
884     InsideUnvisited,
885     InsideVisited
886 };
887     
888 enum class PointerEvents : uint8_t {
889     None,
890     Auto,
891     Stroke,
892     Fill,
893     Painted,
894     Visible,
895     VisibleStroke,
896     VisibleFill,
897     VisiblePainted,
898     All
899 };
900
901 enum class TransformStyle3D : uint8_t {
902     Flat,
903     Preserve3D
904 };
905
906 enum class BackfaceVisibility : uint8_t {
907     Visible,
908     Hidden
909 };
910
911 enum class TransformBox : uint8_t {
912     BorderBox,
913     FillBox,
914     ViewBox
915 };
916
917 enum class LineClamp : uint8_t {
918     LineCount,
919     Percentage
920 };
921
922 enum class Hyphens : uint8_t {
923     None,
924     Manual,
925     Auto
926 };
927
928 enum class SpeakAs : uint8_t {
929     Normal             = 0,
930     SpellOut           = 1 << 0,
931     Digits             = 1 << 1,
932     LiteralPunctuation = 1 << 2,
933     NoPunctuation      = 1 << 3
934 };
935
936 enum class TextEmphasisFill : uint8_t {
937     Filled,
938     Open
939 };
940
941 enum class TextEmphasisMark : uint8_t {
942     None,
943     Auto,
944     Dot,
945     Circle,
946     DoubleCircle,
947     Triangle,
948     Sesame,
949     Custom
950 };
951
952 enum class TextEmphasisPosition : uint8_t {
953     Over  = 1 << 0,
954     Under = 1 << 1,
955     Left  = 1 << 2,
956     Right = 1 << 3
957 };
958
959 enum class TextOrientation : uint8_t {
960     Mixed,
961     Upright,
962     Sideways
963 };
964
965 enum class TextOverflow : uint8_t {
966     Clip = 0,
967     Ellipsis
968 };
969
970 enum class ImageRendering : uint8_t {
971     Auto = 0,
972     OptimizeSpeed,
973     OptimizeQuality,
974     CrispEdges,
975     Pixelated
976 };
977
978 WTF::TextStream& operator<<(WTF::TextStream&, ImageRendering);
979
980 enum class ImageResolutionSource : uint8_t {
981     Specified = 0,
982     FromImage
983 };
984
985 enum class ImageResolutionSnap : uint8_t {
986     None = 0,
987     Pixels
988 };
989
990 enum class Order : uint8_t {
991     Logical = 0,
992     Visual
993 };
994
995 enum class ColumnAxis : uint8_t {
996     Horizontal,
997     Vertical,
998     Auto
999 };
1000
1001 enum class ColumnProgression : uint8_t {
1002     Normal,
1003     Reverse
1004 };
1005
1006 enum class LineSnap : uint8_t {
1007     None,
1008     Baseline,
1009     Contain
1010 };
1011
1012 enum class LineAlign : uint8_t {
1013     None,
1014     Edges
1015 };
1016
1017 enum class RubyPosition : uint8_t {
1018     Before,
1019     After,
1020     InterCharacter
1021 };
1022
1023 static const size_t GridAutoFlowBits = 4;
1024 enum InternalGridAutoFlowAlgorithm {
1025     InternalAutoFlowAlgorithmSparse = 1 << 0,
1026     InternalAutoFlowAlgorithmDense  = 1 << 1,
1027 };
1028
1029 enum InternalGridAutoFlowDirection {
1030     InternalAutoFlowDirectionRow    = 1 << 2,
1031     InternalAutoFlowDirectionColumn = 1 << 3
1032 };
1033
1034 enum GridAutoFlow {
1035     AutoFlowRow = InternalAutoFlowAlgorithmSparse | InternalAutoFlowDirectionRow,
1036     AutoFlowColumn = InternalAutoFlowAlgorithmSparse | InternalAutoFlowDirectionColumn,
1037     AutoFlowRowDense = InternalAutoFlowAlgorithmDense | InternalAutoFlowDirectionRow,
1038     AutoFlowColumnDense = InternalAutoFlowAlgorithmDense | InternalAutoFlowDirectionColumn
1039 };
1040
1041 enum class AutoRepeatType : uint8_t {
1042     None,
1043     Fill,
1044     Fit
1045 };
1046
1047 // Reasonable maximum to prevent insane font sizes from causing crashes on some platforms (such as Windows).
1048 static const float maximumAllowedFontSize = 1000000.0f;
1049
1050 #if ENABLE(CSS3_TEXT)
1051
1052 enum class TextIndentLine : uint8_t {
1053     FirstLine,
1054     EachLine
1055 };
1056
1057 enum class TextIndentType : uint8_t {
1058     Normal,
1059     Hanging
1060 };
1061
1062 #endif
1063
1064 enum class Isolation : uint8_t {
1065     Auto,
1066     Isolate
1067 };
1068
1069 // Fill, Stroke, ViewBox are just used for SVG.
1070 enum class CSSBoxType : uint8_t {
1071     BoxMissing = 0,
1072     MarginBox,
1073     BorderBox,
1074     PaddingBox,
1075     ContentBox,
1076     FillBox,
1077     StrokeBox,
1078     ViewBox
1079 };
1080
1081 #if ENABLE(TOUCH_EVENTS)
1082 enum class TouchAction : uint8_t {
1083     Auto,
1084     Manipulation
1085 };
1086 #endif
1087
1088 #if ENABLE(CSS_SCROLL_SNAP)
1089 enum class ScrollSnapStrictness : uint8_t {
1090     None,
1091     Proximity,
1092     Mandatory
1093 };
1094
1095 enum class ScrollSnapAxis : uint8_t {
1096     XAxis,
1097     YAxis,
1098     Block,
1099     Inline,
1100     Both
1101 };
1102
1103 enum class ScrollSnapAxisAlignType : uint8_t {
1104     None,
1105     Start,
1106     Center,
1107     End
1108 };
1109 #endif
1110
1111 #if ENABLE(CSS_TRAILING_WORD)
1112 enum class TrailingWord : uint8_t {
1113     Auto,
1114     PartiallyBalanced
1115 };
1116 #endif
1117
1118 #if ENABLE(APPLE_PAY)
1119 enum class ApplePayButtonStyle : uint8_t {
1120     White,
1121     WhiteOutline,
1122     Black,
1123 };
1124
1125 enum class ApplePayButtonType : uint8_t {
1126     Plain,
1127     Buy,
1128     SetUp,
1129     Donate,
1130 };
1131 #endif
1132
1133 WTF::TextStream& operator<<(WTF::TextStream&, FillSizeType);
1134 WTF::TextStream& operator<<(WTF::TextStream&, FillAttachment);
1135 WTF::TextStream& operator<<(WTF::TextStream&, FillBox);
1136 WTF::TextStream& operator<<(WTF::TextStream&, FillRepeat);
1137 WTF::TextStream& operator<<(WTF::TextStream&, MaskSourceType);
1138 WTF::TextStream& operator<<(WTF::TextStream&, Edge);
1139
1140 // These are all minimized combinations of paint-order.
1141 enum class PaintOrder : uint8_t {
1142     Normal,
1143     Fill,
1144     FillMarkers,
1145     Stroke,
1146     StrokeMarkers,
1147     Markers,
1148     MarkersStroke
1149 };
1150
1151 enum class PaintType : uint8_t {
1152     Fill,
1153     Stroke,
1154     Markers
1155 };
1156
1157 enum class FontLoadingBehavior : uint8_t {
1158     Auto,
1159     Block,
1160     Swap,
1161     Fallback,
1162     Optional
1163 };
1164
1165 extern const float defaultMiterLimit;
1166
1167 } // namespace WebCore