bool DeferredLegacyStyleInterpolation::interpolationRequiresStyleResolve(const CSSValue& value) { // FIXME: should not require resolving styles for inherit/initial/unset. if (value.isCSSWideKeyword()) return true; if (value.isBasicShapeCircleValue()) return interpolationRequiresStyleResolve(toCSSBasicShapeCircleValue(value)); if (value.isBasicShapeEllipseValue()) return interpolationRequiresStyleResolve(toCSSBasicShapeEllipseValue(value)); if (value.isBasicShapePolygonValue()) return interpolationRequiresStyleResolve(toCSSBasicShapePolygonValue(value)); if (value.isBasicShapeInsetValue()) return interpolationRequiresStyleResolve(toCSSBasicShapeInsetValue(value)); if (value.isColorValue()) return false; if (value.isStringValue() || value.isURIValue() || value.isCustomIdentValue()) return false; if (value.isPrimitiveValue()) return interpolationRequiresStyleResolve(toCSSPrimitiveValue(value)); if (value.isQuadValue()) return interpolationRequiresStyleResolve(toCSSQuadValue(value)); if (value.isValueList()) return interpolationRequiresStyleResolve(toCSSValueList(value)); if (value.isValuePair()) return interpolationRequiresStyleResolve(toCSSValuePair(value)); if (value.isImageValue()) return interpolationRequiresStyleResolve(toCSSImageValue(value)); if (value.isShadowValue()) return interpolationRequiresStyleResolve(toCSSShadowValue(value)); if (value.isSVGDocumentValue()) return interpolationRequiresStyleResolve(toCSSSVGDocumentValue(value)); // FIXME: consider other custom types. return true; }
std::unique_ptr<InterpolableValue> CSSColorInterpolationType::maybeCreateInterpolableColor(const CSSValue& value) { if (value.isColorValue()) return createInterpolableColor(toCSSColorValue(value).value()); if (!value.isPrimitiveValue()) return nullptr; const CSSPrimitiveValue& primitive = toCSSPrimitiveValue(value); if (!primitive.isValueID()) return nullptr; if (!StyleColor::isColorKeyword(primitive.getValueID())) return nullptr; return createInterpolableColor(primitive.getValueID()); }
Color TextLinkColors::colorFromCSSValue(const CSSValue& value, Color currentColor, bool forVisitedLink) const { if (value.isColorValue()) return toCSSColorValue(value).value(); CSSValueID valueID = toCSSPrimitiveValue(value).getValueID(); switch (valueID) { case 0: return Color(); case CSSValueWebkitText: return textColor(); case CSSValueWebkitLink: return forVisitedLink ? visitedLinkColor() : linkColor(); case CSSValueWebkitActivelink: return activeLinkColor(); case CSSValueWebkitFocusRingColor: return LayoutTheme::theme().focusRingColor(); case CSSValueInvert: // We don't support outline-color: invert case CSSValueCurrentcolor: return currentColor; default: return StyleColor::colorFromKeyword(valueID); } }