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

Unified Diff: Source/core/animation/LengthPropertyFunctions.cpp

Issue 1243313002: Migrate the remaining CSS properties interpolable as Lengths to LengthInterpolationType (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Add composition tests Created 5 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/animation/LengthPropertyFunctions.h ('k') | Source/core/animation/LengthStyleInterpolation.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/animation/LengthPropertyFunctions.cpp
diff --git a/Source/core/animation/LengthPropertyFunctions.cpp b/Source/core/animation/LengthPropertyFunctions.cpp
index 64d133fc49981883a37d3538c6b4642ae0973772..b1368a8516b304f50d662120ea71848981ddec81 100644
--- a/Source/core/animation/LengthPropertyFunctions.cpp
+++ b/Source/core/animation/LengthPropertyFunctions.cpp
@@ -13,26 +13,426 @@ namespace blink {
ValueRange LengthPropertyFunctions::valueRange(CSSPropertyID property)
{
- ASSERT(property == CSSPropertyLeft);
- return ValueRangeAll;
+ switch (property) {
+ case CSSPropertyBorderBottomWidth:
+ case CSSPropertyBorderLeftWidth:
+ case CSSPropertyBorderRightWidth:
+ case CSSPropertyBorderTopWidth:
+ case CSSPropertyFlexBasis:
+ case CSSPropertyHeight:
+ case CSSPropertyLineHeight:
+ case CSSPropertyMaxHeight:
+ case CSSPropertyMaxWidth:
+ case CSSPropertyMinHeight:
+ case CSSPropertyMinWidth:
+ case CSSPropertyOutlineWidth:
+ case CSSPropertyPaddingBottom:
+ case CSSPropertyPaddingLeft:
+ case CSSPropertyPaddingRight:
+ case CSSPropertyPaddingTop:
+ case CSSPropertyPerspective:
+ case CSSPropertyR:
+ case CSSPropertyRx:
+ case CSSPropertyRy:
+ case CSSPropertyShapeMargin:
+ case CSSPropertyStrokeWidth:
+ case CSSPropertyWebkitBorderHorizontalSpacing:
+ case CSSPropertyWebkitBorderVerticalSpacing:
+ case CSSPropertyWebkitColumnGap:
+ case CSSPropertyWebkitColumnWidth:
+ case CSSPropertyWidth:
+ return ValueRangeNonNegative;
+ default:
+ return ValueRangeAll;
+ }
+}
+
+bool LengthPropertyFunctions::isZoomedLength(CSSPropertyID property)
+{
+ return property != CSSPropertyStrokeWidth;
}
bool LengthPropertyFunctions::getPixelsForKeyword(CSSPropertyID property, CSSValueID valueID, double& result)
{
- ASSERT(property == CSSPropertyLeft);
- return false;
+ switch (property) {
+ case CSSPropertyBaselineShift:
+ if (valueID == CSSValueBaseline) {
+ result = 0;
+ return true;
+ }
+ return false;
+ case CSSPropertyBorderBottomWidth:
+ case CSSPropertyBorderLeftWidth:
+ case CSSPropertyBorderRightWidth:
+ case CSSPropertyBorderTopWidth:
+ case CSSPropertyWebkitColumnRuleWidth:
+ case CSSPropertyOutlineWidth:
+ if (valueID == CSSValueThin) {
+ result = 1;
+ return true;
+ }
+ if (valueID == CSSValueMedium) {
+ result = 3;
+ return true;
+ }
+ if (valueID == CSSValueThick) {
+ result = 5;
+ return true;
+ }
+ return false;
+ case CSSPropertyLetterSpacing:
+ case CSSPropertyWordSpacing:
+ if (valueID == CSSValueNormal) {
+ result = 0;
+ return true;
+ }
+ return false;
+ default:
+ return false;
+ }
}
-bool LengthPropertyFunctions::getLength(CSSPropertyID property, const ComputedStyle& style, Length& result)
+static Length lengthFromUnsigned(unsigned short value)
{
- ASSERT(property == CSSPropertyLeft);
- result = style.left();
- return true;
+ return Length(static_cast<float>(value), Fixed);
}
bool LengthPropertyFunctions::getInitialLength(CSSPropertyID property, Length& result)
{
- return getLength(property, *ComputedStyle::initialStyle(), result);
+ switch (property) {
+ // The computed value of "initial" for the following properties is 0px if the associated *-style property resolves to "none" or "hidden".
+ // border-width: https://drafts.csswg.org/css-backgrounds-3/#the-border-width
+ // outline-width: https://drafts.csswg.org/css-ui-3/#outline-width
+ // -webkit-column-rule-width: https://drafts.csswg.org/css-multicol-1/#crw
+ // We ignore this value adjustment for animations and use the wrong value for hidden widths to avoid
+ // having to restart our animations based on the computed *-style values.
+ // This is acceptable since animations running on hidden widths are unobservable to the user, even via getComputedStyle().
+ case CSSPropertyBorderBottomWidth:
+ case CSSPropertyBorderLeftWidth:
+ case CSSPropertyBorderRightWidth:
+ case CSSPropertyBorderTopWidth:
+ result = lengthFromUnsigned(ComputedStyle::initialBorderWidth());
+ return true;
+ case CSSPropertyOutlineWidth:
+ result = lengthFromUnsigned(ComputedStyle::initialOutlineWidth());
+ return true;
+ case CSSPropertyWebkitColumnRuleWidth:
+ result = lengthFromUnsigned(ComputedStyle::initialColumnRuleWidth());
+ return true;
+
+ default:
+ return getLength(property, *ComputedStyle::initialStyle(), result);
+ }
+}
+
+bool LengthPropertyFunctions::getLength(CSSPropertyID property, const ComputedStyle& style, Length& result)
+{
+ switch (property) {
+ case CSSPropertyBottom:
+ result = style.bottom();
+ return true;
+ case CSSPropertyCx:
+ result = style.svgStyle().cx();
+ return true;
+ case CSSPropertyCy:
+ result = style.svgStyle().cy();
+ return true;
+ case CSSPropertyFlexBasis:
+ result = style.flexBasis();
+ return true;
+ case CSSPropertyHeight:
+ result = style.height();
+ return true;
+ case CSSPropertyLeft:
+ result = style.left();
+ return true;
+ case CSSPropertyMarginBottom:
+ result = style.marginBottom();
+ return true;
+ case CSSPropertyMarginLeft:
+ result = style.marginLeft();
+ return true;
+ case CSSPropertyMarginRight:
+ result = style.marginRight();
+ return true;
+ case CSSPropertyMarginTop:
+ result = style.marginTop();
+ return true;
+ case CSSPropertyMaxHeight:
+ result = style.maxHeight();
+ return true;
+ case CSSPropertyMaxWidth:
+ result = style.maxWidth();
+ return true;
+ case CSSPropertyMinHeight:
+ result = style.minHeight();
+ return true;
+ case CSSPropertyMinWidth:
+ result = style.minWidth();
+ return true;
+ case CSSPropertyMotionOffset:
+ result = style.motionOffset();
+ return true;
+ case CSSPropertyPaddingBottom:
+ result = style.paddingBottom();
+ return true;
+ case CSSPropertyPaddingLeft:
+ result = style.paddingLeft();
+ return true;
+ case CSSPropertyPaddingRight:
+ result = style.paddingRight();
+ return true;
+ case CSSPropertyPaddingTop:
+ result = style.paddingTop();
+ return true;
+ case CSSPropertyR:
+ result = style.svgStyle().r();
+ return true;
+ case CSSPropertyRight:
+ result = style.right();
+ return true;
+ case CSSPropertyRx:
+ result = style.svgStyle().rx();
+ return true;
+ case CSSPropertyRy:
+ result = style.svgStyle().ry();
+ return true;
+ case CSSPropertyShapeMargin:
+ result = style.shapeMargin();
+ return true;
+ case CSSPropertyStrokeDashoffset:
+ result = style.strokeDashOffset();
+ return true;
+ case CSSPropertyTextIndent:
+ result = style.textIndent();
+ return true;
+ case CSSPropertyTop:
+ result = style.top();
+ return true;
+ case CSSPropertyWebkitPerspectiveOriginX:
+ result = style.perspectiveOriginX();
+ return true;
+ case CSSPropertyWebkitPerspectiveOriginY:
+ result = style.perspectiveOriginY();
+ return true;
+ case CSSPropertyWebkitTransformOriginX:
+ result = style.transformOriginX();
+ return true;
+ case CSSPropertyWebkitTransformOriginY:
+ result = style.transformOriginY();
+ return true;
+ case CSSPropertyWidth:
+ result = style.width();
+ return true;
+ case CSSPropertyX:
+ result = style.svgStyle().x();
+ return true;
+ case CSSPropertyY:
+ result = style.svgStyle().y();
+ return true;
+
+ case CSSPropertyBorderBottomWidth:
+ result = Length(style.borderBottomWidth(), Fixed);
+ return true;
+ case CSSPropertyBorderLeftWidth:
+ result = Length(style.borderLeftWidth(), Fixed);
+ return true;
+ case CSSPropertyBorderRightWidth:
+ result = Length(style.borderRightWidth(), Fixed);
+ return true;
+ case CSSPropertyBorderTopWidth:
+ result = Length(style.borderTopWidth(), Fixed);
+ return true;
+ case CSSPropertyLetterSpacing:
+ result = Length(style.letterSpacing(), Fixed);
+ return true;
+ case CSSPropertyOutlineOffset:
+ result = Length(style.outlineOffset(), Fixed);
+ return true;
+ case CSSPropertyOutlineWidth:
+ result = Length(style.outlineWidth(), Fixed);
+ return true;
+ case CSSPropertyWebkitBorderHorizontalSpacing:
+ result = Length(style.horizontalBorderSpacing(), Fixed);
+ return true;
+ case CSSPropertyWebkitBorderVerticalSpacing:
+ result = Length(style.verticalBorderSpacing(), Fixed);
+ return true;
+ case CSSPropertyWebkitColumnGap:
+ result = Length(style.columnGap(), Fixed);
+ return true;
+ case CSSPropertyWebkitColumnRuleWidth:
+ result = Length(style.columnRuleWidth(), Fixed);
+ return true;
+ case CSSPropertyWebkitTransformOriginZ:
+ result = Length(style.transformOriginZ(), Fixed);
+ return true;
+ case CSSPropertyWordSpacing:
+ result = Length(style.wordSpacing(), Fixed);
+ return true;
+
+ case CSSPropertyBaselineShift:
+ if (style.baselineShift() != BS_LENGTH)
+ return false;
+ result = style.baselineShiftValue();
+ return true;
+ case CSSPropertyPerspective:
+ if (!style.hasPerspective())
+ return false;
+ result = Length(style.perspective(), Fixed);
+ return true;
+ case CSSPropertyStrokeWidth:
+ ASSERT(!isZoomedLength(CSSPropertyStrokeWidth));
+ result = style.strokeWidth().length();
+ return true;
+ case CSSPropertyVerticalAlign:
+ if (style.verticalAlign() != LENGTH)
+ return false;
+ result = style.verticalAlignLength();
+ return true;
+ case CSSPropertyWebkitColumnWidth:
+ if (style.hasAutoColumnWidth())
+ return false;
+ result = Length(style.columnWidth(), Fixed);
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool LengthPropertyFunctions::setLength(CSSPropertyID property, ComputedStyle& style, const Length& value)
+{
+ switch (property) {
+ // Setters that take a Length value.
+ case CSSPropertyBaselineShift:
+ style.setBaselineShiftValue(value);
+ return true;
+ case CSSPropertyBottom:
+ style.setBottom(value);
+ return true;
+ case CSSPropertyCx:
+ style.setCx(value);
+ return true;
+ case CSSPropertyCy:
+ style.setCy(value);
+ return true;
+ case CSSPropertyFlexBasis:
+ style.setFlexBasis(value);
+ return true;
+ case CSSPropertyHeight:
+ style.setHeight(value);
+ return true;
+ case CSSPropertyLeft:
+ style.setLeft(value);
+ return true;
+ case CSSPropertyLineHeight:
+ style.setLineHeight(value);
+ return true;
+ case CSSPropertyMarginBottom:
+ style.setMarginBottom(value);
+ return true;
+ case CSSPropertyMarginLeft:
+ style.setMarginLeft(value);
+ return true;
+ case CSSPropertyMarginRight:
+ style.setMarginRight(value);
+ return true;
+ case CSSPropertyMarginTop:
+ style.setMarginTop(value);
+ return true;
+ case CSSPropertyMaxHeight:
+ style.setMaxHeight(value);
+ return true;
+ case CSSPropertyMaxWidth:
+ style.setMaxWidth(value);
+ return true;
+ case CSSPropertyMinHeight:
+ style.setMinHeight(value);
+ return true;
+ case CSSPropertyMinWidth:
+ style.setMinWidth(value);
+ return true;
+ case CSSPropertyMotionOffset:
+ style.setMotionOffset(value);
+ return true;
+ case CSSPropertyPaddingBottom:
+ style.setPaddingBottom(value);
+ return true;
+ case CSSPropertyPaddingLeft:
+ style.setPaddingLeft(value);
+ return true;
+ case CSSPropertyPaddingRight:
+ style.setPaddingRight(value);
+ return true;
+ case CSSPropertyPaddingTop:
+ style.setPaddingTop(value);
+ return true;
+ case CSSPropertyR:
+ style.setR(value);
+ return true;
+ case CSSPropertyRx:
+ style.setRx(value);
+ return true;
+ case CSSPropertyRy:
+ style.setRy(value);
+ return true;
+ case CSSPropertyRight:
+ style.setRight(value);
+ return true;
+ case CSSPropertyShapeMargin:
+ style.setShapeMargin(value);
+ return true;
+ case CSSPropertyStrokeDashoffset:
+ style.setStrokeDashOffset(value);
+ return true;
+ case CSSPropertyTop:
+ style.setTop(value);
+ return true;
+ case CSSPropertyWidth:
+ style.setWidth(value);
+ return true;
+ case CSSPropertyWebkitPerspectiveOriginX:
+ style.setPerspectiveOriginX(value);
+ return true;
+ case CSSPropertyWebkitPerspectiveOriginY:
+ style.setPerspectiveOriginY(value);
+ return true;
+ case CSSPropertyWebkitTransformOriginX:
+ style.setTransformOriginX(value);
+ return true;
+ case CSSPropertyWebkitTransformOriginY:
+ style.setTransformOriginY(value);
+ return true;
+ case CSSPropertyX:
+ style.setX(value);
+ return true;
+ case CSSPropertyY:
+ style.setY(value);
+ return true;
+
+ // TODO(alancutter): Support setters that take a numeric value (need to resolve percentages).
+ case CSSPropertyBorderBottomWidth:
+ case CSSPropertyBorderLeftWidth:
+ case CSSPropertyBorderRightWidth:
+ case CSSPropertyBorderTopWidth:
+ case CSSPropertyLetterSpacing:
+ case CSSPropertyOutlineOffset:
+ case CSSPropertyOutlineWidth:
+ case CSSPropertyPerspective:
+ case CSSPropertyStrokeWidth:
+ case CSSPropertyVerticalAlign:
+ case CSSPropertyWebkitBorderHorizontalSpacing:
+ case CSSPropertyWebkitBorderVerticalSpacing:
+ case CSSPropertyWebkitColumnGap:
+ case CSSPropertyWebkitColumnRuleWidth:
+ case CSSPropertyWebkitColumnWidth:
+ case CSSPropertyWebkitTransformOriginZ:
+ case CSSPropertyWordSpacing:
+ return false;
+
+ default:
+ return false;
+ }
}
} // namespace blink
« no previous file with comments | « Source/core/animation/LengthPropertyFunctions.h ('k') | Source/core/animation/LengthStyleInterpolation.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698