47QColor QQuickColorValueType::tint(
const QColor &tintColor)
const
49 int tintAlpha = tintColor.alpha();
50 if (tintAlpha == 0xFF)
52 else if (tintAlpha == 0x00)
56 const QColor baseColor = QColor::toRgb();
57 const qreal a = tintColor.alphaF();
58 const qreal inv_a = 1.0 - a;
60 const qreal r = tintColor.redF() * a + baseColor.redF() * inv_a;
61 const qreal g = tintColor.greenF() * a + baseColor.greenF() * inv_a;
62 const qreal b = tintColor.blueF() * a + baseColor.blueF() * inv_a;
64 return QColor::fromRgbF(r, g, b, a + inv_a * baseColor.alphaF());
673QVariant QQuickMatrix4x4ValueType::create(
const QJSValue ¶ms)
675 if (params.isNull() || params.isUndefined())
678 if (params.isString()) {
679 return QQmlStringConverters::valueTypeFromNumberString<QMatrix4x4, 16, u',', u',', u',',
680 u',', u',', u',', u',', u',', u',',
681 u',', u',', u',', u',', u',', u','>(
685 if (params.isArray() && params.property(QStringLiteral(
"length")).toInt() == 16) {
686 return QMatrix4x4(params.property(0).toNumber(),
687 params.property(1).toNumber(),
688 params.property(2).toNumber(),
689 params.property(3).toNumber(),
690 params.property(4).toNumber(),
691 params.property(5).toNumber(),
692 params.property(6).toNumber(),
693 params.property(7).toNumber(),
694 params.property(8).toNumber(),
695 params.property(9).toNumber(),
696 params.property(10).toNumber(),
697 params.property(11).toNumber(),
698 params.property(12).toNumber(),
699 params.property(13).toNumber(),
700 params.property(14).toNumber(),
701 params.property(15).toNumber());
910QMatrix4x4 QQuickPlanarTransform::fromShear(
float shearX,
float shearY,
float originX,
float originY)
913 xf.translate(originX, originY);
914 xf *= QMatrix4x4(1, shearX, 0, 0, shearY, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
915 xf.translate(-originX, -originY);
950QVariant QQuickFontValueType::create(
const QJSValue ¶ms)
952 if (!params.isObject())
958 setFontProperty(ret, &QFont::setBold, QStringLiteral(
"bold"), params, &ok);
959 setFontProperty(ret, &QFont::setCapitalization, QStringLiteral(
"capitalization"), params, &ok);
960 setFontProperty(ret, &QFont::setFamily, QStringLiteral(
"family"), params, &ok);
961 setFontProperty(ret, &QFont::setItalic, QStringLiteral(
"italic"), params, &ok);
962 setFontProperty(ret, &QFont::setPixelSize, QStringLiteral(
"pixelSize"), params, &ok);
963 setFontProperty(ret, &QFont::setPointSize, QStringLiteral(
"pointSize"), params, &ok);
964 setFontProperty(ret, &QFont::setStrikeOut, QStringLiteral(
"strikeout"), params, &ok);
965 setFontProperty(ret, &QFont::setStyleName, QStringLiteral(
"styleName"), params, &ok);
966 setFontProperty(ret, &QFont::setUnderline, QStringLiteral(
"underline"), params, &ok);
967 setFontProperty(ret, &QFont::setWeight, QStringLiteral(
"weight"), params, &ok);
968 setFontProperty(ret, &QFont::setWordSpacing, QStringLiteral(
"wordSpacing"), params, &ok);
969 setFontProperty(ret, &QFont::setHintingPreference, QStringLiteral(
"hintingPreference"), params, &ok);
970 setFontProperty(ret, &QFont::setKerning, QStringLiteral(
"kerning"), params, &ok);
973 const QJSValue vlspac = params.property(QStringLiteral(
"letterSpacing"));
974 if (vlspac.isNumber()) {
975 ret.setLetterSpacing(QFont::AbsoluteSpacing, vlspac.toNumber());
981 const QJSValue vshaping = params.property(QStringLiteral(
"preferShaping"));
982 if (vshaping.isBool()) {
983 const bool enable = vshaping.toBool();
984 const QFont::StyleStrategy strategy = ret.styleStrategy();
986 ret.setStyleStrategy(QFont::StyleStrategy(strategy & ~QFont::PreferNoShaping));
988 ret.setStyleStrategy(QFont::StyleStrategy(strategy | QFont::PreferNoShaping));
994 const QJSValue typoMetrics = params.property(QStringLiteral(
"preferTypoLineMetrics"));
995 if (typoMetrics.isBool()) {
996 const bool enable = typoMetrics.toBool();
997 const QFont::StyleStrategy strategy = ret.styleStrategy();
999 ret.setStyleStrategy(QFont::StyleStrategy(strategy & ~QFont::PreferTypoLineMetrics));
1001 ret.setStyleStrategy(QFont::StyleStrategy(strategy | QFont::PreferTypoLineMetrics));
1007 const QJSValue ctxFontMerging = params.property(QStringLiteral(
"contextFontMerging"));
1008 if (ctxFontMerging.isBool()) {
1009 const bool enable = ctxFontMerging.toBool();
1010 const QFont::StyleStrategy strategy = ret.styleStrategy();
1012 ret.setStyleStrategy(QFont::StyleStrategy(strategy | QFont::ContextFontMerging));
1014 ret.setStyleStrategy(QFont::StyleStrategy(strategy & ~QFont::ContextFontMerging));
1020 const QJSValue variableAxes = params.property(QStringLiteral(
"variableAxes"));
1021 if (variableAxes.isObject()) {
1022 QVariantMap variantMap = variableAxes.toVariant().toMap();
1023 for (
auto [variableAxisName, variableAxisValue] : variantMap.asKeyValueRange()) {
1024 const auto maybeTag = QFont::Tag::fromString(variableAxisName);
1026 qWarning() <<
"Invalid variable axis" << variableAxisName <<
"ignored";
1031 float value = variableAxisValue.toFloat(&valueOk);
1033 qWarning() <<
"Variable axis" << variableAxisName <<
"value" << variableAxisValue <<
"is not a floating point value.";
1037 ret.setVariableAxis(*maybeTag, value);
1044 const QJSValue features = params.property(QStringLiteral(
"features"));
1045 if (features.isObject()) {
1046 QVariantMap variantMap = features.toVariant().toMap();
1047 for (
auto [featureName, featureValue] : variantMap.asKeyValueRange()) {
1048 const auto maybeTag = QFont::Tag::fromString(featureName);
1050 qWarning() <<
"Invalid font feature" << featureName <<
"ignored";
1055 quint32 value = featureValue.toUInt(&valueOk);
1057 qWarning() <<
"Font feature" << featureName <<
"value" << featureValue <<
"is not an integer.";
1061 ret.setFeature(*maybeTag, value);
1067 return ok ? ret : QVariant();
1355QVariant QQuickColorSpaceValueType::create(
const QJSValue ¶ms)
1357 if (!params.isObject())
1361 const QJSValue vName = params.property(QStringLiteral(
"namedColorSpace"));
1362 if (vName.isNumber())
1363 return QColorSpace((QColorSpace::NamedColorSpace)vName.toInt());
1365 const QJSValue vPri = params.property(QStringLiteral(
"primaries"));
1366 const QJSValue vTra = params.property(QStringLiteral(
"transferFunction"));
1367 if (!vPri.isNumber() || !vTra.isNumber())
1370 QColorSpace::Primaries pri =
static_cast<QColorSpace::Primaries>(vPri.toInt());
1371 QColorSpace::TransferFunction tra =
static_cast<QColorSpace::TransferFunction>(vTra.toInt());
1373 if (tra == QColorSpace::TransferFunction::Gamma) {
1374 const QJSValue vGam = params.property(QStringLiteral(
"gamma"));
1375 if (!vGam.isNumber())
1377 gamma = vGam.toNumber();
1380 return QColorSpace(pri, tra, gamma);