Index: Source/core/css/CSSBasicShapes.cpp |
diff --git a/Source/core/css/CSSBasicShapes.cpp b/Source/core/css/CSSBasicShapes.cpp |
index 05e8b4b6a25f5abbcf6da27962674bc7d7d9fccf..4e07b40254ab105a57b2d19062c779c7ecdf79f6 100644 |
--- a/Source/core/css/CSSBasicShapes.cpp |
+++ b/Source/core/css/CSSBasicShapes.cpp |
@@ -115,19 +115,27 @@ bool CSSBasicShapeRectangle::hasVariableReference() const |
|| (m_layoutBox && m_layoutBox->hasVariableReference()); |
} |
-static String buildCircleString(const String& x, const String& y, const String& radius, const String& layoutBox) |
+static String buildCircleString(const String& radius, const String& centerX, const String& centerY, const String& layoutBox) |
{ |
+ char at[] = "at"; |
+ char separator[] = " "; |
StringBuilder result; |
- const char separator[] = ", "; |
result.appendLiteral("circle("); |
- result.append(x); |
- result.appendLiteral(separator); |
- result.append(y); |
- result.appendLiteral(separator); |
- result.append(radius); |
- result.append(')'); |
- if (!layoutBox.isEmpty()) { |
- result.append(' '); |
+ if (!radius.isNull()) |
+ result.append(radius); |
+ |
+ if (!centerX.isNull() || !centerY.isNull()) { |
+ if (!radius.isNull()) |
+ result.appendLiteral(separator); |
+ result.append(at); |
+ result.appendLiteral(separator); |
+ result.append(centerX); |
+ result.appendLiteral(separator); |
+ result.append(centerY); |
+ } |
+ result.append(")"); |
+ if (layoutBox.length()) { |
+ result.appendLiteral(separator); |
result.append(layoutBox); |
} |
return result.toString(); |
@@ -135,8 +143,9 @@ static String buildCircleString(const String& x, const String& y, const String& |
String CSSBasicShapeCircle::cssText() const |
{ |
- return buildCircleString(m_centerX->cssText(), |
- m_centerY->cssText(), m_radius->cssText(), |
+ return buildCircleString(m_radius ? m_radius->cssText() : String(), |
+ m_centerX ? m_centerX->cssText() : String(), |
+ m_centerY ? m_centerY->cssText() : String(), |
m_layoutBox ? m_layoutBox->cssText() : String()); |
} |
@@ -154,14 +163,49 @@ bool CSSBasicShapeCircle::equals(const CSSBasicShape& shape) const |
String CSSBasicShapeCircle::serializeResolvingVariables(const HashMap<AtomicString, String>& variables) const |
{ |
- return buildCircleString(m_centerX->serializeResolvingVariables(variables), |
- m_centerY->serializeResolvingVariables(variables), |
- m_radius->serializeResolvingVariables(variables), |
- m_layoutBox ? m_layoutBox->serializeResolvingVariables(variables) : String()); |
+ return buildCircleString(m_radius.get() ? m_radius->serializeResolvingVariables(variables) : String(), |
+ m_centerX.get() ? m_centerX->serializeResolvingVariables(variables) : String(), |
+ m_centerY.get() ? m_centerY->serializeResolvingVariables(variables) : String(), |
+ m_layoutBox.get() ? m_layoutBox->serializeResolvingVariables(variables) : String()); |
} |
bool CSSBasicShapeCircle::hasVariableReference() const |
{ |
+ return (m_centerX && m_centerX->hasVariableReference()) |
+ || (m_centerY && m_centerY->hasVariableReference()) |
+ || (m_radius && m_radius->hasVariableReference()); |
+} |
+ |
+static String buildDeprecatedCircleString(const String& x, const String& y, const String& radius) |
+{ |
+ return "circle(" + x + ", " + y + ", " + radius + ')'; |
+} |
+ |
+String CSSDeprecatedBasicShapeCircle::cssText() const |
+{ |
+ return buildDeprecatedCircleString(m_centerX->cssText(), m_centerY->cssText(), m_radius->cssText()); |
+} |
+ |
+bool CSSDeprecatedBasicShapeCircle::equals(const CSSBasicShape& shape) const |
+{ |
+ if (shape.type() != CSSDeprecatedBasicShapeCircleType) |
+ return false; |
+ |
+ const CSSDeprecatedBasicShapeCircle& other = static_cast<const CSSDeprecatedBasicShapeCircle&>(shape); |
+ return compareCSSValuePtr(m_centerX, other.m_centerX) |
+ && compareCSSValuePtr(m_centerY, other.m_centerY) |
+ && compareCSSValuePtr(m_radius, other.m_radius); |
+} |
+ |
+String CSSDeprecatedBasicShapeCircle::serializeResolvingVariables(const HashMap<AtomicString, String>& variables) const |
+{ |
+ return buildDeprecatedCircleString(m_centerX->serializeResolvingVariables(variables), |
+ m_centerY->serializeResolvingVariables(variables), |
+ m_radius->serializeResolvingVariables(variables)); |
+} |
+ |
+bool CSSDeprecatedBasicShapeCircle::hasVariableReference() const |
+{ |
return m_centerX->hasVariableReference() |
|| m_centerY->hasVariableReference() |
|| m_radius->hasVariableReference() |