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

Side by Side Diff: third_party/WebKit/Source/core/animation/CSSBorderImageLengthBoxInterpolationType.cpp

Issue 2812213002: Add CSSInterpolationType specific ConversionChecker (Closed)
Patch Set: rebased Created 3 years, 6 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 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/animation/CSSBorderImageLengthBoxInterpolationType.h" 5 #include "core/animation/CSSBorderImageLengthBoxInterpolationType.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include "core/animation/BorderImageLengthBoxPropertyFunctions.h" 8 #include "core/animation/BorderImageLengthBoxPropertyFunctions.h"
9 #include "core/animation/LengthInterpolationFunctions.h" 9 #include "core/animation/LengthInterpolationFunctions.h"
10 #include "core/animation/SideIndex.h" 10 #include "core/animation/SideIndex.h"
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 const SideTypes side_types_; 112 const SideTypes side_types_;
113 Vector<RefPtr<NonInterpolableValue>> side_non_interpolable_values_; 113 Vector<RefPtr<NonInterpolableValue>> side_non_interpolable_values_;
114 }; 114 };
115 115
116 DEFINE_NON_INTERPOLABLE_VALUE_TYPE(CSSBorderImageLengthBoxNonInterpolableValue); 116 DEFINE_NON_INTERPOLABLE_VALUE_TYPE(CSSBorderImageLengthBoxNonInterpolableValue);
117 DEFINE_NON_INTERPOLABLE_VALUE_TYPE_CASTS( 117 DEFINE_NON_INTERPOLABLE_VALUE_TYPE_CASTS(
118 CSSBorderImageLengthBoxNonInterpolableValue); 118 CSSBorderImageLengthBoxNonInterpolableValue);
119 119
120 namespace { 120 namespace {
121 121
122 class UnderlyingSideTypesChecker : public InterpolationType::ConversionChecker { 122 class UnderlyingSideTypesChecker
123 : public CSSInterpolationType::CSSConversionChecker {
123 public: 124 public:
124 static std::unique_ptr<UnderlyingSideTypesChecker> Create( 125 static std::unique_ptr<UnderlyingSideTypesChecker> Create(
125 const SideTypes& underlying_side_types) { 126 const SideTypes& underlying_side_types) {
126 return WTF::WrapUnique( 127 return WTF::WrapUnique(
127 new UnderlyingSideTypesChecker(underlying_side_types)); 128 new UnderlyingSideTypesChecker(underlying_side_types));
128 } 129 }
129 130
130 static SideTypes GetUnderlyingSideTypes( 131 static SideTypes GetUnderlyingSideTypes(
131 const InterpolationValue& underlying) { 132 const InterpolationValue& underlying) {
132 return ToCSSBorderImageLengthBoxNonInterpolableValue( 133 return ToCSSBorderImageLengthBoxNonInterpolableValue(
133 *underlying.non_interpolable_value) 134 *underlying.non_interpolable_value)
134 .GetSideTypes(); 135 .GetSideTypes();
135 } 136 }
136 137
137 private: 138 private:
138 UnderlyingSideTypesChecker(const SideTypes& underlying_side_types) 139 UnderlyingSideTypesChecker(const SideTypes& underlying_side_types)
139 : underlying_side_types_(underlying_side_types) {} 140 : underlying_side_types_(underlying_side_types) {}
140 141
141 bool IsValid(const InterpolationEnvironment&, 142 bool IsValid(const StyleResolverState&,
142 const InterpolationValue& underlying) const final { 143 const InterpolationValue& underlying) const final {
143 return underlying_side_types_ == GetUnderlyingSideTypes(underlying); 144 return underlying_side_types_ == GetUnderlyingSideTypes(underlying);
144 } 145 }
145 146
146 const SideTypes underlying_side_types_; 147 const SideTypes underlying_side_types_;
147 }; 148 };
148 149
149 class InheritedSideTypesChecker : public InterpolationType::ConversionChecker { 150 class InheritedSideTypesChecker
151 : public CSSInterpolationType::CSSConversionChecker {
150 public: 152 public:
151 static std::unique_ptr<InheritedSideTypesChecker> Create( 153 static std::unique_ptr<InheritedSideTypesChecker> Create(
152 CSSPropertyID property, 154 CSSPropertyID property,
153 const SideTypes& inherited_side_types) { 155 const SideTypes& inherited_side_types) {
154 return WTF::WrapUnique( 156 return WTF::WrapUnique(
155 new InheritedSideTypesChecker(property, inherited_side_types)); 157 new InheritedSideTypesChecker(property, inherited_side_types));
156 } 158 }
157 159
158 private: 160 private:
159 InheritedSideTypesChecker(CSSPropertyID property, 161 InheritedSideTypesChecker(CSSPropertyID property,
160 const SideTypes& inherited_side_types) 162 const SideTypes& inherited_side_types)
161 : property_(property), inherited_side_types_(inherited_side_types) {} 163 : property_(property), inherited_side_types_(inherited_side_types) {}
162 164
163 bool IsValid(const InterpolationEnvironment& environment, 165 bool IsValid(const StyleResolverState& state,
164 const InterpolationValue& underlying) const final { 166 const InterpolationValue& underlying) const final {
165 return inherited_side_types_ == 167 return inherited_side_types_ ==
166 SideTypes( 168 SideTypes(
167 BorderImageLengthBoxPropertyFunctions::GetBorderImageLengthBox( 169 BorderImageLengthBoxPropertyFunctions::GetBorderImageLengthBox(
168 property_, *environment.GetState().ParentStyle())); 170 property_, *state.ParentStyle()));
169 } 171 }
170 172
171 const CSSPropertyID property_; 173 const CSSPropertyID property_;
172 const SideTypes inherited_side_types_; 174 const SideTypes inherited_side_types_;
173 }; 175 };
174 176
175 InterpolationValue ConvertBorderImageLengthBox(const BorderImageLengthBox& box, 177 InterpolationValue ConvertBorderImageLengthBox(const BorderImageLengthBox& box,
176 double zoom) { 178 double zoom) {
177 std::unique_ptr<InterpolableList> list = 179 std::unique_ptr<InterpolableList> list =
178 InterpolableList::Create(kSideIndexCount); 180 InterpolableList::Create(kSideIndexCount);
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 return Length(kAuto); 397 return Length(kAuto);
396 } 398 }
397 }; 399 };
398 BorderImageLengthBox box(convert_side(kSideTop), convert_side(kSideRight), 400 BorderImageLengthBox box(convert_side(kSideTop), convert_side(kSideRight),
399 convert_side(kSideBottom), convert_side(kSideLeft)); 401 convert_side(kSideBottom), convert_side(kSideLeft));
400 BorderImageLengthBoxPropertyFunctions::SetBorderImageLengthBox( 402 BorderImageLengthBoxPropertyFunctions::SetBorderImageLengthBox(
401 CssProperty(), *state.Style(), box); 403 CssProperty(), *state.Style(), box);
402 } 404 }
403 405
404 } // namespace blink 406 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698