ExceptionOr<void> WebKitCSSMatrix::setMatrixValue(const String& string) { if (string.isEmpty()) return { }; auto styleDeclaration = MutableStyleProperties::create(); if (CSSParser::parseValue(styleDeclaration, CSSPropertyTransform, string, true, HTMLStandardMode) == CSSParser::ParseResult::Error) return Exception { SYNTAX_ERR }; // Convert to TransformOperations. This can fail if a property requires style (i.e., param uses 'ems' or 'exs') auto value = styleDeclaration->getPropertyCSSValue(CSSPropertyTransform); // Check for a "none" or empty transform. In these cases we can use the default identity matrix. if (!value || (is<CSSPrimitiveValue>(*value) && downcast<CSSPrimitiveValue>(*value).valueID() == CSSValueNone)) return { }; TransformOperations operations; if (!transformsForValue(*value, CSSToLengthConversionData(), operations)) return Exception { SYNTAX_ERR }; // Convert transform operations to a TransformationMatrix. This can fail if a parameter has a percentage ('%'). TransformationMatrix matrix; for (auto& operation : operations.operations()) { if (operation->apply(matrix, IntSize(0, 0))) return Exception { SYNTAX_ERR }; } m_matrix = matrix; return { }; }
void WebKitCSSMatrix::setMatrixValue(const String& string, ExceptionCode& ec) { if (string.isEmpty()) return; RefPtr<MutableStyleProperties> styleDeclaration = MutableStyleProperties::create(); if (CSSParser::parseValue(styleDeclaration.get(), CSSPropertyWebkitTransform, string, true, CSSStrictMode, 0)) { // Convert to TransformOperations. This can fail if a property // requires style (i.e., param uses 'ems' or 'exs') RefPtr<CSSValue> value = styleDeclaration->getPropertyCSSValue(CSSPropertyWebkitTransform); // Check for a "none" or empty transform. In these cases we can use the default identity matrix. if (!value || (value->isPrimitiveValue() && (toCSSPrimitiveValue(value.get()))->getValueID() == CSSValueNone)) return; TransformOperations operations; if (!transformsForValue(0, 0, value.get(), operations)) { ec = SYNTAX_ERR; return; } // Convert transform operations to a TransformationMatrix. This can fail // if a param has a percentage ('%') TransformationMatrix t; for (unsigned i = 0; i < operations.operations().size(); ++i) { if (operations.operations()[i].get()->apply(t, IntSize(0, 0))) { ec = SYNTAX_ERR; return; } } // set the matrix m_matrix = t; } else // There is something there but parsing failed. ec = SYNTAX_ERR; }