d762f52231bb94fbee99cf62226a3b37ce31e76d
[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 #ifndef RenderStyleConstants_h
27 #define RenderStyleConstants_h
28
29 namespace WebCore {
30
31 static const size_t PrintColorAdjustBits = 1;
32 enum PrintColorAdjust {
33     PrintColorAdjustEconomy,
34     PrintColorAdjustExact
35 };
36
37 // The difference between two styles.  The following values are used:
38 // - StyleDifferenceEqual - The two styles are identical
39 // - StyleDifferenceRecompositeLayer - The layer needs its position and transform updated, but no repaint
40 // - StyleDifferenceRepaint - The object just needs to be repainted.
41 // - StyleDifferenceRepaintIfTextOrBorderOrOutline - The object needs to be repainted if it contains text or a border or outline.
42 // - StyleDifferenceRepaintLayer - The layer and its descendant layers needs to be repainted.
43 // - StyleDifferenceLayoutPositionedMovementOnly - Only the position of this positioned object has been updated
44 // - StyleDifferenceSimplifiedLayout - Only overflow needs to be recomputed
45 // - StyleDifferenceSimplifiedLayoutAndPositionedMovement - Both positioned movement and simplified layout updates are required.
46 // - StyleDifferenceLayout - A full layout is required.
47 enum StyleDifference {
48     StyleDifferenceEqual,
49 #if USE(ACCELERATED_COMPOSITING)
50     StyleDifferenceRecompositeLayer,
51 #endif
52     StyleDifferenceRepaint,
53     StyleDifferenceRepaintIfTextOrBorderOrOutline,
54     StyleDifferenceRepaintLayer,
55     StyleDifferenceLayoutPositionedMovementOnly,
56     StyleDifferenceSimplifiedLayout,
57     StyleDifferenceSimplifiedLayoutAndPositionedMovement,
58     StyleDifferenceLayout
59 };
60
61 // When some style properties change, different amounts of work have to be done depending on
62 // context (e.g. whether the property is changing on an element which has a compositing layer).
63 // A simple StyleDifference does not provide enough information so we return a bit mask of
64 // StyleDifferenceContextSensitiveProperties from RenderStyle::diff() too.
65 enum StyleDifferenceContextSensitiveProperty {
66     ContextSensitivePropertyNone = 0,
67     ContextSensitivePropertyTransform = (1 << 0),
68     ContextSensitivePropertyOpacity = (1 << 1),
69     ContextSensitivePropertyFilter = (1 << 2)
70 };
71
72 // Static pseudo styles. Dynamic ones are produced on the fly.
73 enum PseudoId {
74     // The order must be NOP ID, public IDs, and then internal IDs.
75     NOPSEUDO, FIRST_LINE, FIRST_LETTER, BEFORE, AFTER, SELECTION, FIRST_LINE_INHERITED, SCROLLBAR,
76     // Internal IDs follow:
77     SCROLLBAR_THUMB, SCROLLBAR_BUTTON, SCROLLBAR_TRACK, SCROLLBAR_TRACK_PIECE, SCROLLBAR_CORNER, RESIZER,
78     INPUT_LIST_BUTTON,
79     AFTER_LAST_INTERNAL_PSEUDOID,
80     FULL_SCREEN, FULL_SCREEN_DOCUMENT, FULL_SCREEN_ANCESTOR, ANIMATING_FULL_SCREEN_TRANSITION,
81     FIRST_PUBLIC_PSEUDOID = FIRST_LINE,
82     FIRST_INTERNAL_PSEUDOID = SCROLLBAR_THUMB,
83     PUBLIC_PSEUDOID_MASK = ((1 << FIRST_INTERNAL_PSEUDOID) - 1) & ~((1 << FIRST_PUBLIC_PSEUDOID) - 1)
84 };
85
86 enum ColumnFill { ColumnFillBalance, ColumnFillAuto };
87
88 enum ColumnSpan { ColumnSpanNone = 0, ColumnSpanAll };
89
90 enum EBorderCollapse { BSEPARATE = 0, BCOLLAPSE = 1 };
91
92 // These have been defined in the order of their precedence for border-collapsing. Do
93 // not change this order! This order also must match the order in CSSValueKeywords.in.
94 enum EBorderStyle { BNONE, BHIDDEN, INSET, GROOVE, OUTSET, RIDGE, DOTTED, DASHED, SOLID, DOUBLE };
95
96 enum EBorderPrecedence { BOFF, BTABLE, BCOLGROUP, BCOL, BROWGROUP, BROW, BCELL };
97
98 enum OutlineIsAuto { AUTO_OFF = 0, AUTO_ON };
99
100 enum EPosition {
101     StaticPosition = 0,
102     RelativePosition = 1,
103     AbsolutePosition = 2,
104     StickyPosition = 3,
105     // This value is required to pack our bits efficiently in RenderObject.
106     FixedPosition = 6
107 };
108
109 enum EFloat {
110     NoFloat, LeftFloat, RightFloat
111 };
112
113 enum EMarginCollapse { MCOLLAPSE, MSEPARATE, MDISCARD };
114
115 // Box decoration attributes. Not inherited.
116
117 enum EBoxDecorationBreak { DSLICE, DCLONE };
118
119 // Box attributes. Not inherited.
120
121 enum EBoxSizing { CONTENT_BOX, BORDER_BOX };
122
123 // Random visual rendering model attributes. Not inherited.
124
125 enum EOverflow {
126     OVISIBLE, OHIDDEN, OSCROLL, OAUTO, OOVERLAY, OMARQUEE, OPAGEDX, OPAGEDY
127 };
128
129 enum EVerticalAlign {
130     BASELINE, MIDDLE, SUB, SUPER, TEXT_TOP,
131     TEXT_BOTTOM, TOP, BOTTOM, BASELINE_MIDDLE, LENGTH
132 };
133
134 enum EClear {
135     CNONE = 0, CLEFT = 1, CRIGHT = 2, CBOTH = 3
136 };
137
138 enum ETableLayout {
139     TAUTO, TFIXED
140 };
141
142 enum TextCombine {
143     TextCombineNone, TextCombineHorizontal
144 };
145
146 enum EFillAttachment {
147     ScrollBackgroundAttachment, LocalBackgroundAttachment, FixedBackgroundAttachment
148 };
149
150 enum EFillBox {
151     BorderFillBox, PaddingFillBox, ContentFillBox, TextFillBox
152 };
153
154 enum EFillRepeat {
155     RepeatFill, NoRepeatFill, RoundFill, SpaceFill
156 };
157
158 enum EFillLayerType {
159     BackgroundFillLayer, MaskFillLayer
160 };
161
162 // CSS3 Background Values
163 enum EFillSizeType { Contain, Cover, SizeLength, SizeNone };
164
165 // CSS3 Background Position
166 enum BackgroundEdgeOrigin { TopEdge, RightEdge, BottomEdge, LeftEdge };
167
168 // CSS3 Mask Source Types
169 enum EMaskSourceType { MaskAlpha, MaskLuminance };
170
171 // CSS3 Marquee Properties
172
173 enum EMarqueeBehavior { MNONE, MSCROLL, MSLIDE, MALTERNATE };
174 enum EMarqueeDirection { MAUTO = 0, MLEFT = 1, MRIGHT = -1, MUP = 2, MDOWN = -2, MFORWARD = 3, MBACKWARD = -3 };
175
176 // Deprecated Flexible Box Properties
177
178 enum EBoxPack { Start, Center, End, Justify };
179 enum EBoxAlignment { BSTRETCH, BSTART, BCENTER, BEND, BBASELINE };
180 enum EBoxOrient { HORIZONTAL, VERTICAL };
181 enum EBoxLines { SINGLE, MULTIPLE };
182 enum EBoxDirection { BNORMAL, BREVERSE };
183
184 // CSS3 Flexbox Properties
185
186 enum EAlignContent { AlignContentFlexStart, AlignContentFlexEnd, AlignContentCenter, AlignContentSpaceBetween, AlignContentSpaceAround, AlignContentStretch };
187 enum EAlignItems { AlignAuto, AlignFlexStart, AlignFlexEnd, AlignCenter, AlignStretch, AlignBaseline };
188 enum EFlexDirection { FlowRow, FlowRowReverse, FlowColumn, FlowColumnReverse };
189 enum EFlexWrap { FlexNoWrap, FlexWrap, FlexWrapReverse };
190 enum EJustifyContent { JustifyFlexStart, JustifyFlexEnd, JustifyCenter, JustifySpaceBetween, JustifySpaceAround };
191
192 enum ETextSecurity {
193     TSNONE, TSDISC, TSCIRCLE, TSSQUARE
194 };
195
196 // CSS3 User Modify Properties
197
198 enum EUserModify {
199     READ_ONLY, READ_WRITE, READ_WRITE_PLAINTEXT_ONLY
200 };
201
202 // CSS3 User Drag Values
203
204 enum EUserDrag {
205     DRAG_AUTO, DRAG_NONE, DRAG_ELEMENT
206 };
207
208 // CSS3 User Select Values
209
210 enum EUserSelect {
211     SELECT_NONE, SELECT_TEXT, SELECT_ALL
212 };
213
214 // CSS3 Image Values
215 enum ObjectFit {
216     ObjectFitFill, ObjectFitContain, ObjectFitCover, ObjectFitNone, ObjectFitScaleDown
217 };
218
219 // Word Break Values. Matches WinIE, rather than CSS3
220
221 enum EWordBreak {
222     NormalWordBreak, BreakAllWordBreak, BreakWordBreak
223 };
224
225 enum EOverflowWrap {
226     NormalOverflowWrap, BreakOverflowWrap
227 };
228
229 enum ENBSPMode {
230     NBNORMAL, SPACE
231 };
232
233 enum LineBreak {
234     LineBreakAuto, LineBreakLoose, LineBreakNormal, LineBreakStrict, LineBreakAfterWhiteSpace
235 };
236
237 enum EResize {
238     RESIZE_NONE, RESIZE_BOTH, RESIZE_HORIZONTAL, RESIZE_VERTICAL
239 };
240
241 // The order of this enum must match the order of the list style types in CSSValueKeywords.in.
242 enum EListStyleType {
243     Disc,
244     Circle,
245     Square,
246     DecimalListStyle,
247     DecimalLeadingZero,
248     ArabicIndic,
249     BinaryListStyle,
250     Bengali,
251     Cambodian,
252     Khmer,
253     Devanagari,
254     Gujarati,
255     Gurmukhi,
256     Kannada,
257     LowerHexadecimal,
258     Lao,
259     Malayalam,
260     Mongolian,
261     Myanmar,
262     Octal,
263     Oriya,
264     Persian,
265     Urdu,
266     Telugu,
267     Tibetan,
268     Thai,
269     UpperHexadecimal,
270     LowerRoman,
271     UpperRoman,
272     LowerGreek,
273     LowerAlpha,
274     LowerLatin,
275     UpperAlpha,
276     UpperLatin,
277     Afar,
278     EthiopicHalehameAaEt,
279     EthiopicHalehameAaEr,
280     Amharic,
281     EthiopicHalehameAmEt,
282     AmharicAbegede,
283     EthiopicAbegedeAmEt,
284     CjkEarthlyBranch,
285     CjkHeavenlyStem,
286     Ethiopic,
287     EthiopicHalehameGez,
288     EthiopicAbegede,
289     EthiopicAbegedeGez,
290     HangulConsonant,
291     Hangul,
292     LowerNorwegian,
293     Oromo,
294     EthiopicHalehameOmEt,
295     Sidama,
296     EthiopicHalehameSidEt,
297     Somali,
298     EthiopicHalehameSoEt,
299     Tigre,
300     EthiopicHalehameTig,
301     TigrinyaEr,
302     EthiopicHalehameTiEr,
303     TigrinyaErAbegede,
304     EthiopicAbegedeTiEr,
305     TigrinyaEt,
306     EthiopicHalehameTiEt,
307     TigrinyaEtAbegede,
308     EthiopicAbegedeTiEt,
309     UpperGreek,
310     UpperNorwegian,
311     Asterisks,
312     Footnotes,
313     Hebrew,
314     Armenian,
315     LowerArmenian,
316     UpperArmenian,
317     Georgian,
318     CJKIdeographic,
319     Hiragana,
320     Katakana,
321     HiraganaIroha,
322     KatakanaIroha,
323     NoneListStyle
324 };
325
326 enum QuoteType {
327     OPEN_QUOTE, CLOSE_QUOTE, NO_OPEN_QUOTE, NO_CLOSE_QUOTE
328 };
329
330 enum EBorderFit { BorderFitBorder, BorderFitLines };
331
332 enum EAnimationFillMode { AnimationFillModeNone, AnimationFillModeForwards, AnimationFillModeBackwards, AnimationFillModeBoth };
333
334 enum EAnimPlayState {
335     AnimPlayStatePlaying = 0x0,
336     AnimPlayStatePaused = 0x1
337 };
338
339 enum EWhiteSpace {
340     NORMAL, PRE, PRE_WRAP, PRE_LINE, NOWRAP, KHTML_NOWRAP
341 };
342
343 // The order of this enum must match the order of the text align values in CSSValueKeywords.in.
344 enum ETextAlign {
345     LEFT, RIGHT, CENTER, JUSTIFY, WEBKIT_LEFT, WEBKIT_RIGHT, WEBKIT_CENTER, TASTART, TAEND,
346 };
347
348 enum ETextTransform {
349     CAPITALIZE, UPPERCASE, LOWERCASE, TTNONE
350 };
351
352 static const size_t TextDecorationBits = 4;
353 enum TextDecoration {
354     TextDecorationNone = 0x0, TextDecorationUnderline = 0x1, TextDecorationOverline = 0x2, TextDecorationLineThrough = 0x4, TextDecorationBlink = 0x8
355 };
356 inline TextDecoration operator| (TextDecoration a, TextDecoration b) { return TextDecoration(int(a) | int(b)); }
357 inline TextDecoration& operator|= (TextDecoration& a, TextDecoration b) { return a = a | b; }
358
359 enum TextDecorationStyle {
360     TextDecorationStyleSolid,
361 #if ENABLE(CSS3_TEXT)
362     TextDecorationStyleDouble,
363     TextDecorationStyleDotted,
364     TextDecorationStyleDashed,
365     TextDecorationStyleWavy
366 #endif // CSS3_TEXT
367 };
368
369 #if ENABLE(CSS3_TEXT)
370 enum TextAlignLast {
371     TextAlignLastAuto, TextAlignLastStart, TextAlignLastEnd, TextAlignLastLeft, TextAlignLastRight, TextAlignLastCenter, TextAlignLastJustify
372 };
373
374 enum TextUnderlinePosition {
375     // FIXME: Implement support for 'under left' and 'under right' values.
376     TextUnderlinePositionAuto = 0x1, TextUnderlinePositionAlphabetic = 0x2, TextUnderlinePositionUnder = 0x4
377 };
378
379 enum TextJustify {
380     TextJustifyAuto, TextJustifyNone, TextJustifyInterWord, TextJustifyInterIdeograph, TextJustifyInterCluster, TextJustifyDistribute, TextJustifyKashida
381 };
382 #endif // CSS3_TEXT
383
384 #if ENABLE(CSS3_TEXT_DECORATION)
385 enum TextDecorationSkipItems {
386     TextDecorationSkipNone = 0,
387     TextDecorationSkipInk = 1 << 0
388 };
389 typedef unsigned TextDecorationSkip;
390 #endif
391
392 enum EPageBreak {
393     PBAUTO, PBALWAYS, PBAVOID
394 };
395
396 enum EEmptyCell {
397     SHOW, HIDE
398 };
399
400 enum ECaptionSide {
401     CAPTOP, CAPBOTTOM, CAPLEFT, CAPRIGHT
402 };
403
404 enum EListStylePosition { OUTSIDE, INSIDE };
405
406 enum EVisibility { VISIBLE, HIDDEN, COLLAPSE };
407
408 enum ECursor {
409     // The following must match the order in CSSValueKeywords.in.
410     CURSOR_AUTO,
411     CURSOR_CROSS,
412     CURSOR_DEFAULT,
413     CURSOR_POINTER,
414     CURSOR_MOVE,
415     CURSOR_VERTICAL_TEXT,
416     CURSOR_CELL,
417     CURSOR_CONTEXT_MENU,
418     CURSOR_ALIAS,
419     CURSOR_PROGRESS,
420     CURSOR_NO_DROP,
421     CURSOR_NOT_ALLOWED,
422     CURSOR_WEBKIT_ZOOM_IN,
423     CURSOR_WEBKIT_ZOOM_OUT,
424     CURSOR_E_RESIZE,
425     CURSOR_NE_RESIZE,
426     CURSOR_NW_RESIZE,
427     CURSOR_N_RESIZE,
428     CURSOR_SE_RESIZE,
429     CURSOR_SW_RESIZE,
430     CURSOR_S_RESIZE,
431     CURSOR_W_RESIZE,
432     CURSOR_EW_RESIZE,
433     CURSOR_NS_RESIZE,
434     CURSOR_NESW_RESIZE,
435     CURSOR_NWSE_RESIZE,
436     CURSOR_COL_RESIZE,
437     CURSOR_ROW_RESIZE,
438     CURSOR_TEXT,
439     CURSOR_WAIT,
440     CURSOR_HELP,
441     CURSOR_ALL_SCROLL,
442     CURSOR_WEBKIT_GRAB,
443     CURSOR_WEBKIT_GRABBING,
444
445     // The following are handled as exceptions so don't need to match.
446     CURSOR_COPY,
447     CURSOR_NONE
448 };
449
450 #if ENABLE(CURSOR_VISIBILITY)
451 enum CursorVisibility {
452     CursorVisibilityAuto,
453     CursorVisibilityAutoHide,
454 };
455 #endif
456
457 // The order of this enum must match the order of the display values in CSSValueKeywords.in.
458 enum EDisplay {
459     INLINE, BLOCK, LIST_ITEM, RUN_IN, COMPACT, INLINE_BLOCK,
460     TABLE, INLINE_TABLE, TABLE_ROW_GROUP,
461     TABLE_HEADER_GROUP, TABLE_FOOTER_GROUP, TABLE_ROW,
462     TABLE_COLUMN_GROUP, TABLE_COLUMN, TABLE_CELL,
463     TABLE_CAPTION, BOX, INLINE_BOX,
464     FLEX, INLINE_FLEX,
465     GRID, INLINE_GRID,
466     NONE
467 };
468
469 enum EInsideLink {
470     NotInsideLink, InsideUnvisitedLink, InsideVisitedLink
471 };
472     
473 enum EPointerEvents {
474     PE_NONE, PE_AUTO, PE_STROKE, PE_FILL, PE_PAINTED, PE_VISIBLE,
475     PE_VISIBLE_STROKE, PE_VISIBLE_FILL, PE_VISIBLE_PAINTED, PE_ALL
476 };
477
478 enum ETransformStyle3D {
479     TransformStyle3DFlat, TransformStyle3DPreserve3D
480 };
481
482 enum EBackfaceVisibility {
483     BackfaceVisibilityVisible, BackfaceVisibilityHidden
484 };
485     
486 enum ELineClampType { LineClampLineCount, LineClampPercentage };
487
488 enum Hyphens { HyphensNone, HyphensManual, HyphensAuto };
489
490 enum ESpeak { SpeakNone, SpeakNormal, SpeakSpellOut, SpeakDigits, SpeakLiteralPunctuation, SpeakNoPunctuation };
491
492 enum TextEmphasisFill { TextEmphasisFillFilled, TextEmphasisFillOpen };
493
494 enum TextEmphasisMark { TextEmphasisMarkNone, TextEmphasisMarkAuto, TextEmphasisMarkDot, TextEmphasisMarkCircle, TextEmphasisMarkDoubleCircle, TextEmphasisMarkTriangle, TextEmphasisMarkSesame, TextEmphasisMarkCustom };
495
496 enum TextEmphasisPosition { TextEmphasisPositionOver, TextEmphasisPositionUnder };
497
498 enum TextOrientation { TextOrientationVerticalRight, TextOrientationUpright, TextOrientationSideways, TextOrientationSidewaysRight };
499
500 enum TextOverflow { TextOverflowClip = 0, TextOverflowEllipsis };
501
502 enum EImageRendering { ImageRenderingAuto = 0, ImageRenderingOptimizeSpeed, ImageRenderingOptimizeQuality, ImageRenderingCrispEdges };
503
504 enum ImageResolutionSource { ImageResolutionSpecified = 0, ImageResolutionFromImage };
505
506 enum ImageResolutionSnap { ImageResolutionNoSnap = 0, ImageResolutionSnapPixels };
507
508 enum Order { LogicalOrder = 0, VisualOrder };
509
510 enum RegionFragment { AutoRegionFragment, BreakRegionFragment };
511
512 enum ColumnAxis { HorizontalColumnAxis, VerticalColumnAxis, AutoColumnAxis };
513
514 enum ColumnProgression { NormalColumnProgression, ReverseColumnProgression };
515
516 enum LineSnap { LineSnapNone, LineSnapBaseline, LineSnapContain };
517
518 enum LineAlign { LineAlignNone, LineAlignEdges };
519
520 enum WrapFlow { WrapFlowAuto, WrapFlowBoth, WrapFlowStart, WrapFlowEnd, WrapFlowMaximum, WrapFlowClear };
521
522 enum WrapThrough { WrapThroughWrap, WrapThroughNone };
523
524 enum RubyPosition { RubyPositionBefore, RubyPositionAfter };
525
526 enum GridAutoFlow { AutoFlowNone, AutoFlowColumn, AutoFlowRow };
527
528 #if ENABLE(DRAGGABLE_REGION)
529 enum DraggableRegionMode { DraggableRegionNone, DraggableRegionDrag, DraggableRegionNoDrag };
530 #endif
531
532 // Reasonable maximum to prevent insane font sizes from causing crashes on some platforms (such as Windows).
533 static const float maximumAllowedFontSize = 1000000.0f;
534
535 #if ENABLE(CSS3_TEXT)
536 enum TextIndentLine { TextIndentFirstLine, TextIndentEachLine };
537 enum TextIndentType { TextIndentNormal, TextIndentHanging };
538 #endif
539
540 } // namespace WebCore
541
542 #endif // RenderStyleConstants_h