Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(71)

Side by Side Diff: third_party/WebKit/Source/core/css/resolver/StyleBuilderCustom.cpp

Issue 2366313006: CSS Properties and Values API: Support non-inherited custom properties (Closed)
Patch Set: use de morgan's law Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 #include "core/css/resolver/TransformBuilder.h" 63 #include "core/css/resolver/TransformBuilder.h"
64 #include "core/frame/LocalFrame.h" 64 #include "core/frame/LocalFrame.h"
65 #include "core/frame/Settings.h" 65 #include "core/frame/Settings.h"
66 #include "core/style/ComputedStyle.h" 66 #include "core/style/ComputedStyle.h"
67 #include "core/style/ComputedStyleConstants.h" 67 #include "core/style/ComputedStyleConstants.h"
68 #include "core/style/ContentData.h" 68 #include "core/style/ContentData.h"
69 #include "core/style/CounterContent.h" 69 #include "core/style/CounterContent.h"
70 #include "core/style/QuotesData.h" 70 #include "core/style/QuotesData.h"
71 #include "core/style/SVGComputedStyle.h" 71 #include "core/style/SVGComputedStyle.h"
72 #include "core/style/StyleGeneratedImage.h" 72 #include "core/style/StyleGeneratedImage.h"
73 #include "core/style/StyleVariableData.h" 73 #include "core/style/StyleInheritedVariables.h"
74 #include "core/style/StyleNonInheritedVariables.h"
74 #include "platform/fonts/FontDescription.h" 75 #include "platform/fonts/FontDescription.h"
75 #include "wtf/MathExtras.h" 76 #include "wtf/MathExtras.h"
76 #include "wtf/PtrUtil.h" 77 #include "wtf/PtrUtil.h"
77 #include "wtf/StdLibExtras.h" 78 #include "wtf/StdLibExtras.h"
78 #include "wtf/Vector.h" 79 #include "wtf/Vector.h"
79 #include <memory> 80 #include <memory>
80 81
81 namespace blink { 82 namespace blink {
82 83
83 namespace { 84 namespace {
(...skipping 713 matching lines...) Expand 10 before | Expand all | Expand 10 after
797 798
798 void StyleBuilderFunctions::applyValueCSSPropertyVariable(StyleResolverState& st ate, const CSSValue& value) 799 void StyleBuilderFunctions::applyValueCSSPropertyVariable(StyleResolverState& st ate, const CSSValue& value)
799 { 800 {
800 const CSSCustomPropertyDeclaration& declaration = toCSSCustomPropertyDeclara tion(value); 801 const CSSCustomPropertyDeclaration& declaration = toCSSCustomPropertyDeclara tion(value);
801 const AtomicString& name = declaration.name(); 802 const AtomicString& name = declaration.name();
802 const PropertyRegistry::Registration* registration = nullptr; 803 const PropertyRegistry::Registration* registration = nullptr;
803 const PropertyRegistry* registry = state.document().propertyRegistry(); 804 const PropertyRegistry* registry = state.document().propertyRegistry();
804 if (registry) 805 if (registry)
805 registration = registry->registration(name); 806 registration = registry->registration(name);
806 807
807 switch (declaration.id()) { 808 bool initial = declaration.id() == CSSValueInitial
808 case CSSValueInitial: 809 || (declaration.id() == CSSValueUnset && registration && !registration-> inherits());
809 state.style()->removeVariable(name); 810 bool inherit = declaration.id() == CSSValueInherit
810 break; 811 || (declaration.id() == CSSValueUnset && (!registration || registration- >inherits()));
812 DCHECK(!(initial && inherit));
811 813
812 case CSSValueUnset: 814 if (declaration.id() == CSSValueInternalVariableValue) {
813 case CSSValueInherit: { 815 if (declaration.value()->needsVariableResolution()) {
814 state.style()->removeVariable(name); 816 if (!registration || registration->inherits())
815 StyleVariableData* parentVariables = state.parentStyle()->variables(); 817 state.style()->setUnresolvedInheritedVariable(name, declaration. value());
818 else
819 state.style()->setUnresolvedNonInheritedVariable(name, declarati on.value());
820 return;
821 }
822
823 if (!registration) {
824 state.style()->setResolvedUnregisteredVariable(name, declaration.val ue());
825 return;
826 }
827
828 const CSSValue* parsedValue = declaration.value()->parseForSyntax(regist ration->syntax());
829 if (parsedValue) {
830 parsedValue = &StyleBuilderConverter::convertRegisteredPropertyValue (state, *parsedValue);
831 DCHECK(parsedValue);
832 if (registration->inherits())
833 state.style()->setResolvedInheritedVariable(name, declaration.va lue(), parsedValue);
834 else
835 state.style()->setResolvedNonInheritedVariable(name, declaration .value(), parsedValue);
836 return;
837 }
838 if (registration->inherits())
839 inherit = true;
840 else
841 initial = true;
842 }
843
844 DCHECK(initial ^ inherit);
845
846 if (initial) {
847 if (!registration || registration->inherits())
848 state.style()->removeInheritedVariable(name);
849 else
850 state.style()->removeNonInheritedVariable(name);
851 return;
852 }
853
854 if (!registration || registration->inherits()) {
855 state.style()->removeInheritedVariable(name);
856 StyleInheritedVariables* parentVariables = state.parentStyle()->inherite dVariables();
816 if (!parentVariables) 857 if (!parentVariables)
817 return; 858 return;
818 CSSVariableData* value = parentVariables->getVariable(name); 859 CSSVariableData* parentValue = parentVariables->getVariable(name);
819 if (!value) 860 if (parentValue) {
820 return; 861 if (!registration)
821 state.style()->setVariable(name, value); 862 state.style()->setResolvedUnregisteredVariable(name, parentValue );
822 if (registration) 863 else
823 state.style()->setRegisteredInheritedProperty(name, parentVariables- >registeredInheritedProperty(name)); 864 state.style()->setResolvedInheritedVariable(name, parentValue, p arentVariables->registeredVariable(name));
824 break; 865 }
866 return;
825 } 867 }
826 case CSSValueInternalVariableValue: 868
827 if (registration) { 869 state.style()->removeNonInheritedVariable(name);
828 if (declaration.value()->needsVariableResolution()) { 870 StyleNonInheritedVariables* parentVariables = state.parentStyle()->nonInheri tedVariables();
829 state.style()->setVariable(name, declaration.value()); 871 if (!parentVariables)
830 return; 872 return;
831 } 873 CSSVariableData* parentValue = parentVariables->getVariable(name);
832 const CSSValue* parsedValue = declaration.value()->parseForSyntax(re gistration->syntax()); 874 if (parentValue)
833 if (!parsedValue) { 875 state.style()->setResolvedNonInheritedVariable(name, parentValue, parent Variables->registeredVariable(name));
834 state.style()->setVariable(name, nullptr);
835 state.style()->setRegisteredInheritedProperty(name, nullptr);
836 return;
837 }
838 parsedValue = &StyleBuilderConverter::convertRegisteredPropertyValue (state, *parsedValue);
839 state.style()->setVariable(name, declaration.value());
840 state.style()->setRegisteredInheritedProperty(name, parsedValue);
841 return;
842 }
843 state.style()->setVariable(name, declaration.value());
844 break;
845 default:
846 NOTREACHED();
847 }
848 } 876 }
849 877
850 void StyleBuilderFunctions::applyInheritCSSPropertyBaselineShift(StyleResolverSt ate& state) 878 void StyleBuilderFunctions::applyInheritCSSPropertyBaselineShift(StyleResolverSt ate& state)
851 { 879 {
852 const SVGComputedStyle& parentSvgStyle = state.parentStyle()->svgStyle(); 880 const SVGComputedStyle& parentSvgStyle = state.parentStyle()->svgStyle();
853 EBaselineShift baselineShift = parentSvgStyle.baselineShift(); 881 EBaselineShift baselineShift = parentSvgStyle.baselineShift();
854 SVGComputedStyle& svgStyle = state.style()->accessSVGStyle(); 882 SVGComputedStyle& svgStyle = state.style()->accessSVGStyle();
855 svgStyle.setBaselineShift(baselineShift); 883 svgStyle.setBaselineShift(baselineShift);
856 if (baselineShift == BS_LENGTH) 884 if (baselineShift == BS_LENGTH)
857 svgStyle.setBaselineShiftValue(parentSvgStyle.baselineShiftValue()); 885 svgStyle.setBaselineShiftValue(parentSvgStyle.baselineShiftValue());
(...skipping 24 matching lines...) Expand all
882 } 910 }
883 } 911 }
884 912
885 void StyleBuilderFunctions::applyInheritCSSPropertyPosition(StyleResolverState& state) 913 void StyleBuilderFunctions::applyInheritCSSPropertyPosition(StyleResolverState& state)
886 { 914 {
887 if (!state.parentNode()->isDocumentNode()) 915 if (!state.parentNode()->isDocumentNode())
888 state.style()->setPosition(state.parentStyle()->position()); 916 state.style()->setPosition(state.parentStyle()->position());
889 } 917 }
890 918
891 } // namespace blink 919 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698