| 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.
All rights reserved. |
| 7 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> | 7 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> |
| 8 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> | 8 * 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/) | 9 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) |
| 10 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. | 10 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 #include "core/css/CSSCounterValue.h" | 47 #include "core/css/CSSCounterValue.h" |
| 48 #include "core/css/CSSCursorImageValue.h" | 48 #include "core/css/CSSCursorImageValue.h" |
| 49 #include "core/css/CSSFunctionValue.h" | 49 #include "core/css/CSSFunctionValue.h" |
| 50 #include "core/css/CSSGradientValue.h" | 50 #include "core/css/CSSGradientValue.h" |
| 51 #include "core/css/CSSGridTemplateAreasValue.h" | 51 #include "core/css/CSSGridTemplateAreasValue.h" |
| 52 #include "core/css/CSSHelper.h" | 52 #include "core/css/CSSHelper.h" |
| 53 #include "core/css/CSSImageSetValue.h" | 53 #include "core/css/CSSImageSetValue.h" |
| 54 #include "core/css/CSSPathValue.h" | 54 #include "core/css/CSSPathValue.h" |
| 55 #include "core/css/CSSPrimitiveValueMappings.h" | 55 #include "core/css/CSSPrimitiveValueMappings.h" |
| 56 #include "core/css/CSSPropertyMetadata.h" | 56 #include "core/css/CSSPropertyMetadata.h" |
| 57 #include "core/css/CSSURIValue.h" |
| 57 #include "core/css/CSSValuePair.h" | 58 #include "core/css/CSSValuePair.h" |
| 58 #include "core/css/StylePropertySet.h" | 59 #include "core/css/StylePropertySet.h" |
| 59 #include "core/css/StyleRule.h" | 60 #include "core/css/StyleRule.h" |
| 60 #include "core/css/resolver/ElementStyleResources.h" | 61 #include "core/css/resolver/ElementStyleResources.h" |
| 61 #include "core/css/resolver/FilterOperationResolver.h" | 62 #include "core/css/resolver/FilterOperationResolver.h" |
| 62 #include "core/css/resolver/FontBuilder.h" | 63 #include "core/css/resolver/FontBuilder.h" |
| 63 #include "core/css/resolver/StyleBuilder.h" | 64 #include "core/css/resolver/StyleBuilder.h" |
| 64 #include "core/css/resolver/TransformBuilder.h" | 65 #include "core/css/resolver/TransformBuilder.h" |
| 65 #include "core/frame/LocalFrame.h" | 66 #include "core/frame/LocalFrame.h" |
| 66 #include "core/frame/Settings.h" | 67 #include "core/frame/Settings.h" |
| (...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 562 NinePieceImage image; | 563 NinePieceImage image; |
| 563 CSSToStyleMap::mapNinePieceImage(state, CSSPropertyWebkitBorderImage, *value
, image); | 564 CSSToStyleMap::mapNinePieceImage(state, CSSPropertyWebkitBorderImage, *value
, image); |
| 564 state.style()->setBorderImage(image); | 565 state.style()->setBorderImage(image); |
| 565 } | 566 } |
| 566 | 567 |
| 567 void StyleBuilderFunctions::applyValueCSSPropertyWebkitClipPath(StyleResolverSta
te& state, CSSValue* value) | 568 void StyleBuilderFunctions::applyValueCSSPropertyWebkitClipPath(StyleResolverSta
te& state, CSSValue* value) |
| 568 { | 569 { |
| 569 if (value->isBasicShapeValue()) { | 570 if (value->isBasicShapeValue()) { |
| 570 state.style()->setClipPath(ShapeClipPathOperation::create(basicShapeForV
alue(state, *value))); | 571 state.style()->setClipPath(ShapeClipPathOperation::create(basicShapeForV
alue(state, *value))); |
| 571 } | 572 } |
| 572 if (value->isPrimitiveValue()) { | 573 if (value->isPrimitiveValue() && toCSSPrimitiveValue(value)->getValueID() ==
CSSValueNone) { |
| 573 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 574 state.style()->setClipPath(nullptr); |
| 574 if (primitiveValue->getValueID() == CSSValueNone) { | 575 } |
| 575 state.style()->setClipPath(nullptr); | 576 if (value->isURIValue()) { |
| 576 } else if (primitiveValue->isURI()) { | 577 String cssURLValue = toCSSURIValue(value)->value(); |
| 577 String cssURLValue = primitiveValue->getStringValue(); | 578 KURL url = state.document().completeURL(cssURLValue); |
| 578 KURL url = state.document().completeURL(cssURLValue); | 579 // FIXME: It doesn't work with forward or external SVG references (see h
ttps://bugs.webkit.org/show_bug.cgi?id=90405) |
| 579 // FIXME: It doesn't work with forward or external SVG references (s
ee https://bugs.webkit.org/show_bug.cgi?id=90405) | 580 state.style()->setClipPath(ReferenceClipPathOperation::create(cssURLValu
e, AtomicString(url.fragmentIdentifier()))); |
| 580 state.style()->setClipPath(ReferenceClipPathOperation::create(cssURL
Value, AtomicString(url.fragmentIdentifier()))); | |
| 581 } | |
| 582 } | 581 } |
| 583 } | 582 } |
| 584 | 583 |
| 585 void StyleBuilderFunctions::applyValueCSSPropertyWebkitFilter(StyleResolverState
& state, CSSValue* value) | 584 void StyleBuilderFunctions::applyValueCSSPropertyWebkitFilter(StyleResolverState
& state, CSSValue* value) |
| 586 { | 585 { |
| 587 // FIXME: We should just make this a converter | 586 // FIXME: We should just make this a converter |
| 588 FilterOperations operations; | 587 FilterOperations operations; |
| 589 FilterOperationResolver::createFilterOperations(*value, state.cssToLengthCon
versionData(), operations, state); | 588 FilterOperationResolver::createFilterOperations(*value, state.cssToLengthCon
versionData(), operations, state); |
| 590 state.style()->setFilter(operations); | 589 state.style()->setFilter(operations); |
| 591 } | 590 } |
| (...skipping 29 matching lines...) Expand all Loading... |
| 621 CSSPrimitiveValue* value = toCSSPrimitiveValue(list->item(i)); | 620 CSSPrimitiveValue* value = toCSSPrimitiveValue(list->item(i)); |
| 622 if (value->getValueID() == CSSValueFilled || value->getValueID() ==
CSSValueOpen) | 621 if (value->getValueID() == CSSValueFilled || value->getValueID() ==
CSSValueOpen) |
| 623 state.style()->setTextEmphasisFill(*value); | 622 state.style()->setTextEmphasisFill(*value); |
| 624 else | 623 else |
| 625 state.style()->setTextEmphasisMark(*value); | 624 state.style()->setTextEmphasisMark(*value); |
| 626 } | 625 } |
| 627 state.style()->setTextEmphasisCustomMark(nullAtom); | 626 state.style()->setTextEmphasisCustomMark(nullAtom); |
| 628 return; | 627 return; |
| 629 } | 628 } |
| 630 | 629 |
| 630 if (value->isStringValue()) { |
| 631 state.style()->setTextEmphasisFill(TextEmphasisFillFilled); |
| 632 state.style()->setTextEmphasisMark(TextEmphasisMarkCustom); |
| 633 state.style()->setTextEmphasisCustomMark(AtomicString(toCSSStringValue(v
alue)->value())); |
| 634 return; |
| 635 } |
| 636 |
| 631 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 637 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); |
| 632 | 638 |
| 633 if (primitiveValue->isString()) { | |
| 634 state.style()->setTextEmphasisFill(TextEmphasisFillFilled); | |
| 635 state.style()->setTextEmphasisMark(TextEmphasisMarkCustom); | |
| 636 state.style()->setTextEmphasisCustomMark(AtomicString(primitiveValue->ge
tStringValue())); | |
| 637 return; | |
| 638 } | |
| 639 | |
| 640 state.style()->setTextEmphasisCustomMark(nullAtom); | 639 state.style()->setTextEmphasisCustomMark(nullAtom); |
| 641 | 640 |
| 642 if (primitiveValue->getValueID() == CSSValueFilled || primitiveValue->getVal
ueID() == CSSValueOpen) { | 641 if (primitiveValue->getValueID() == CSSValueFilled || primitiveValue->getVal
ueID() == CSSValueOpen) { |
| 643 state.style()->setTextEmphasisFill(*primitiveValue); | 642 state.style()->setTextEmphasisFill(*primitiveValue); |
| 644 state.style()->setTextEmphasisMark(TextEmphasisMarkAuto); | 643 state.style()->setTextEmphasisMark(TextEmphasisMarkAuto); |
| 645 } else { | 644 } else { |
| 646 state.style()->setTextEmphasisFill(TextEmphasisFillFilled); | 645 state.style()->setTextEmphasisFill(TextEmphasisFillFilled); |
| 647 state.style()->setTextEmphasisMark(*primitiveValue); | 646 state.style()->setTextEmphasisMark(*primitiveValue); |
| 648 } | 647 } |
| 649 } | 648 } |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 731 } | 730 } |
| 732 | 731 |
| 733 if (item->isFunctionValue()) { | 732 if (item->isFunctionValue()) { |
| 734 CSSFunctionValue* functionValue = toCSSFunctionValue(item.get()); | 733 CSSFunctionValue* functionValue = toCSSFunctionValue(item.get()); |
| 735 ASSERT(functionValue->functionType() == CSSValueAttr); | 734 ASSERT(functionValue->functionType() == CSSValueAttr); |
| 736 // FIXME: Can a namespace be specified for an attr(foo)? | 735 // FIXME: Can a namespace be specified for an attr(foo)? |
| 737 if (state.style()->styleType() == NOPSEUDO) | 736 if (state.style()->styleType() == NOPSEUDO) |
| 738 state.style()->setUnique(); | 737 state.style()->setUnique(); |
| 739 else | 738 else |
| 740 state.parentStyle()->setUnique(); | 739 state.parentStyle()->setUnique(); |
| 741 QualifiedName attr(nullAtom, AtomicString(toCSSPrimitiveValue(functi
onValue->item(0))->getStringValue()), nullAtom); | 740 QualifiedName attr(nullAtom, AtomicString(toCSSCustomIdentValue(func
tionValue->item(0))->value()), nullAtom); |
| 742 const AtomicString& value = state.element()->getAttribute(attr); | 741 const AtomicString& value = state.element()->getAttribute(attr); |
| 743 state.style()->setContent(value.isNull() ? emptyString() : value.str
ing(), didSet); | 742 state.style()->setContent(value.isNull() ? emptyString() : value.str
ing(), didSet); |
| 744 didSet = true; | 743 didSet = true; |
| 745 } | 744 } |
| 746 | 745 |
| 747 if (!item->isPrimitiveValue()) | 746 if (!item->isPrimitiveValue() && !item->isStringValue()) |
| 748 continue; | 747 continue; |
| 749 | 748 |
| 750 CSSPrimitiveValue* contentValue = toCSSPrimitiveValue(item.get()); | 749 if (item->isStringValue()) { |
| 751 | 750 state.style()->setContent(toCSSStringValue(*item).value().impl(), di
dSet); |
| 752 if (contentValue->isString()) { | |
| 753 state.style()->setContent(contentValue->getStringValue().impl(), did
Set); | |
| 754 didSet = true; | 751 didSet = true; |
| 755 } else { | 752 } else { |
| 756 switch (contentValue->getValueID()) { | 753 switch (toCSSPrimitiveValue(*item).getValueID()) { |
| 757 case CSSValueOpenQuote: | 754 case CSSValueOpenQuote: |
| 758 state.style()->setContent(OPEN_QUOTE, didSet); | 755 state.style()->setContent(OPEN_QUOTE, didSet); |
| 759 didSet = true; | 756 didSet = true; |
| 760 break; | 757 break; |
| 761 case CSSValueCloseQuote: | 758 case CSSValueCloseQuote: |
| 762 state.style()->setContent(CLOSE_QUOTE, didSet); | 759 state.style()->setContent(CLOSE_QUOTE, didSet); |
| 763 didSet = true; | 760 didSet = true; |
| 764 break; | 761 break; |
| 765 case CSSValueNoOpenQuote: | 762 case CSSValueNoOpenQuote: |
| 766 state.style()->setContent(NO_OPEN_QUOTE, didSet); | 763 state.style()->setContent(NO_OPEN_QUOTE, didSet); |
| 767 didSet = true; | 764 didSet = true; |
| 768 break; | 765 break; |
| 769 case CSSValueNoCloseQuote: | 766 case CSSValueNoCloseQuote: |
| 770 state.style()->setContent(NO_CLOSE_QUOTE, didSet); | 767 state.style()->setContent(NO_CLOSE_QUOTE, didSet); |
| 771 didSet = true; | 768 didSet = true; |
| 772 break; | 769 break; |
| 773 default: | 770 default: |
| 774 // normal and none do not have any effect. | 771 // normal and none do not have any effect. |
| 775 { } | 772 { } |
| 776 } | 773 } |
| 777 } | 774 } |
| 778 } | 775 } |
| 779 if (!didSet) | 776 if (!didSet) |
| 780 state.style()->clearContent(); | 777 state.style()->clearContent(); |
| 781 } | 778 } |
| 782 | 779 |
| 783 void StyleBuilderFunctions::applyValueCSSPropertyWebkitLocale(StyleResolverState
& state, CSSValue* value) | 780 void StyleBuilderFunctions::applyValueCSSPropertyWebkitLocale(StyleResolverState
& state, CSSValue* value) |
| 784 { | 781 { |
| 785 const CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 782 if (value->isPrimitiveValue()) { |
| 786 if (primitiveValue->getValueID() == CSSValueAuto) { | 783 ASSERT(toCSSPrimitiveValue(value)->getValueID() == CSSValueAuto); |
| 787 state.style()->setLocale(nullAtom); | 784 state.style()->setLocale(nullAtom); |
| 788 } else { | 785 } else { |
| 789 ASSERT(primitiveValue->isString()); | 786 state.style()->setLocale(AtomicString(toCSSStringValue(value)->value()))
; |
| 790 state.style()->setLocale(AtomicString(primitiveValue->getStringValue()))
; | |
| 791 } | 787 } |
| 792 state.fontBuilder().setScript(state.style()->locale()); | 788 state.fontBuilder().setScript(state.style()->locale()); |
| 793 } | 789 } |
| 794 | 790 |
| 795 void StyleBuilderFunctions::applyInitialCSSPropertyWebkitAppRegion(StyleResolver
State&) | 791 void StyleBuilderFunctions::applyInitialCSSPropertyWebkitAppRegion(StyleResolver
State&) |
| 796 { | 792 { |
| 797 } | 793 } |
| 798 | 794 |
| 799 void StyleBuilderFunctions::applyInheritCSSPropertyWebkitAppRegion(StyleResolver
State&) | 795 void StyleBuilderFunctions::applyInheritCSSPropertyWebkitAppRegion(StyleResolver
State&) |
| 800 { | 796 { |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 851 return; | 847 return; |
| 852 case CSSValueSuper: | 848 case CSSValueSuper: |
| 853 svgStyle.setBaselineShift(BS_SUPER); | 849 svgStyle.setBaselineShift(BS_SUPER); |
| 854 return; | 850 return; |
| 855 default: | 851 default: |
| 856 ASSERT_NOT_REACHED(); | 852 ASSERT_NOT_REACHED(); |
| 857 } | 853 } |
| 858 } | 854 } |
| 859 | 855 |
| 860 } // namespace blink | 856 } // namespace blink |
| OLD | NEW |