1/*
2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
3 *           (C) 2000 Antti Koivisto (koivisto@kde.org)
4 *           (C) 2000 Dirk Mueller (mueller@kde.org)
5 * Copyright (C) 2003, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
6 * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com)
7 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
8 *
9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public
11 * License as published by the Free Software Foundation; either
12 * version 2 of the License, or (at your option) any later version.
13 *
14 * This library is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17 * Library General Public License for more details.
18 *
19 * You should have received a copy of the GNU Library General Public License
20 * along with this library; see the file COPYING.LIB.  If not, write to
21 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
22 * Boston, MA 02110-1301, USA.
23 *
24 */
25
26#ifndef RenderStyleConstants_h
27#define RenderStyleConstants_h
28
29namespace blink {
30
31// Sides used when drawing borders and outlines. The values should run clockwise from top.
32enum BoxSide {
33    BSTop,
34    BSRight,
35    BSBottom,
36    BSLeft
37};
38
39enum StyleRecalcChange {
40    NoChange,
41    NoInherit,
42    UpdatePseudoElements,
43    Inherit,
44    Force,
45    Reattach,
46    ReattachNoRenderer
47};
48
49static const size_t PrintColorAdjustBits = 1;
50enum PrintColorAdjust {
51    PrintColorAdjustEconomy,
52    PrintColorAdjustExact
53};
54
55// Static pseudo styles. Dynamic ones are produced on the fly.
56enum PseudoId {
57    // The order must be NOP ID, public IDs, and then internal IDs.
58    // If you add or remove a public ID, you must update _pseudoBits in RenderStyle.
59    NOPSEUDO, FIRST_LINE, FIRST_LETTER, BEFORE, AFTER, BACKDROP, SELECTION, FIRST_LINE_INHERITED, SCROLLBAR,
60    // Internal IDs follow:
61    SCROLLBAR_THUMB, SCROLLBAR_BUTTON, SCROLLBAR_TRACK, SCROLLBAR_TRACK_PIECE, SCROLLBAR_CORNER, RESIZER, INPUT_LIST_BUTTON,
62    // Special values follow:
63    AFTER_LAST_INTERNAL_PSEUDOID,
64    FIRST_PUBLIC_PSEUDOID = FIRST_LINE,
65    FIRST_INTERNAL_PSEUDOID = SCROLLBAR_THUMB,
66    PUBLIC_PSEUDOID_MASK = ((1 << FIRST_INTERNAL_PSEUDOID) - 1) & ~((1 << FIRST_PUBLIC_PSEUDOID) - 1),
67    PSEUDO_ELEMENT_MASK = (1 << (BEFORE - 1)) | (1 << (AFTER - 1)) | (1 << (BACKDROP - 1))
68};
69
70enum ColumnFill { ColumnFillBalance, ColumnFillAuto };
71
72enum ColumnSpan { ColumnSpanNone = 0, ColumnSpanAll };
73
74enum EBorderCollapse { BSEPARATE = 0, BCOLLAPSE = 1 };
75
76// These have been defined in the order of their precedence for border-collapsing. Do
77// not change this order! This order also must match the order in CSSValueKeywords.in.
78enum EBorderStyle { BNONE, BHIDDEN, INSET, GROOVE, OUTSET, RIDGE, DOTTED, DASHED, SOLID, DOUBLE };
79
80enum EBorderPrecedence { BOFF, BTABLE, BCOLGROUP, BCOL, BROWGROUP, BROW, BCELL };
81
82enum OutlineIsAuto { AUTO_OFF = 0, AUTO_ON };
83
84enum EPosition {
85    StaticPosition = 0,
86    RelativePosition = 1,
87    AbsolutePosition = 2,
88    // This value is required to pack our bits efficiently in RenderObject.
89    // FIXME: Is this still true now that we've remove position: sticky.
90    FixedPosition = 6
91};
92
93enum EFloat {
94    NoFloat, LeftFloat, RightFloat
95};
96
97enum EMarginCollapse { MCOLLAPSE, MSEPARATE, MDISCARD };
98
99// Box decoration attributes. Not inherited.
100
101enum EBoxDecorationBreak { DSLICE, DCLONE };
102
103// Box attributes. Not inherited.
104
105enum EBoxSizing { CONTENT_BOX, BORDER_BOX };
106
107// Random visual rendering model attributes. Not inherited.
108
109enum EOverflow {
110    OVISIBLE, OHIDDEN, OSCROLL, OAUTO, OOVERLAY, OPAGEDX, OPAGEDY
111};
112
113enum EVerticalAlign {
114    BASELINE, MIDDLE, SUB, SUPER, TEXT_TOP,
115    TEXT_BOTTOM, TOP, BOTTOM, BASELINE_MIDDLE, LENGTH
116};
117
118enum EClear {
119    CNONE = 0, CLEFT = 1, CRIGHT = 2, CBOTH = 3
120};
121
122enum ETableLayout {
123    TAUTO, TFIXED
124};
125
126enum TextCombine {
127    TextCombineNone, TextCombineHorizontal
128};
129
130enum EFillAttachment {
131    ScrollBackgroundAttachment, LocalBackgroundAttachment, FixedBackgroundAttachment
132};
133
134enum EFillBox {
135    BorderFillBox, PaddingFillBox, ContentFillBox, TextFillBox
136};
137
138enum EFillRepeat {
139    RepeatFill, NoRepeatFill, RoundFill, SpaceFill
140};
141
142enum EFillLayerType {
143    BackgroundFillLayer, MaskFillLayer
144};
145
146// CSS3 Background Values
147enum EFillSizeType { Contain, Cover, SizeLength, SizeNone };
148
149// CSS3 Background Position
150enum BackgroundEdgeOrigin { TopEdge, RightEdge, BottomEdge, LeftEdge };
151
152// CSS Mask Source Types
153enum EMaskSourceType { MaskAlpha, MaskLuminance };
154
155// CSS3 Marquee Properties
156
157enum EMarqueeBehavior { MNONE, MSCROLL, MSLIDE, MALTERNATE };
158enum EMarqueeDirection { MAUTO = 0, MLEFT = 1, MRIGHT = -1, MUP = 2, MDOWN = -2, MFORWARD = 3, MBACKWARD = -3 };
159
160// Deprecated Flexible Box Properties
161
162enum EBoxPack { Start, Center, End, Justify };
163enum EBoxAlignment { BSTRETCH, BSTART, BCENTER, BEND, BBASELINE };
164enum EBoxOrient { HORIZONTAL, VERTICAL };
165enum EBoxLines { SINGLE, MULTIPLE };
166enum EBoxDirection { BNORMAL, BREVERSE };
167
168// CSS3 Flexbox Properties
169
170enum EAlignContent { AlignContentFlexStart, AlignContentFlexEnd, AlignContentCenter, AlignContentSpaceBetween, AlignContentSpaceAround, AlignContentStretch };
171enum EFlexDirection { FlowRow, FlowRowReverse, FlowColumn, FlowColumnReverse };
172enum EFlexWrap { FlexNoWrap, FlexWrap, FlexWrapReverse };
173enum EJustifyContent { JustifyFlexStart, JustifyFlexEnd, JustifyCenter, JustifySpaceBetween, JustifySpaceAround };
174
175enum ETextSecurity {
176    TSNONE, TSDISC, TSCIRCLE, TSSQUARE
177};
178
179// CSS3 User Modify Properties
180
181enum EUserModify {
182    READ_ONLY, READ_WRITE, READ_WRITE_PLAINTEXT_ONLY
183};
184
185// CSS3 User Drag Values
186
187enum EUserDrag {
188    DRAG_AUTO, DRAG_NONE, DRAG_ELEMENT
189};
190
191// CSS3 User Select Values
192
193enum EUserSelect {
194    SELECT_NONE, SELECT_TEXT, SELECT_ALL
195};
196
197// CSS3 Image Values
198enum ObjectFit { ObjectFitFill, ObjectFitContain, ObjectFitCover, ObjectFitNone, ObjectFitScaleDown };
199
200// Word Break Values. Matches WinIE, rather than CSS3
201
202enum EWordBreak {
203    NormalWordBreak, BreakAllWordBreak, BreakWordBreak
204};
205
206enum EOverflowWrap {
207    NormalOverflowWrap, BreakOverflowWrap
208};
209
210enum LineBreak {
211    LineBreakAuto, LineBreakLoose, LineBreakNormal, LineBreakStrict, LineBreakAfterWhiteSpace
212};
213
214enum EResize {
215    RESIZE_NONE, RESIZE_BOTH, RESIZE_HORIZONTAL, RESIZE_VERTICAL
216};
217
218// The order of this enum must match the order of the list style types in CSSValueKeywords.in.
219enum EListStyleType {
220    Disc,
221    Circle,
222    Square,
223    DecimalListStyle,
224    DecimalLeadingZero,
225    ArabicIndic,
226    BinaryListStyle,
227    Bengali,
228    Cambodian,
229    Khmer,
230    Devanagari,
231    Gujarati,
232    Gurmukhi,
233    Kannada,
234    LowerHexadecimal,
235    Lao,
236    Malayalam,
237    Mongolian,
238    Myanmar,
239    Octal,
240    Oriya,
241    Persian,
242    Urdu,
243    Telugu,
244    Tibetan,
245    Thai,
246    UpperHexadecimal,
247    LowerRoman,
248    UpperRoman,
249    LowerGreek,
250    LowerAlpha,
251    LowerLatin,
252    UpperAlpha,
253    UpperLatin,
254    Afar,
255    EthiopicHalehameAaEt,
256    EthiopicHalehameAaEr,
257    Amharic,
258    EthiopicHalehameAmEt,
259    AmharicAbegede,
260    EthiopicAbegedeAmEt,
261    CjkEarthlyBranch,
262    CjkHeavenlyStem,
263    Ethiopic,
264    EthiopicHalehameGez,
265    EthiopicAbegede,
266    EthiopicAbegedeGez,
267    HangulConsonant,
268    Hangul,
269    LowerNorwegian,
270    Oromo,
271    EthiopicHalehameOmEt,
272    Sidama,
273    EthiopicHalehameSidEt,
274    Somali,
275    EthiopicHalehameSoEt,
276    Tigre,
277    EthiopicHalehameTig,
278    TigrinyaEr,
279    EthiopicHalehameTiEr,
280    TigrinyaErAbegede,
281    EthiopicAbegedeTiEr,
282    TigrinyaEt,
283    EthiopicHalehameTiEt,
284    TigrinyaEtAbegede,
285    EthiopicAbegedeTiEt,
286    UpperGreek,
287    UpperNorwegian,
288    Asterisks,
289    Footnotes,
290    Hebrew,
291    Armenian,
292    LowerArmenian,
293    UpperArmenian,
294    Georgian,
295    CJKIdeographic,
296    Hiragana,
297    Katakana,
298    HiraganaIroha,
299    KatakanaIroha,
300    NoneListStyle
301};
302
303enum QuoteType {
304    OPEN_QUOTE, CLOSE_QUOTE, NO_OPEN_QUOTE, NO_CLOSE_QUOTE
305};
306
307enum EBorderFit { BorderFitBorder, BorderFitLines };
308
309enum EAnimPlayState {
310    AnimPlayStatePlaying,
311    AnimPlayStatePaused
312};
313
314enum EWhiteSpace {
315    NORMAL, PRE, PRE_WRAP, PRE_LINE, NOWRAP, KHTML_NOWRAP
316};
317
318// The order of this enum must match the order of the text align values in CSSValueKeywords.in.
319enum ETextAlign {
320    LEFT, RIGHT, CENTER, JUSTIFY, WEBKIT_LEFT, WEBKIT_RIGHT, WEBKIT_CENTER, TASTART, TAEND,
321};
322
323enum ETextTransform {
324    CAPITALIZE, UPPERCASE, LOWERCASE, TTNONE
325};
326
327static const size_t TextDecorationBits = 4;
328enum TextDecoration {
329    TextDecorationNone = 0x0,
330    TextDecorationUnderline = 0x1,
331    TextDecorationOverline = 0x2,
332    TextDecorationLineThrough = 0x4,
333    TextDecorationBlink = 0x8
334};
335inline TextDecoration operator| (TextDecoration a, TextDecoration b) { return TextDecoration(int(a) | int(b)); }
336inline TextDecoration& operator|= (TextDecoration& a, TextDecoration b) { return a = a | b; }
337
338enum TextDecorationStyle {
339    TextDecorationStyleSolid,
340    TextDecorationStyleDouble,
341    TextDecorationStyleDotted,
342    TextDecorationStyleDashed,
343    TextDecorationStyleWavy
344};
345
346enum TextAlignLast {
347    TextAlignLastAuto, TextAlignLastStart, TextAlignLastEnd, TextAlignLastLeft, TextAlignLastRight, TextAlignLastCenter, TextAlignLastJustify
348};
349
350enum TextJustify {
351    TextJustifyAuto, TextJustifyNone, TextJustifyInterWord, TextJustifyDistribute
352};
353
354enum TextUnderlinePosition {
355    // FIXME: Implement support for 'under left' and 'under right' values.
356    TextUnderlinePositionAuto,
357    TextUnderlinePositionUnder
358};
359
360enum EPageBreak {
361    PBAUTO, PBALWAYS, PBAVOID
362};
363
364enum EEmptyCell {
365    SHOW, HIDE
366};
367
368enum ECaptionSide {
369    CAPTOP, CAPBOTTOM, CAPLEFT, CAPRIGHT
370};
371
372enum EListStylePosition { OUTSIDE, INSIDE };
373
374enum EVisibility { VISIBLE, HIDDEN, COLLAPSE };
375
376enum ECursor {
377    // The following must match the order in CSSValueKeywords.in.
378    CURSOR_AUTO,
379    CURSOR_CROSS,
380    CURSOR_DEFAULT,
381    CURSOR_POINTER,
382    CURSOR_MOVE,
383    CURSOR_VERTICAL_TEXT,
384    CURSOR_CELL,
385    CURSOR_CONTEXT_MENU,
386    CURSOR_ALIAS,
387    CURSOR_PROGRESS,
388    CURSOR_NO_DROP,
389    CURSOR_NOT_ALLOWED,
390    CURSOR_ZOOM_IN,
391    CURSOR_ZOOM_OUT,
392    CURSOR_E_RESIZE,
393    CURSOR_NE_RESIZE,
394    CURSOR_NW_RESIZE,
395    CURSOR_N_RESIZE,
396    CURSOR_SE_RESIZE,
397    CURSOR_SW_RESIZE,
398    CURSOR_S_RESIZE,
399    CURSOR_W_RESIZE,
400    CURSOR_EW_RESIZE,
401    CURSOR_NS_RESIZE,
402    CURSOR_NESW_RESIZE,
403    CURSOR_NWSE_RESIZE,
404    CURSOR_COL_RESIZE,
405    CURSOR_ROW_RESIZE,
406    CURSOR_TEXT,
407    CURSOR_WAIT,
408    CURSOR_HELP,
409    CURSOR_ALL_SCROLL,
410    CURSOR_WEBKIT_GRAB,
411    CURSOR_WEBKIT_GRABBING,
412
413    // The following are handled as exceptions so don't need to match.
414    CURSOR_COPY,
415    CURSOR_NONE
416};
417
418// The order of this enum must match the order of the display values in CSSValueKeywords.in.
419enum EDisplay {
420    INLINE, BLOCK, LIST_ITEM, INLINE_BLOCK,
421    TABLE, INLINE_TABLE, TABLE_ROW_GROUP,
422    TABLE_HEADER_GROUP, TABLE_FOOTER_GROUP, TABLE_ROW,
423    TABLE_COLUMN_GROUP, TABLE_COLUMN, TABLE_CELL,
424    TABLE_CAPTION, BOX, INLINE_BOX,
425    FLEX, INLINE_FLEX,
426    GRID, INLINE_GRID,
427    NONE,
428    FIRST_TABLE_DISPLAY = TABLE,
429    LAST_TABLE_DISPLAY = TABLE_CAPTION
430};
431
432enum EInsideLink {
433    NotInsideLink, InsideUnvisitedLink, InsideVisitedLink
434};
435
436enum EPointerEvents {
437    PE_NONE, PE_AUTO, PE_STROKE, PE_FILL, PE_PAINTED, PE_VISIBLE,
438    PE_VISIBLE_STROKE, PE_VISIBLE_FILL, PE_VISIBLE_PAINTED, PE_BOUNDINGBOX,
439    PE_ALL
440};
441
442enum ETransformStyle3D {
443    TransformStyle3DFlat, TransformStyle3DPreserve3D
444};
445
446enum EBackfaceVisibility {
447    BackfaceVisibilityVisible, BackfaceVisibilityHidden
448};
449
450enum ELineClampType { LineClampLineCount, LineClampPercentage };
451
452enum Hyphens { HyphensNone, HyphensManual, HyphensAuto };
453
454enum ESpeak { SpeakNone, SpeakNormal, SpeakSpellOut, SpeakDigits, SpeakLiteralPunctuation, SpeakNoPunctuation };
455
456enum TextEmphasisFill { TextEmphasisFillFilled, TextEmphasisFillOpen };
457
458enum TextEmphasisMark { TextEmphasisMarkNone, TextEmphasisMarkAuto, TextEmphasisMarkDot, TextEmphasisMarkCircle, TextEmphasisMarkDoubleCircle, TextEmphasisMarkTriangle, TextEmphasisMarkSesame, TextEmphasisMarkCustom };
459
460enum TextEmphasisPosition { TextEmphasisPositionOver, TextEmphasisPositionUnder };
461
462enum TextOrientation { TextOrientationVerticalRight, TextOrientationUpright, TextOrientationSideways, TextOrientationSidewaysRight };
463
464enum TextOverflow { TextOverflowClip = 0, TextOverflowEllipsis };
465
466enum EImageRendering { ImageRenderingAuto, ImageRenderingOptimizeSpeed, ImageRenderingOptimizeQuality, ImageRenderingOptimizeContrast, ImageRenderingPixelated };
467
468enum ImageResolutionSource { ImageResolutionSpecified = 0, ImageResolutionFromImage };
469
470enum ImageResolutionSnap { ImageResolutionNoSnap = 0, ImageResolutionSnapPixels };
471
472enum Order { LogicalOrder = 0, VisualOrder };
473
474enum WrapFlow { WrapFlowAuto, WrapFlowBoth, WrapFlowStart, WrapFlowEnd, WrapFlowMaximum, WrapFlowClear };
475
476enum WrapThrough { WrapThroughWrap, WrapThroughNone };
477
478enum RubyPosition { RubyPositionBefore, RubyPositionAfter };
479
480static const size_t GridAutoFlowBits = 5;
481enum InternalGridAutoFlowAlgorithm {
482    InternalAutoFlowAlgorithmSparse = 0x1,
483    InternalAutoFlowAlgorithmDense = 0x2,
484    InternalAutoFlowAlgorithmStack = 0x4
485};
486
487enum InternalGridAutoFlowDirection {
488    InternalAutoFlowDirectionRow = 0x8,
489    InternalAutoFlowDirectionColumn = 0x10
490};
491
492enum GridAutoFlow {
493    AutoFlowRow = InternalAutoFlowAlgorithmSparse | InternalAutoFlowDirectionRow,
494    AutoFlowColumn = InternalAutoFlowAlgorithmSparse | InternalAutoFlowDirectionColumn,
495    AutoFlowRowDense = InternalAutoFlowAlgorithmDense | InternalAutoFlowDirectionRow,
496    AutoFlowColumnDense = InternalAutoFlowAlgorithmDense | InternalAutoFlowDirectionColumn,
497    AutoFlowStackRow = InternalAutoFlowAlgorithmStack | InternalAutoFlowDirectionRow,
498    AutoFlowStackColumn = InternalAutoFlowAlgorithmStack | InternalAutoFlowDirectionColumn
499};
500
501enum DraggableRegionMode { DraggableRegionNone, DraggableRegionDrag, DraggableRegionNoDrag };
502
503static const size_t TouchActionBits = 4;
504enum TouchAction {
505    TouchActionAuto = 0x0,
506    TouchActionNone = 0x1,
507    TouchActionPanX = 0x2,
508    TouchActionPanY = 0x4,
509    TouchActionPinchZoom = 0x8,
510};
511inline TouchAction operator| (TouchAction a, TouchAction b) { return TouchAction(int(a) | int(b)); }
512inline TouchAction& operator|= (TouchAction& a, TouchAction b) { return a = a | b; }
513inline TouchAction operator& (TouchAction a, TouchAction b) { return TouchAction(int(a) & int(b)); }
514inline TouchAction& operator&= (TouchAction& a, TouchAction b) { return a = a & b; }
515
516enum EIsolation { IsolationAuto, IsolationIsolate };
517
518enum TouchActionDelay { TouchActionDelayNone, TouchActionDelayScript };
519
520enum ItemPosition {
521    ItemPositionAuto,
522    ItemPositionStretch,
523    ItemPositionBaseline,
524    ItemPositionLastBaseline,
525    ItemPositionCenter,
526    ItemPositionStart,
527    ItemPositionEnd,
528    ItemPositionSelfStart,
529    ItemPositionSelfEnd,
530    ItemPositionFlexStart,
531    ItemPositionFlexEnd,
532    ItemPositionLeft,
533    ItemPositionRight
534};
535
536enum OverflowAlignment {
537    OverflowAlignmentDefault,
538    OverflowAlignmentTrue,
539    OverflowAlignmentSafe
540};
541
542enum ItemPositionType {
543    NonLegacyPosition,
544    LegacyPosition
545};
546
547// Reasonable maximum to prevent insane font sizes from causing crashes on some platforms (such as Windows).
548static const float maximumAllowedFontSize = 1000000.0f;
549
550enum TextIndentLine { TextIndentFirstLine, TextIndentEachLine };
551enum TextIndentType { TextIndentNormal, TextIndentHanging };
552
553enum CSSBoxType { BoxMissing = 0, MarginBox, BorderBox, PaddingBox, ContentBox };
554
555} // namespace blink
556
557#endif // RenderStyleConstants_h
558