| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 3 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 4 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) | 4 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) |
| 5 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) | 5 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) |
| 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc.
All rights reserved. | 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. |
| 7 * All rights reserved. |
| 7 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> | 8 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> |
| 8 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> | 9 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> |
| 9 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) | 10 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. |
| 11 * (http://www.torchmobile.com/) |
| 10 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. | 12 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. |
| 11 * Copyright (C) Research In Motion Limited 2011. All rights reserved. | 13 * Copyright (C) Research In Motion Limited 2011. All rights reserved. |
| 12 * Redistribution and use in source and binary forms, with or without | 14 * Redistribution and use in source and binary forms, with or without |
| 13 * modification, are permitted provided that the following conditions are | 15 * modification, are permitted provided that the following conditions are |
| 14 * met: | 16 * met: |
| 15 * | 17 * |
| 16 * * Redistributions of source code must retain the above copyright | 18 * * Redistributions of source code must retain the above copyright |
| 17 * notice, this list of conditions and the following disclaimer. | 19 * notice, this list of conditions and the following disclaimer. |
| 18 * * Redistributions in binary form must reproduce the above | 20 * * Redistributions in binary form must reproduce the above |
| 19 * copyright notice, this list of conditions and the following disclaimer | 21 * copyright notice, this list of conditions and the following disclaimer |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 122 return; | 124 return; |
| 123 } | 125 } |
| 124 | 126 |
| 125 DCHECK(!isShorthandProperty(id)) << "Shorthand property id = " << id | 127 DCHECK(!isShorthandProperty(id)) << "Shorthand property id = " << id |
| 126 << " wasn't expanded at parsing time"; | 128 << " wasn't expanded at parsing time"; |
| 127 | 129 |
| 128 bool isInherit = state.parentNode() && value.isInheritedValue(); | 130 bool isInherit = state.parentNode() && value.isInheritedValue(); |
| 129 bool isInitial = value.isInitialValue() || | 131 bool isInitial = value.isInitialValue() || |
| 130 (!state.parentNode() && value.isInheritedValue()); | 132 (!state.parentNode() && value.isInheritedValue()); |
| 131 | 133 |
| 132 DCHECK(!isInherit || | 134 // isInherit => !isInitial && isInitial => !isInherit |
| 133 !isInitial); // isInherit -> !isInitial && isInitial -> !isInherit | 135 DCHECK(!isInherit || !isInitial); |
| 134 DCHECK( | 136 // isInherit => (state.parentNode() && state.parentStyle()) |
| 135 !isInherit || | 137 DCHECK(!isInherit || (state.parentNode() && state.parentStyle())); |
| 136 (state.parentNode() && | |
| 137 state | |
| 138 .parentStyle())); // isInherit -> (state.parentNode() && state.paren
tStyle()) | |
| 139 | 138 |
| 140 if (!state.applyPropertyToRegularStyle() && | 139 if (!state.applyPropertyToRegularStyle() && |
| 141 (!state.applyPropertyToVisitedLinkStyle() || | 140 (!state.applyPropertyToVisitedLinkStyle() || |
| 142 !isValidVisitedLinkProperty(id))) { | 141 !isValidVisitedLinkProperty(id))) { |
| 143 // Limit the properties that can be applied to only the ones honored by :vis
ited. | 142 // Limit the properties that can be applied to only the ones honored by |
| 143 // :visited. |
| 144 return; | 144 return; |
| 145 } | 145 } |
| 146 | 146 |
| 147 if (isInherit && !state.parentStyle()->hasExplicitlyInheritedProperties() && | 147 if (isInherit && !state.parentStyle()->hasExplicitlyInheritedProperties() && |
| 148 !CSSPropertyMetadata::isInheritedProperty(id)) { | 148 !CSSPropertyMetadata::isInheritedProperty(id)) { |
| 149 state.parentStyle()->setHasExplicitlyInheritedProperties(); | 149 state.parentStyle()->setHasExplicitlyInheritedProperties(); |
| 150 } else if (value.isUnsetValue()) { | 150 } else if (value.isUnsetValue()) { |
| 151 DCHECK(!isInherit && !isInitial); | 151 DCHECK(!isInherit && !isInitial); |
| 152 if (CSSPropertyMetadata::isInheritedProperty(id)) | 152 if (CSSPropertyMetadata::isInheritedProperty(id)) |
| 153 isInherit = true; | 153 isInherit = true; |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 221 bool hotSpotSpecified = image.hotSpotSpecified(); | 221 bool hotSpotSpecified = image.hotSpotSpecified(); |
| 222 | 222 |
| 223 Element* element = state.element(); | 223 Element* element = state.element(); |
| 224 if (SVGCursorElement* cursorElement = | 224 if (SVGCursorElement* cursorElement = |
| 225 image.getSVGCursorElement(element)) { | 225 image.getSVGCursorElement(element)) { |
| 226 if (image.cachedImageURL() != | 226 if (image.cachedImageURL() != |
| 227 element->document().completeURL( | 227 element->document().completeURL( |
| 228 cursorElement->href()->currentValue()->value())) | 228 cursorElement->href()->currentValue()->value())) |
| 229 image.clearImageResource(); | 229 image.clearImageResource(); |
| 230 | 230 |
| 231 // Set the hot spot if it wasn't specified in the CSS but is specified
in the SVG. | 231 // Set the hot spot if it wasn't specified in the CSS but is specified |
| 232 // in the SVG. |
| 232 if (!hotSpotSpecified) { | 233 if (!hotSpotSpecified) { |
| 233 hotSpotSpecified = true; | 234 hotSpotSpecified = true; |
| 234 SVGLengthContext lengthContext(0); | 235 SVGLengthContext lengthContext(0); |
| 235 // x() and y() return 0 if they're not specified in cursorElement. | 236 // x() and y() return 0 if they're not specified in cursorElement. |
| 236 float svgX = roundf( | 237 float svgX = roundf( |
| 237 cursorElement->x()->currentValue()->value(lengthContext)); | 238 cursorElement->x()->currentValue()->value(lengthContext)); |
| 238 hotSpot.setX(static_cast<int>(svgX)); | 239 hotSpot.setX(static_cast<int>(svgX)); |
| 239 float svgY = roundf( | 240 float svgY = roundf( |
| 240 cursorElement->y()->currentValue()->value(lengthContext)); | 241 cursorElement->y()->currentValue()->value(lengthContext)); |
| 241 hotSpot.setY(static_cast<int>(svgY)); | 242 hotSpot.setY(static_cast<int>(svgY)); |
| (...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 490 int position = second.getIntValue(); | 491 int position = second.getIntValue(); |
| 491 DCHECK(position > 0 && position <= 100); | 492 DCHECK(position > 0 && position <= 100); |
| 492 state.style()->setSnapHeightPosition(position); | 493 state.style()->setSnapHeightPosition(position); |
| 493 } | 494 } |
| 494 | 495 |
| 495 void StyleBuilderFunctions::applyValueCSSPropertyTextAlign( | 496 void StyleBuilderFunctions::applyValueCSSPropertyTextAlign( |
| 496 StyleResolverState& state, | 497 StyleResolverState& state, |
| 497 const CSSValue& value) { | 498 const CSSValue& value) { |
| 498 if (value.isIdentifierValue() && | 499 if (value.isIdentifierValue() && |
| 499 toCSSIdentifierValue(value).getValueID() != CSSValueWebkitMatchParent) { | 500 toCSSIdentifierValue(value).getValueID() != CSSValueWebkitMatchParent) { |
| 500 // Special case for th elements - UA stylesheet text-align does not apply if
parent's computed value for text-align is not its initial value | 501 // Special case for th elements - UA stylesheet text-align does not apply if |
| 502 // parent's computed value for text-align is not its initial value |
| 501 // https://html.spec.whatwg.org/multipage/rendering.html#tables-2 | 503 // https://html.spec.whatwg.org/multipage/rendering.html#tables-2 |
| 502 const CSSIdentifierValue& identValue = toCSSIdentifierValue(value); | 504 const CSSIdentifierValue& identValue = toCSSIdentifierValue(value); |
| 503 if (identValue.getValueID() == CSSValueInternalCenter && | 505 if (identValue.getValueID() == CSSValueInternalCenter && |
| 504 state.parentStyle()->textAlign() != ComputedStyle::initialTextAlign()) | 506 state.parentStyle()->textAlign() != ComputedStyle::initialTextAlign()) |
| 505 state.style()->setTextAlign(state.parentStyle()->textAlign()); | 507 state.style()->setTextAlign(state.parentStyle()->textAlign()); |
| 506 else | 508 else |
| 507 state.style()->setTextAlign(identValue.convertTo<ETextAlign>()); | 509 state.style()->setTextAlign(identValue.convertTo<ETextAlign>()); |
| 508 } else if (state.parentStyle()->textAlign() == TASTART) | 510 } else if (state.parentStyle()->textAlign() == TASTART) |
| 509 state.style()->setTextAlign( | 511 state.style()->setTextAlign( |
| 510 state.parentStyle()->isLeftToRightDirection() ? LEFT : RIGHT); | 512 state.parentStyle()->isLeftToRightDirection() ? LEFT : RIGHT); |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 583 state.style()->setVerticalAlign( | 585 state.style()->setVerticalAlign( |
| 584 toCSSIdentifierValue(value).convertTo<EVerticalAlign>()); | 586 toCSSIdentifierValue(value).convertTo<EVerticalAlign>()); |
| 585 } else { | 587 } else { |
| 586 state.style()->setVerticalAlignLength( | 588 state.style()->setVerticalAlignLength( |
| 587 toCSSPrimitiveValue(value).convertToLength( | 589 toCSSPrimitiveValue(value).convertToLength( |
| 588 state.cssToLengthConversionData())); | 590 state.cssToLengthConversionData())); |
| 589 } | 591 } |
| 590 } | 592 } |
| 591 | 593 |
| 592 static void resetEffectiveZoom(StyleResolverState& state) { | 594 static void resetEffectiveZoom(StyleResolverState& state) { |
| 593 // Reset the zoom in effect. This allows the setZoom method to accurately comp
ute a new zoom in effect. | 595 // Reset the zoom in effect. This allows the setZoom method to accurately |
| 596 // compute a new zoom in effect. |
| 594 state.setEffectiveZoom(state.parentStyle() | 597 state.setEffectiveZoom(state.parentStyle() |
| 595 ? state.parentStyle()->effectiveZoom() | 598 ? state.parentStyle()->effectiveZoom() |
| 596 : ComputedStyle::initialZoom()); | 599 : ComputedStyle::initialZoom()); |
| 597 } | 600 } |
| 598 | 601 |
| 599 void StyleBuilderFunctions::applyInitialCSSPropertyZoom( | 602 void StyleBuilderFunctions::applyInitialCSSPropertyZoom( |
| 600 StyleResolverState& state) { | 603 StyleResolverState& state) { |
| 601 resetEffectiveZoom(state); | 604 resetEffectiveZoom(state); |
| 602 state.setZoom(ComputedStyle::initialZoom()); | 605 state.setZoom(ComputedStyle::initialZoom()); |
| 603 } | 606 } |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 763 willChangeContents || state.parentStyle()->subtreeWillChangeContents()); | 766 willChangeContents || state.parentStyle()->subtreeWillChangeContents()); |
| 764 } | 767 } |
| 765 | 768 |
| 766 void StyleBuilderFunctions::applyInitialCSSPropertyContent( | 769 void StyleBuilderFunctions::applyInitialCSSPropertyContent( |
| 767 StyleResolverState& state) { | 770 StyleResolverState& state) { |
| 768 state.style()->setContent(nullptr); | 771 state.style()->setContent(nullptr); |
| 769 } | 772 } |
| 770 | 773 |
| 771 void StyleBuilderFunctions::applyInheritCSSPropertyContent( | 774 void StyleBuilderFunctions::applyInheritCSSPropertyContent( |
| 772 StyleResolverState&) { | 775 StyleResolverState&) { |
| 773 // FIXME: In CSS3, it will be possible to inherit content. In CSS2 it is not.
This | 776 // FIXME: In CSS3, it will be possible to inherit content. In CSS2 it is not. |
| 774 // note is a reminder that eventually "inherit" needs to be supported. | 777 // This note is a reminder that eventually "inherit" needs to be supported. |
| 775 } | 778 } |
| 776 | 779 |
| 777 void StyleBuilderFunctions::applyValueCSSPropertyContent( | 780 void StyleBuilderFunctions::applyValueCSSPropertyContent( |
| 778 StyleResolverState& state, | 781 StyleResolverState& state, |
| 779 const CSSValue& value) { | 782 const CSSValue& value) { |
| 780 if (value.isIdentifierValue()) { | 783 if (value.isIdentifierValue()) { |
| 781 DCHECK(toCSSIdentifierValue(value).getValueID() == CSSValueNormal || | 784 DCHECK(toCSSIdentifierValue(value).getValueID() == CSSValueNormal || |
| 782 toCSSIdentifierValue(value).getValueID() == CSSValueNone); | 785 toCSSIdentifierValue(value).getValueID() == CSSValueNone); |
| 783 state.style()->setContent(nullptr); | 786 state.style()->setContent(nullptr); |
| 784 return; | 787 return; |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1039 } | 1042 } |
| 1040 } | 1043 } |
| 1041 | 1044 |
| 1042 void StyleBuilderFunctions::applyInheritCSSPropertyPosition( | 1045 void StyleBuilderFunctions::applyInheritCSSPropertyPosition( |
| 1043 StyleResolverState& state) { | 1046 StyleResolverState& state) { |
| 1044 if (!state.parentNode()->isDocumentNode()) | 1047 if (!state.parentNode()->isDocumentNode()) |
| 1045 state.style()->setPosition(state.parentStyle()->position()); | 1048 state.style()->setPosition(state.parentStyle()->position()); |
| 1046 } | 1049 } |
| 1047 | 1050 |
| 1048 } // namespace blink | 1051 } // namespace blink |
| OLD | NEW |