OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2004 Zack Rusin <zack@kde.org> | 2 * Copyright (C) 2004 Zack Rusin <zack@kde.org> |
3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc.
All rights reserved. | 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc.
All rights reserved. |
4 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> | 4 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> |
5 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com> | 5 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com> |
6 * Copyright (C) 2011 Sencha, Inc. All rights reserved. | 6 * Copyright (C) 2011 Sencha, Inc. All rights reserved. |
7 * Copyright (C) 2015 Google Inc. All rights reserved. | 7 * Copyright (C) 2015 Google Inc. All rights reserved. |
8 * | 8 * |
9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
10 * modify it under the terms of the GNU Lesser General Public | 10 * modify it under the terms of the GNU Lesser General Public |
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
420 direction = cssValuePool().createIdentifierValue(CSSValueLeft); | 420 direction = cssValuePool().createIdentifierValue(CSSValueLeft); |
421 break; | 421 break; |
422 case ReflectionRight: | 422 case ReflectionRight: |
423 direction = cssValuePool().createIdentifierValue(CSSValueRight); | 423 direction = cssValuePool().createIdentifierValue(CSSValueRight); |
424 break; | 424 break; |
425 } | 425 } |
426 | 426 |
427 return CSSReflectValue::create(direction, offset, valueForNinePieceImage(ref
lection->mask(), style)); | 427 return CSSReflectValue::create(direction, offset, valueForNinePieceImage(ref
lection->mask(), style)); |
428 } | 428 } |
429 | 429 |
430 static ItemPosition resolveAlignmentAuto(ItemPosition position, const ComputedSt
yle* style) | 430 static CSSValueList* valueForItemPositionWithOverflowAlignment(const StyleSelfAl
ignmentData& data) |
431 { | |
432 if (position != ItemPositionAuto) | |
433 return position; | |
434 | |
435 if (!RuntimeEnabledFeatures::cssGridLayoutEnabled()) | |
436 return ItemPositionStretch; | |
437 | |
438 return isFlexOrGrid(style) ? ItemPositionStretch : ItemPositionStart; | |
439 } | |
440 | |
441 static CSSValueList* valueForItemPositionWithOverflowAlignment(ItemPosition item
Position, OverflowAlignment overflowAlignment, ItemPositionType positionType) | |
442 { | 431 { |
443 CSSValueList* result = CSSValueList::createSpaceSeparated(); | 432 CSSValueList* result = CSSValueList::createSpaceSeparated(); |
444 if (positionType == LegacyPosition) | 433 if (data.positionType() == LegacyPosition) |
445 result->append(CSSPrimitiveValue::createIdentifier(CSSValueLegacy)); | 434 result->append(CSSPrimitiveValue::createIdentifier(CSSValueLegacy)); |
446 result->append(CSSPrimitiveValue::create(itemPosition)); | 435 // To avoid needing to copy the RareNonInheritedData, we could repurporse th
e 'auto' flag to not just mean 'auto' prior to running the StyleAdjuster but als
o mean 'normal' after running it. |
447 if (itemPosition >= ItemPositionCenter && overflowAlignment != OverflowAlign
mentDefault) | 436 result->append(CSSPrimitiveValue::create(data.position() == ItemPositionAuto
? ItemPositionNormal : data.position())); |
448 result->append(CSSPrimitiveValue::create(overflowAlignment)); | 437 if (data.position() >= ItemPositionCenter && data.overflow() != OverflowAlig
nmentDefault) |
| 438 result->append(CSSPrimitiveValue::create(data.overflow())); |
449 ASSERT(result->length() <= 2); | 439 ASSERT(result->length() <= 2); |
450 return result; | 440 return result; |
451 } | 441 } |
452 | 442 |
453 static CSSValueList* valuesForGridShorthand(const StylePropertyShorthand& shorth
and, const ComputedStyle& style, const LayoutObject* layoutObject, Node* styledN
ode, bool allowVisitedStyle) | 443 static CSSValueList* valuesForGridShorthand(const StylePropertyShorthand& shorth
and, const ComputedStyle& style, const LayoutObject* layoutObject, Node* styledN
ode, bool allowVisitedStyle) |
454 { | 444 { |
455 CSSValueList* list = CSSValueList::createSlashSeparated(); | 445 CSSValueList* list = CSSValueList::createSlashSeparated(); |
456 for (size_t i = 0; i < shorthand.length(); ++i) { | 446 for (size_t i = 0; i < shorthand.length(); ++i) { |
457 CSSValue* value = ComputedStyleCSSValueMapping::get(shorthand.properties
()[i], style, layoutObject, styledNode, allowVisitedStyle); | 447 CSSValue* value = ComputedStyleCSSValueMapping::get(shorthand.properties
()[i], style, layoutObject, styledNode, allowVisitedStyle); |
458 ASSERT(value); | 448 ASSERT(value); |
(...skipping 1375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1834 } | 1824 } |
1835 case CSSPropertyDirection: | 1825 case CSSPropertyDirection: |
1836 return cssValuePool().createValue(style.direction()); | 1826 return cssValuePool().createValue(style.direction()); |
1837 case CSSPropertyDisplay: | 1827 case CSSPropertyDisplay: |
1838 return cssValuePool().createValue(style.display()); | 1828 return cssValuePool().createValue(style.display()); |
1839 case CSSPropertyEmptyCells: | 1829 case CSSPropertyEmptyCells: |
1840 return cssValuePool().createValue(style.emptyCells()); | 1830 return cssValuePool().createValue(style.emptyCells()); |
1841 case CSSPropertyAlignContent: | 1831 case CSSPropertyAlignContent: |
1842 return valueForContentPositionAndDistributionWithOverflowAlignment(style
.alignContent()); | 1832 return valueForContentPositionAndDistributionWithOverflowAlignment(style
.alignContent()); |
1843 case CSSPropertyAlignItems: | 1833 case CSSPropertyAlignItems: |
1844 return valueForItemPositionWithOverflowAlignment(resolveAlignmentAuto(st
yle.alignItemsPosition(), &style), style.alignItemsOverflowAlignment(), NonLegac
yPosition); | 1834 return valueForItemPositionWithOverflowAlignment(style.alignItems()); |
1845 case CSSPropertyAlignSelf: { | 1835 case CSSPropertyAlignSelf: |
1846 ItemPosition position = style.alignSelfPosition(); | 1836 return valueForItemPositionWithOverflowAlignment(style.alignSelf()); |
1847 if (position == ItemPositionAuto) { | |
1848 // TODO(lajava): This code doesn't work for ShadowDOM (see Node::par
entComputedStyle) | |
1849 const ComputedStyle* parentStyle = styledNode->parentNode() ? styled
Node->parentNode()->ensureComputedStyle() : nullptr; | |
1850 position = parentStyle ? ComputedStyle::resolveAlignment(*parentStyl
e, style, resolveAlignmentAuto(parentStyle->alignItemsPosition(), parentStyle))
: ItemPositionStart; | |
1851 } | |
1852 return valueForItemPositionWithOverflowAlignment(position, style.alignSe
lfOverflowAlignment(), NonLegacyPosition); | |
1853 } | |
1854 case CSSPropertyFlex: | 1837 case CSSPropertyFlex: |
1855 return valuesForShorthandProperty(flexShorthand(), style, layoutObject,
styledNode, allowVisitedStyle); | 1838 return valuesForShorthandProperty(flexShorthand(), style, layoutObject,
styledNode, allowVisitedStyle); |
1856 case CSSPropertyFlexBasis: | 1839 case CSSPropertyFlexBasis: |
1857 return zoomAdjustedPixelValueForLength(style.flexBasis(), style); | 1840 return zoomAdjustedPixelValueForLength(style.flexBasis(), style); |
1858 case CSSPropertyFlexDirection: | 1841 case CSSPropertyFlexDirection: |
1859 return cssValuePool().createValue(style.flexDirection()); | 1842 return cssValuePool().createValue(style.flexDirection()); |
1860 case CSSPropertyFlexFlow: | 1843 case CSSPropertyFlexFlow: |
1861 return valuesForShorthandProperty(flexFlowShorthand(), style, layoutObje
ct, styledNode, allowVisitedStyle); | 1844 return valuesForShorthandProperty(flexFlowShorthand(), style, layoutObje
ct, styledNode, allowVisitedStyle); |
1862 case CSSPropertyFlexGrow: | 1845 case CSSPropertyFlexGrow: |
1863 return cssValuePool().createValue(style.flexGrow(), CSSPrimitiveValue::U
nitType::Number); | 1846 return cssValuePool().createValue(style.flexGrow(), CSSPrimitiveValue::U
nitType::Number); |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1998 return CSSStringValue::create(style.hyphenationString()); | 1981 return CSSStringValue::create(style.hyphenationString()); |
1999 case CSSPropertyImageRendering: | 1982 case CSSPropertyImageRendering: |
2000 return CSSPrimitiveValue::create(style.imageRendering()); | 1983 return CSSPrimitiveValue::create(style.imageRendering()); |
2001 case CSSPropertyImageOrientation: | 1984 case CSSPropertyImageOrientation: |
2002 if (style.respectImageOrientation() == RespectImageOrientation) | 1985 if (style.respectImageOrientation() == RespectImageOrientation) |
2003 return cssValuePool().createIdentifierValue(CSSValueFromImage); | 1986 return cssValuePool().createIdentifierValue(CSSValueFromImage); |
2004 return cssValuePool().createValue(0, CSSPrimitiveValue::UnitType::Degree
s); | 1987 return cssValuePool().createValue(0, CSSPrimitiveValue::UnitType::Degree
s); |
2005 case CSSPropertyIsolation: | 1988 case CSSPropertyIsolation: |
2006 return cssValuePool().createValue(style.isolation()); | 1989 return cssValuePool().createValue(style.isolation()); |
2007 case CSSPropertyJustifyItems: | 1990 case CSSPropertyJustifyItems: |
2008 return valueForItemPositionWithOverflowAlignment(resolveAlignmentAuto(st
yle.justifyItemsPosition(), &style), style.justifyItemsOverflowAlignment(), styl
e.justifyItemsPositionType()); | 1991 return valueForItemPositionWithOverflowAlignment(style.justifyItems()); |
2009 case CSSPropertyJustifySelf: { | 1992 case CSSPropertyJustifySelf: |
2010 Node* parent = styledNode->parentNode(); | 1993 return valueForItemPositionWithOverflowAlignment(style.justifySelf()); |
2011 return valueForItemPositionWithOverflowAlignment(resolveAlignmentAuto(st
yle.justifySelfPosition(), parent ? parent->ensureComputedStyle() : nullptr), st
yle.justifySelfOverflowAlignment(), NonLegacyPosition); | |
2012 } | |
2013 case CSSPropertyLeft: | 1994 case CSSPropertyLeft: |
2014 return valueForPositionOffset(style, CSSPropertyLeft, layoutObject); | 1995 return valueForPositionOffset(style, CSSPropertyLeft, layoutObject); |
2015 case CSSPropertyLetterSpacing: | 1996 case CSSPropertyLetterSpacing: |
2016 if (!style.letterSpacing()) | 1997 if (!style.letterSpacing()) |
2017 return cssValuePool().createIdentifierValue(CSSValueNormal); | 1998 return cssValuePool().createIdentifierValue(CSSValueNormal); |
2018 return zoomAdjustedPixelValue(style.letterSpacing(), style); | 1999 return zoomAdjustedPixelValue(style.letterSpacing(), style); |
2019 case CSSPropertyWebkitLineClamp: | 2000 case CSSPropertyWebkitLineClamp: |
2020 if (style.lineClamp().isNone()) | 2001 if (style.lineClamp().isNone()) |
2021 return cssValuePool().createIdentifierValue(CSSValueNone); | 2002 return cssValuePool().createIdentifierValue(CSSValueNone); |
2022 return cssValuePool().createValue(style.lineClamp().value(), style.lineC
lamp().isPercentage() ? CSSPrimitiveValue::UnitType::Percentage : CSSPrimitiveVa
lue::UnitType::Number); | 2003 return cssValuePool().createValue(style.lineClamp().value(), style.lineC
lamp().isPercentage() ? CSSPrimitiveValue::UnitType::Percentage : CSSPrimitiveVa
lue::UnitType::Number); |
(...skipping 951 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2974 case CSSPropertyAll: | 2955 case CSSPropertyAll: |
2975 return nullptr; | 2956 return nullptr; |
2976 default: | 2957 default: |
2977 break; | 2958 break; |
2978 } | 2959 } |
2979 ASSERT_NOT_REACHED(); | 2960 ASSERT_NOT_REACHED(); |
2980 return nullptr; | 2961 return nullptr; |
2981 } | 2962 } |
2982 | 2963 |
2983 } // namespace blink | 2964 } // namespace blink |
OLD | NEW |