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 417 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
428 direction = cssValuePool().createIdentifierValue(CSSValueLeft); | 428 direction = cssValuePool().createIdentifierValue(CSSValueLeft); |
429 break; | 429 break; |
430 case ReflectionRight: | 430 case ReflectionRight: |
431 direction = cssValuePool().createIdentifierValue(CSSValueRight); | 431 direction = cssValuePool().createIdentifierValue(CSSValueRight); |
432 break; | 432 break; |
433 } | 433 } |
434 | 434 |
435 return CSSReflectValue::create(direction, offset, valueForNinePieceImage(ref
lection->mask(), style)); | 435 return CSSReflectValue::create(direction, offset, valueForNinePieceImage(ref
lection->mask(), style)); |
436 } | 436 } |
437 | 437 |
438 static ItemPosition resolveAlignmentAuto(ItemPosition position, const ComputedSt
yle* style) | 438 static CSSValueList* valueForItemPositionWithOverflowAlignment(const StyleSelfAl
ignmentData& data) |
439 { | |
440 if (position != ItemPositionAuto) | |
441 return position; | |
442 | |
443 if (!RuntimeEnabledFeatures::cssGridLayoutEnabled()) | |
444 return ItemPositionStretch; | |
445 | |
446 return isFlexOrGrid(style) ? ItemPositionStretch : ItemPositionStart; | |
447 } | |
448 | |
449 static CSSValueList* valueForItemPositionWithOverflowAlignment(ItemPosition item
Position, OverflowAlignment overflowAlignment, ItemPositionType positionType) | |
450 { | 439 { |
451 CSSValueList* result = CSSValueList::createSpaceSeparated(); | 440 CSSValueList* result = CSSValueList::createSpaceSeparated(); |
452 if (positionType == LegacyPosition) | 441 if (data.positionType() == LegacyPosition) |
453 result->append(CSSPrimitiveValue::createIdentifier(CSSValueLegacy)); | 442 result->append(CSSPrimitiveValue::createIdentifier(CSSValueLegacy)); |
454 result->append(CSSPrimitiveValue::create(itemPosition)); | 443 // To avoid needing to copy the RareNonInheritedData, we repurpose the 'auto
' flag to not just mean 'auto' prior to running the StyleAdjuster but also mean
'normal' after running it. |
455 if (itemPosition >= ItemPositionCenter && overflowAlignment != OverflowAlign
mentDefault) | 444 result->append(CSSPrimitiveValue::create(data.position() == ItemPositionAuto
? ItemPositionNormal : data.position())); |
456 result->append(CSSPrimitiveValue::create(overflowAlignment)); | 445 if (data.position() >= ItemPositionCenter && data.overflow() != OverflowAlig
nmentDefault) |
| 446 result->append(CSSPrimitiveValue::create(data.overflow())); |
457 ASSERT(result->length() <= 2); | 447 ASSERT(result->length() <= 2); |
458 return result; | 448 return result; |
459 } | 449 } |
460 | 450 |
461 static CSSValueList* valuesForGridShorthand(const StylePropertyShorthand& shorth
and, const ComputedStyle& style, const LayoutObject* layoutObject, Node* styledN
ode, bool allowVisitedStyle) | 451 static CSSValueList* valuesForGridShorthand(const StylePropertyShorthand& shorth
and, const ComputedStyle& style, const LayoutObject* layoutObject, Node* styledN
ode, bool allowVisitedStyle) |
462 { | 452 { |
463 CSSValueList* list = CSSValueList::createSlashSeparated(); | 453 CSSValueList* list = CSSValueList::createSlashSeparated(); |
464 for (size_t i = 0; i < shorthand.length(); ++i) { | 454 for (size_t i = 0; i < shorthand.length(); ++i) { |
465 CSSValue* value = ComputedStyleCSSValueMapping::get(shorthand.properties
()[i], style, layoutObject, styledNode, allowVisitedStyle); | 455 CSSValue* value = ComputedStyleCSSValueMapping::get(shorthand.properties
()[i], style, layoutObject, styledNode, allowVisitedStyle); |
466 ASSERT(value); | 456 ASSERT(value); |
(...skipping 1399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1866 } | 1856 } |
1867 case CSSPropertyDirection: | 1857 case CSSPropertyDirection: |
1868 return cssValuePool().createValue(style.direction()); | 1858 return cssValuePool().createValue(style.direction()); |
1869 case CSSPropertyDisplay: | 1859 case CSSPropertyDisplay: |
1870 return cssValuePool().createValue(style.display()); | 1860 return cssValuePool().createValue(style.display()); |
1871 case CSSPropertyEmptyCells: | 1861 case CSSPropertyEmptyCells: |
1872 return cssValuePool().createValue(style.emptyCells()); | 1862 return cssValuePool().createValue(style.emptyCells()); |
1873 case CSSPropertyAlignContent: | 1863 case CSSPropertyAlignContent: |
1874 return valueForContentPositionAndDistributionWithOverflowAlignment(style
.alignContent()); | 1864 return valueForContentPositionAndDistributionWithOverflowAlignment(style
.alignContent()); |
1875 case CSSPropertyAlignItems: | 1865 case CSSPropertyAlignItems: |
1876 return valueForItemPositionWithOverflowAlignment(resolveAlignmentAuto(st
yle.alignItemsPosition(), &style), style.alignItemsOverflowAlignment(), NonLegac
yPosition); | 1866 return valueForItemPositionWithOverflowAlignment(style.alignItems()); |
1877 case CSSPropertyAlignSelf: { | 1867 case CSSPropertyAlignSelf: |
1878 ItemPosition position = style.alignSelfPosition(); | 1868 return valueForItemPositionWithOverflowAlignment(style.alignSelf()); |
1879 if (position == ItemPositionAuto) { | |
1880 // TODO(lajava): This code doesn't work for ShadowDOM (see Node::par
entComputedStyle) | |
1881 const ComputedStyle* parentStyle = styledNode->parentNode() ? styled
Node->parentNode()->ensureComputedStyle() : nullptr; | |
1882 position = parentStyle ? ComputedStyle::resolveAlignment(*parentStyl
e, style, resolveAlignmentAuto(parentStyle->alignItemsPosition(), parentStyle))
: ItemPositionStart; | |
1883 } | |
1884 return valueForItemPositionWithOverflowAlignment(position, style.alignSe
lfOverflowAlignment(), NonLegacyPosition); | |
1885 } | |
1886 case CSSPropertyFlex: | 1869 case CSSPropertyFlex: |
1887 return valuesForShorthandProperty(flexShorthand(), style, layoutObject,
styledNode, allowVisitedStyle); | 1870 return valuesForShorthandProperty(flexShorthand(), style, layoutObject,
styledNode, allowVisitedStyle); |
1888 case CSSPropertyFlexBasis: | 1871 case CSSPropertyFlexBasis: |
1889 return zoomAdjustedPixelValueForLength(style.flexBasis(), style); | 1872 return zoomAdjustedPixelValueForLength(style.flexBasis(), style); |
1890 case CSSPropertyFlexDirection: | 1873 case CSSPropertyFlexDirection: |
1891 return cssValuePool().createValue(style.flexDirection()); | 1874 return cssValuePool().createValue(style.flexDirection()); |
1892 case CSSPropertyFlexFlow: | 1875 case CSSPropertyFlexFlow: |
1893 return valuesForShorthandProperty(flexFlowShorthand(), style, layoutObje
ct, styledNode, allowVisitedStyle); | 1876 return valuesForShorthandProperty(flexFlowShorthand(), style, layoutObje
ct, styledNode, allowVisitedStyle); |
1894 case CSSPropertyFlexGrow: | 1877 case CSSPropertyFlexGrow: |
1895 return cssValuePool().createValue(style.flexGrow(), CSSPrimitiveValue::U
nitType::Number); | 1878 return cssValuePool().createValue(style.flexGrow(), CSSPrimitiveValue::U
nitType::Number); |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2030 return CSSStringValue::create(style.hyphenationString()); | 2013 return CSSStringValue::create(style.hyphenationString()); |
2031 case CSSPropertyImageRendering: | 2014 case CSSPropertyImageRendering: |
2032 return CSSPrimitiveValue::create(style.imageRendering()); | 2015 return CSSPrimitiveValue::create(style.imageRendering()); |
2033 case CSSPropertyImageOrientation: | 2016 case CSSPropertyImageOrientation: |
2034 if (style.respectImageOrientation() == RespectImageOrientation) | 2017 if (style.respectImageOrientation() == RespectImageOrientation) |
2035 return cssValuePool().createIdentifierValue(CSSValueFromImage); | 2018 return cssValuePool().createIdentifierValue(CSSValueFromImage); |
2036 return cssValuePool().createValue(0, CSSPrimitiveValue::UnitType::Degree
s); | 2019 return cssValuePool().createValue(0, CSSPrimitiveValue::UnitType::Degree
s); |
2037 case CSSPropertyIsolation: | 2020 case CSSPropertyIsolation: |
2038 return cssValuePool().createValue(style.isolation()); | 2021 return cssValuePool().createValue(style.isolation()); |
2039 case CSSPropertyJustifyItems: | 2022 case CSSPropertyJustifyItems: |
2040 return valueForItemPositionWithOverflowAlignment(resolveAlignmentAuto(st
yle.justifyItemsPosition(), &style), style.justifyItemsOverflowAlignment(), styl
e.justifyItemsPositionType()); | 2023 return valueForItemPositionWithOverflowAlignment(style.justifyItems()); |
2041 case CSSPropertyJustifySelf: { | 2024 case CSSPropertyJustifySelf: |
2042 Node* parent = styledNode->parentNode(); | 2025 return valueForItemPositionWithOverflowAlignment(style.justifySelf()); |
2043 return valueForItemPositionWithOverflowAlignment(resolveAlignmentAuto(st
yle.justifySelfPosition(), parent ? parent->ensureComputedStyle() : nullptr), st
yle.justifySelfOverflowAlignment(), NonLegacyPosition); | |
2044 } | |
2045 case CSSPropertyLeft: | 2026 case CSSPropertyLeft: |
2046 return valueForPositionOffset(style, CSSPropertyLeft, layoutObject); | 2027 return valueForPositionOffset(style, CSSPropertyLeft, layoutObject); |
2047 case CSSPropertyLetterSpacing: | 2028 case CSSPropertyLetterSpacing: |
2048 if (!style.letterSpacing()) | 2029 if (!style.letterSpacing()) |
2049 return cssValuePool().createIdentifierValue(CSSValueNormal); | 2030 return cssValuePool().createIdentifierValue(CSSValueNormal); |
2050 return zoomAdjustedPixelValue(style.letterSpacing(), style); | 2031 return zoomAdjustedPixelValue(style.letterSpacing(), style); |
2051 case CSSPropertyWebkitLineClamp: | 2032 case CSSPropertyWebkitLineClamp: |
2052 if (style.lineClamp().isNone()) | 2033 if (style.lineClamp().isNone()) |
2053 return cssValuePool().createIdentifierValue(CSSValueNone); | 2034 return cssValuePool().createIdentifierValue(CSSValueNone); |
2054 return cssValuePool().createValue(style.lineClamp().value(), style.lineC
lamp().isPercentage() ? CSSPrimitiveValue::UnitType::Percentage : CSSPrimitiveVa
lue::UnitType::Number); | 2035 return cssValuePool().createValue(style.lineClamp().value(), style.lineC
lamp().isPercentage() ? CSSPrimitiveValue::UnitType::Percentage : CSSPrimitiveVa
lue::UnitType::Number); |
(...skipping 949 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3004 case CSSPropertyAll: | 2985 case CSSPropertyAll: |
3005 return nullptr; | 2986 return nullptr; |
3006 default: | 2987 default: |
3007 break; | 2988 break; |
3008 } | 2989 } |
3009 ASSERT_NOT_REACHED(); | 2990 ASSERT_NOT_REACHED(); |
3010 return nullptr; | 2991 return nullptr; |
3011 } | 2992 } |
3012 | 2993 |
3013 } // namespace blink | 2994 } // namespace blink |
OLD | NEW |