57QColor QQuickColorValueType::tint(
const QColor &tintColor)
const
59 int tintAlpha = tintColor.alpha();
60 if (tintAlpha == 0xFF)
62 else if (tintAlpha == 0x00)
66 const QColor baseColor = QColor::toRgb();
67 const qreal a = tintColor.alphaF();
68 const qreal inv_a = 1.0 - a;
70 const qreal r = tintColor.redF() * a + baseColor.redF() * inv_a;
71 const qreal g = tintColor.greenF() * a + baseColor.greenF() * inv_a;
72 const qreal b = tintColor.blueF() * a + baseColor.blueF() * inv_a;
74 return QColor::fromRgbF(r, g, b, a + inv_a * baseColor.alphaF());
683QVariant QQuickMatrix4x4ValueType::create(
const QJSValue ¶ms)
685 if (params.isNull() || params.isUndefined())
688 if (params.isString()) {
689 return QQmlStringConverters::valueTypeFromNumberString<QMatrix4x4, 16, u',', u',', u',',
690 u',', u',', u',', u',', u',', u',',
691 u',', u',', u',', u',', u',', u','>(
695 if (params.isArray() && params.property(QStringLiteral(
"length")).toInt() == 16) {
696 return QMatrix4x4(params.property(0).toNumber(),
697 params.property(1).toNumber(),
698 params.property(2).toNumber(),
699 params.property(3).toNumber(),
700 params.property(4).toNumber(),
701 params.property(5).toNumber(),
702 params.property(6).toNumber(),
703 params.property(7).toNumber(),
704 params.property(8).toNumber(),
705 params.property(9).toNumber(),
706 params.property(10).toNumber(),
707 params.property(11).toNumber(),
708 params.property(12).toNumber(),
709 params.property(13).toNumber(),
710 params.property(14).toNumber(),
711 params.property(15).toNumber());
920QMatrix4x4 QQuickPlanarTransform::fromShear(
float shearX,
float shearY,
float originX,
float originY)
923 xf.translate(originX, originY);
924 xf *= QMatrix4x4(1, shearX, 0, 0, shearY, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
925 xf.translate(-originX, -originY);
960QVariant QQuickFontValueType::create(
const QJSValue ¶ms)
962 if (!params.isObject())
968 setFontProperty(ret, &QFont::setBold, QStringLiteral(
"bold"), params, &ok);
969 setFontProperty(ret, &QFont::setCapitalization, QStringLiteral(
"capitalization"), params, &ok);
970 setFontProperty(ret, &QFont::setFamily, QStringLiteral(
"family"), params, &ok);
971 setFontProperty(ret, &QFont::setItalic, QStringLiteral(
"italic"), params, &ok);
972 setFontProperty(ret, &QFont::setPixelSize, QStringLiteral(
"pixelSize"), params, &ok);
973 setFontProperty(ret, &QFont::setPointSize, QStringLiteral(
"pointSize"), params, &ok);
974 setFontProperty(ret, &QFont::setStrikeOut, QStringLiteral(
"strikeout"), params, &ok);
975 setFontProperty(ret, &QFont::setStyleName, QStringLiteral(
"styleName"), params, &ok);
976 setFontProperty(ret, &QFont::setUnderline, QStringLiteral(
"underline"), params, &ok);
977 setFontProperty(ret, &QFont::setWeight, QStringLiteral(
"weight"), params, &ok);
978 setFontProperty(ret, &QFont::setWordSpacing, QStringLiteral(
"wordSpacing"), params, &ok);
979 setFontProperty(ret, &QFont::setHintingPreference, QStringLiteral(
"hintingPreference"), params, &ok);
980 setFontProperty(ret, &QFont::setKerning, QStringLiteral(
"kerning"), params, &ok);
983 const QJSValue vlspac = params.property(QStringLiteral(
"letterSpacing"));
984 if (vlspac.isNumber()) {
985 ret.setLetterSpacing(QFont::AbsoluteSpacing, vlspac.toNumber());
991 const QJSValue vshaping = params.property(QStringLiteral(
"preferShaping"));
992 if (vshaping.isBool()) {
993 const bool enable = vshaping.toBool();
994 const QFont::StyleStrategy strategy = ret.styleStrategy();
996 ret.setStyleStrategy(QFont::StyleStrategy(strategy & ~QFont::PreferNoShaping));
998 ret.setStyleStrategy(QFont::StyleStrategy(strategy | QFont::PreferNoShaping));
1004 const QJSValue typoMetrics = params.property(QStringLiteral(
"preferTypoLineMetrics"));
1005 if (typoMetrics.isBool()) {
1006 const bool enable = typoMetrics.toBool();
1007 const QFont::StyleStrategy strategy = ret.styleStrategy();
1009 ret.setStyleStrategy(QFont::StyleStrategy(strategy & ~QFont::PreferTypoLineMetrics));
1011 ret.setStyleStrategy(QFont::StyleStrategy(strategy | QFont::PreferTypoLineMetrics));
1017 const QJSValue ctxFontMerging = params.property(QStringLiteral(
"contextFontMerging"));
1018 if (ctxFontMerging.isBool()) {
1019 const bool enable = ctxFontMerging.toBool();
1020 const QFont::StyleStrategy strategy = ret.styleStrategy();
1022 ret.setStyleStrategy(QFont::StyleStrategy(strategy | QFont::ContextFontMerging));
1024 ret.setStyleStrategy(QFont::StyleStrategy(strategy & ~QFont::ContextFontMerging));
1030 const QJSValue variableAxes = params.property(QStringLiteral(
"variableAxes"));
1031 if (variableAxes.isObject()) {
1032 QVariantMap variantMap = variableAxes.toVariant().toMap();
1033 for (
auto [variableAxisName, variableAxisValue] : variantMap.asKeyValueRange()) {
1034 const auto maybeTag = QFont::Tag::fromString(variableAxisName);
1036 qWarning() <<
"Invalid variable axis" << variableAxisName <<
"ignored";
1041 float value = variableAxisValue.toFloat(&valueOk);
1043 qWarning() <<
"Variable axis" << variableAxisName <<
"value" << variableAxisValue <<
"is not a floating point value.";
1047 ret.setVariableAxis(*maybeTag, value);
1054 const QJSValue features = params.property(QStringLiteral(
"features"));
1055 if (features.isObject()) {
1056 QVariantMap variantMap = features.toVariant().toMap();
1057 for (
auto [featureName, featureValue] : variantMap.asKeyValueRange()) {
1058 const auto maybeTag = QFont::Tag::fromString(featureName);
1060 qWarning() <<
"Invalid font feature" << featureName <<
"ignored";
1065 quint32 value = featureValue.toUInt(&valueOk);
1067 qWarning() <<
"Font feature" << featureName <<
"value" << featureValue <<
"is not an integer.";
1071 ret.setFeature(*maybeTag, value);
1077 return ok ? ret : QVariant();
1365QVariant QQuickColorSpaceValueType::create(
const QJSValue ¶ms)
1367 if (!params.isObject())
1371 const QJSValue vName = params.property(QStringLiteral(
"namedColorSpace"));
1372 if (vName.isNumber())
1373 return QColorSpace((QColorSpace::NamedColorSpace)vName.toInt());
1375 const QJSValue vPri = params.property(QStringLiteral(
"primaries"));
1376 const QJSValue vTra = params.property(QStringLiteral(
"transferFunction"));
1377 if (!vPri.isNumber() || !vTra.isNumber())
1380 QColorSpace::Primaries pri =
static_cast<QColorSpace::Primaries>(vPri.toInt());
1381 QColorSpace::TransferFunction tra =
static_cast<QColorSpace::TransferFunction>(vTra.toInt());
1383 if (tra == QColorSpace::TransferFunction::Gamma) {
1384 const QJSValue vGam = params.property(QStringLiteral(
"gamma"));
1385 if (!vGam.isNumber())
1387 gamma = vGam.toNumber();
1390 return QColorSpace(pri, tra, gamma);