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

Unified Diff: third_party/WebKit/Source/core/css/StylePropertySerializer.cpp

Issue 2368013002: [WIP] CSS Motion Path: offset shorthand ready for position and anchor
Patch Set: offset-anchor default is not auto Created 4 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
Index: third_party/WebKit/Source/core/css/StylePropertySerializer.cpp
diff --git a/third_party/WebKit/Source/core/css/StylePropertySerializer.cpp b/third_party/WebKit/Source/core/css/StylePropertySerializer.cpp
index c067f76c1c233ecc83699205fe30ab7b41faca5f..2a0cc16ed8666799994551820159d8ee4e73c46a 100644
--- a/third_party/WebKit/Source/core/css/StylePropertySerializer.cpp
+++ b/third_party/WebKit/Source/core/css/StylePropertySerializer.cpp
@@ -27,6 +27,7 @@
#include "core/css/CSSCustomPropertyDeclaration.h"
#include "core/css/CSSPendingSubstitutionValue.h"
#include "core/css/CSSPropertyMetadata.h"
+#include "core/css/CSSValuePair.h"
#include "core/css/CSSValuePool.h"
#include "wtf/StdLibExtras.h"
#include "wtf/text/StringBuilder.h"
@@ -457,7 +458,7 @@ String StylePropertySerializer::getPropertyValue(CSSPropertyID propertyID) const
case CSSPropertyMotion:
return getShorthandValue(motionShorthand());
case CSSPropertyOffset:
- return getShorthandValue(offsetShorthand());
+ return offsetValue();
case CSSPropertyWebkitMarginCollapse:
return getShorthandValue(webkitMarginCollapseShorthand());
case CSSPropertyOverflow:
@@ -546,6 +547,56 @@ void StylePropertySerializer::appendFontLonghandValueIfNotNormal(CSSPropertyID p
result.append(value);
}
+String StylePropertySerializer::offsetValue() const
Timothy Loh 2016/09/27 08:17:48 This is going to do the wrong thing when the ancho
Eric Willigers 2016/09/29 03:53:18 Now changed to never read them if not enabled.
+{
+ int offsetPositionPropertyIndex = m_propertySet.findPropertyIndex(CSSPropertyOffsetPosition);
+ int offsetPathPropertyIndex = m_propertySet.findPropertyIndex(CSSPropertyOffsetPath);
+ int offsetDistancePropertyIndex = m_propertySet.findPropertyIndex(CSSPropertyOffsetDistance);
+ int offsetRotationPropertyIndex = m_propertySet.findPropertyIndex(CSSPropertyOffsetRotation);
+ int offsetAnchorPropertyIndex = m_propertySet.findPropertyIndex(CSSPropertyOffsetAnchor);
+ DCHECK_NE(offsetPositionPropertyIndex, -1);
+ DCHECK_NE(offsetPathPropertyIndex, -1);
+ DCHECK_NE(offsetDistancePropertyIndex, -1);
+ DCHECK_NE(offsetRotationPropertyIndex, -1);
+ DCHECK_NE(offsetAnchorPropertyIndex, -1);
+
+ PropertyValueForSerializer offsetPositionProperty = m_propertySet.propertyAt(offsetPositionPropertyIndex);
+ PropertyValueForSerializer offsetPathProperty = m_propertySet.propertyAt(offsetPathPropertyIndex);
+ PropertyValueForSerializer offsetDistanceProperty = m_propertySet.propertyAt(offsetDistancePropertyIndex);
+ PropertyValueForSerializer offsetRotationProperty = m_propertySet.propertyAt(offsetRotationPropertyIndex);
+ PropertyValueForSerializer offsetAnchorProperty = m_propertySet.propertyAt(offsetAnchorPropertyIndex);
+
+ const CSSValue* offsetPositionValue = offsetPositionProperty.value();
Timothy Loh 2016/09/27 08:17:48 = m_propertySet.getPropertyCSSValue(CSSPropertyOff
Eric Willigers 2016/09/29 03:53:18 Done.
+ const CSSValue* offsetPathValue = offsetPathProperty.value();
+ const CSSValue* offsetDistanceValue = offsetDistanceProperty.value();
+ const CSSValue* offsetRotationValue = offsetRotationProperty.value();
+ const CSSValue* offsetAnchorValue = offsetAnchorProperty.value();
+
+ StringBuilder result;
+ if (offsetPositionValue->isValuePair()) {
+ result.append(offsetPositionValue->cssText());
+ result.append(' ');
+ }
+ result.append(offsetPathValue->cssText());
+ result.append(' ');
+ result.append(offsetDistanceValue->cssText());
+ result.append(' ');
+ result.append(offsetRotationValue->cssText());
+
+ bool anchorIsCentre = false;
+ if (offsetAnchorValue->isValuePair()) {
+ const CSSValuePair* pair = toCSSValuePair(offsetAnchorValue);
+ const CSSPrimitiveValue& first = toCSSPrimitiveValue(pair->first());
+ const CSSPrimitiveValue& second = toCSSPrimitiveValue(pair->second());
+ anchorIsCentre = first.isPercentage() && first.getDoubleValue() == 50 && second.isPercentage() && second.getDoubleValue() == 50;
+ }
+ if (!anchorIsCentre) {
+ result.append('/');
+ result.append(offsetAnchorValue->cssText());
+ }
+ return result.toString();
+}
+
String StylePropertySerializer::fontValue() const
{
int fontSizePropertyIndex = m_propertySet.findPropertyIndex(CSSPropertyFontSize);

Powered by Google App Engine
This is Rietveld 408576698