62QColor QQuickColorValueType::tint(
const QColor &tintColor)
const
64 int tintAlpha = tintColor.alpha();
65 if (tintAlpha == 0xFF)
67 else if (tintAlpha == 0x00)
71 const QColor baseColor = QColor::toRgb();
72 const qreal a = tintColor.alphaF();
73 const qreal inv_a = 1.0 - a;
75 const qreal r = tintColor.redF() * a + baseColor.redF() * inv_a;
76 const qreal g = tintColor.greenF() * a + baseColor.greenF() * inv_a;
77 const qreal b = tintColor.blueF() * a + baseColor.blueF() * inv_a;
79 return QColor::fromRgbF(r, g, b, a + inv_a * baseColor.alphaF());
688QVariant QQuickMatrix4x4ValueType::create(
const QJSValue ¶ms)
690 if (params.isNull() || params.isUndefined())
693 if (params.isString()) {
694 return QQmlStringConverters::valueTypeFromNumberString<QMatrix4x4, 16, u',', u',', u',',
695 u',', u',', u',', u',', u',', u',',
696 u',', u',', u',', u',', u',', u','>(
700 if (params.isArray() && params.property(QStringLiteral(
"length")).toInt() == 16) {
701 return QMatrix4x4(params.property(0).toNumber(),
702 params.property(1).toNumber(),
703 params.property(2).toNumber(),
704 params.property(3).toNumber(),
705 params.property(4).toNumber(),
706 params.property(5).toNumber(),
707 params.property(6).toNumber(),
708 params.property(7).toNumber(),
709 params.property(8).toNumber(),
710 params.property(9).toNumber(),
711 params.property(10).toNumber(),
712 params.property(11).toNumber(),
713 params.property(12).toNumber(),
714 params.property(13).toNumber(),
715 params.property(14).toNumber(),
716 params.property(15).toNumber());
925QMatrix4x4 QQuickPlanarTransform::fromShear(
float shearX,
float shearY,
float originX,
float originY)
928 xf.translate(originX, originY);
929 xf *= QMatrix4x4(1, shearX, 0, 0, shearY, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
930 xf.translate(-originX, -originY);
965QVariant QQuickFontValueType::create(
const QJSValue ¶ms)
967 if (!params.isObject())
973 setFontProperty(ret, &QFont::setBold, QStringLiteral(
"bold"), params, &ok);
974 setFontProperty(ret, &QFont::setCapitalization, QStringLiteral(
"capitalization"), params, &ok);
975 setFontProperty(ret, &QFont::setFamily, QStringLiteral(
"family"), params, &ok);
976 setFontProperty(ret, &QFont::setItalic, QStringLiteral(
"italic"), params, &ok);
977 setFontProperty(ret, &QFont::setPixelSize, QStringLiteral(
"pixelSize"), params, &ok);
978 setFontProperty(ret, &QFont::setPointSize, QStringLiteral(
"pointSize"), params, &ok);
979 setFontProperty(ret, &QFont::setStrikeOut, QStringLiteral(
"strikeout"), params, &ok);
980 setFontProperty(ret, &QFont::setStyleName, QStringLiteral(
"styleName"), params, &ok);
981 setFontProperty(ret, &QFont::setUnderline, QStringLiteral(
"underline"), params, &ok);
982 setFontProperty(ret, &QFont::setWeight, QStringLiteral(
"weight"), params, &ok);
983 setFontProperty(ret, &QFont::setWordSpacing, QStringLiteral(
"wordSpacing"), params, &ok);
984 setFontProperty(ret, &QFont::setHintingPreference, QStringLiteral(
"hintingPreference"), params, &ok);
985 setFontProperty(ret, &QFont::setKerning, QStringLiteral(
"kerning"), params, &ok);
988 const QJSValue vlspac = params.property(QStringLiteral(
"letterSpacing"));
989 if (vlspac.isNumber()) {
990 ret.setLetterSpacing(QFont::AbsoluteSpacing, vlspac.toNumber());
996 const QJSValue vshaping = params.property(QStringLiteral(
"preferShaping"));
997 if (vshaping.isBool()) {
998 const bool enable = vshaping.toBool();
999 const QFont::StyleStrategy strategy = ret.styleStrategy();
1001 ret.setStyleStrategy(QFont::StyleStrategy(strategy & ~QFont::PreferNoShaping));
1003 ret.setStyleStrategy(QFont::StyleStrategy(strategy | QFont::PreferNoShaping));
1009 const QJSValue typoMetrics = params.property(QStringLiteral(
"preferTypoLineMetrics"));
1010 if (typoMetrics.isBool()) {
1011 const bool enable = typoMetrics.toBool();
1012 const QFont::StyleStrategy strategy = ret.styleStrategy();
1014 ret.setStyleStrategy(QFont::StyleStrategy(strategy & ~QFont::PreferTypoLineMetrics));
1016 ret.setStyleStrategy(QFont::StyleStrategy(strategy | QFont::PreferTypoLineMetrics));
1022 const QJSValue ctxFontMerging = params.property(QStringLiteral(
"contextFontMerging"));
1023 if (ctxFontMerging.isBool()) {
1024 const bool enable = ctxFontMerging.toBool();
1025 const QFont::StyleStrategy strategy = ret.styleStrategy();
1027 ret.setStyleStrategy(QFont::StyleStrategy(strategy | QFont::ContextFontMerging));
1029 ret.setStyleStrategy(QFont::StyleStrategy(strategy & ~QFont::ContextFontMerging));
1035 const QJSValue variableAxes = params.property(QStringLiteral(
"variableAxes"));
1036 if (variableAxes.isObject()) {
1037 QVariantMap variantMap = variableAxes.toVariant().toMap();
1038 for (
auto [variableAxisName, variableAxisValue] : variantMap.asKeyValueRange()) {
1039 const auto maybeTag = QFont::Tag::fromString(variableAxisName);
1041 qWarning() <<
"Invalid variable axis" << variableAxisName <<
"ignored";
1046 float value = variableAxisValue.toFloat(&valueOk);
1048 qWarning() <<
"Variable axis" << variableAxisName <<
"value" << variableAxisValue <<
"is not a floating point value.";
1052 ret.setVariableAxis(*maybeTag, value);
1059 const QJSValue features = params.property(QStringLiteral(
"features"));
1060 if (features.isObject()) {
1061 QVariantMap variantMap = features.toVariant().toMap();
1062 for (
auto [featureName, featureValue] : variantMap.asKeyValueRange()) {
1063 const auto maybeTag = QFont::Tag::fromString(featureName);
1065 qWarning() <<
"Invalid font feature" << featureName <<
"ignored";
1070 quint32 value = featureValue.toUInt(&valueOk);
1072 qWarning() <<
"Font feature" << featureName <<
"value" << featureValue <<
"is not an integer.";
1076 ret.setFeature(*maybeTag, value);
1082 return ok ? ret : QVariant();
1370QVariant QQuickColorSpaceValueType::create(
const QJSValue ¶ms)
1372 if (!params.isObject())
1376 const QJSValue vName = params.property(QStringLiteral(
"namedColorSpace"));
1377 if (vName.isNumber())
1378 return QColorSpace((QColorSpace::NamedColorSpace)vName.toInt());
1380 const QJSValue vPri = params.property(QStringLiteral(
"primaries"));
1381 const QJSValue vTra = params.property(QStringLiteral(
"transferFunction"));
1382 if (!vPri.isNumber() || !vTra.isNumber())
1385 QColorSpace::Primaries pri =
static_cast<QColorSpace::Primaries>(vPri.toInt());
1386 QColorSpace::TransferFunction tra =
static_cast<QColorSpace::TransferFunction>(vTra.toInt());
1388 if (tra == QColorSpace::TransferFunction::Gamma) {
1389 const QJSValue vGam = params.property(QStringLiteral(
"gamma"));
1390 if (!vGam.isNumber())
1392 gamma = vGam.toNumber();
1395 return QColorSpace(pri, tra, gamma);