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