26 : QAbstractItemModel(parent)
31 Q_FOREACH (
const QString langCode, KLocalizedString::languages()) {
32 locales.append(QLocale(langCode));
45 qreal other = b.instanceCoords.value(it.key());
46 if (it.value() < other)
return true;
49 QFont::Style aStyle = a.
isItalic? a.
isOblique? QFont::StyleOblique: QFont::StyleItalic: QFont::StyleNormal;
50 QFont::Style bStyle = b.isItalic? a.
isOblique? QFont::StyleOblique: QFont::StyleItalic: QFont::StyleNormal;
51 return aStyle < bStyle;
64 return d->styles.value(row).instanceCoords.value(
WEIGHT_TAG, 400.0);
69 return d->styles.value(row).instanceCoords.value(
WIDTH_TAG, 100.0);
75 QFont::Style styleType = style.
isItalic? style.
isOblique? QFont::StyleOblique: QFont::StyleItalic: QFont::StyleNormal;
77 styleType = QFont::StyleItalic;
79 styleType = QFont::StyleOblique;
86 return -(
d->styles.value(row).instanceCoords.value(
SLANT_TAG, 0));
95QHash<int, KoSvgText::FontFamilyStyleInfo>
searchAxisTag(
const QString &tag,
98 const qreal &defaultVal,
99 const qreal &defaultValUpper,
100 const QHash<int, KoSvgText::FontFamilyStyleInfo> &styles) {
101 QHash<int, KoSvgText::FontFamilyStyleInfo> filteredStyles;
104 for (
auto it = styles.begin(); it!= styles.end(); it++) {
105 qreal val = defaultVal;
106 if (it.value().instanceCoords.contains(tag)) {
107 val = it.value().instanceCoords.value(tag, defaultVal);
109 if (it.value().isItalic && tag ==
ITALIC_TAG) {
112 if (it.value().isOblique && it.value().isItalic && tag ==
SLANT_TAG) {
118 if (shouldNotReturnDefault &&
qFuzzyCompare(val, defaultVal))
continue;
119 filteredStyles.insert(it.key(), it.value());
122 return filteredStyles;
127 QHash<int, KoSvgText::FontFamilyStyleInfo> styles;
132 for (
int i = 0; i<
d->styles.size(); i++) {
133 styles.insert(i,
d->styles.at(i));
134 weights.append(
d->styles.value(i).instanceCoords.value(
WEIGHT_TAG, 400.0));
135 widths.append(
d->styles.value(i).instanceCoords.value(
WIDTH_TAG, 100.0));
136 int fontStyle =
d->styles.value(i).isItalic?
d->styles.value(i).isOblique? QFont::StyleOblique: QFont::StyleItalic: QFont::StyleNormal;
137 if (
d->styles.value(i).instanceCoords.contains(
SLANT_TAG) || fontStyle == QFont::StyleOblique) {
138 slants.append(
d->styles.value(i).instanceCoords.value(
SLANT_TAG, -11.0));
140 if (
d->styles.value(i).instanceCoords.contains(
ITALIC_TAG) || fontStyle == QFont::StyleItalic) {
141 italics.append(
d->styles.value(i).instanceCoords.value(
ITALIC_TAG, 1.0));
145 if (styles.size() > 1) {
148 if (styles.size() > 1) {
152 if (styles.size() > 1) {
153 QHash<int, KoSvgText::FontFamilyStyleInfo> italicStyles;
154 QHash<int, KoSvgText::FontFamilyStyleInfo> obliqueStyles;
155 if (!slants.isEmpty()) {
157 styleMode == QFont::StyleItalic? -11.0: -styleValue, slants,
162 if (!italics.isEmpty()) {
170 if (styleMode == QFont::StyleItalic) {
171 if (!italicStyles.isEmpty()) {
172 styles = italicStyles;
173 }
else if (!obliqueStyles.isEmpty()) {
174 styles = obliqueStyles;
176 }
else if (styleMode == QFont::StyleOblique) {
177 if (!obliqueStyles.isEmpty()) {
178 styles = obliqueStyles;
179 }
else if (!italicStyles.isEmpty()) {
180 styles = italicStyles;
183 QHash<int, KoSvgText::FontFamilyStyleInfo> regularStyles;
184 for (
auto it = styles.begin(); it!= styles.end(); it++) {
185 if (!obliqueStyles.contains(it.key()) && !italicStyles.contains(it.key())) {
186 regularStyles.insert(it.key(), it.value());
189 if (!regularStyles.isEmpty()) styles = regularStyles;
192 return styles.isEmpty()? 0: styles.keys().first();
197 QStringList families = textPropertiesModel->fontFamilies();
200 if (!families.isEmpty() &&
d->fontModel) {
203 QString familyName = !name? families.first(): name.value();
206 if (!res.isEmpty()) {
209 styles = family->styles();
219 if (column != 0)
return QModelIndex();
220 if (row >= 0 && row < d->styles.size())
return createIndex(row, column, &row);
221 return QModelIndex();
227 return QModelIndex();
233 return d->styles.size();
244 if (!
index.isValid())
return QVariant();
247 if (role == Qt::DisplayRole) {
250 Q_FOREACH(
const QLocale &locale,
d->locales) {
257 }
else if (role ==
Weight){
259 }
else if (role ==
Width){
262 QFont::Style styleType = style.
isItalic? style.
isOblique? QFont::StyleOblique: QFont::StyleItalic: QFont::StyleNormal;
264 styleType = QFont::StyleItalic;
266 styleType = QFont::StyleOblique;
269 }
else if (role ==
Slant){
278 vals.insert(it.key(), QVariant::fromValue(it.value()));
288 QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
290 roles[
Width] =
"width";
292 roles[
Slant] =
"slant";
QHash< int, KoSvgText::FontFamilyStyleInfo > searchAxisTag(const QString &tag, const qreal &value, const QVector< qreal > &values, const qreal &defaultVal, const qreal &defaultValUpper, const QHash< int, KoSvgText::FontFamilyStyleInfo > &styles)
static bool styleLowerThan(const KoSvgText::FontFamilyStyleInfo &a, const KoSvgText::FontFamilyStyleInfo &b)
const QString OPTICAL_TAG
float value(const T *src, size_t ch)
Q_INVOKABLE void setFromTextPropertiesModel(KoSvgTextPropertiesModel *textPropertiesModel)
Update styles model from current text properties.
Q_INVOKABLE QVariantHash axesValues(int row)
Q_INVOKABLE int styleModeValue(int row)
int rowCount(const QModelIndex &parent) const override
Q_INVOKABLE qreal weightValue(int row)
int columnCount(const QModelIndex &parent) const override
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
Q_INVOKABLE qreal widthValue(int row)
QVariant data(const QModelIndex &index, int role) const override
QHash< int, QByteArray > roleNames() const override
@ AxisValues
other axis values
@ Width
qreal, represents 'wdth'
@ Weight
qreal, represents 'wgth'
@ Slant
qreal, represents 'slnt'
QModelIndex parent(const QModelIndex &child) const override
Q_INVOKABLE qreal slantValue(int row)
Q_INVOKABLE int rowForStyle(const qreal &weight, const qreal &width, const int &styleMode, const qreal &styleValue)
Find the closest style that represents the current width, weight and stylemode.
const QScopedPointer< Private > d
void setStylesInfo(QList< KoSvgText::FontFamilyStyleInfo > styles)
Set the base style info;.
FontStyleModel(QObject *parent=nullptr)
The KisResourceModel class provides the main access to resources. It is possible to filter the resour...
static qreal cssSelectFontStyleValue(const QVector< qreal > &values, const qreal targetValue, const qreal defaultValue, const qreal defaultValueUpper, const bool shouldNotReturnDefault)
cssSelectFontStyleValue Select the closest font style value from the list, following the CSS Fonts se...
The KoFontFamily class Abstract representation of a Weight/Width/Slant font family,...
std::optional< QString > wwsNameByFamilyName(const QString familyName) const
static KoFontRegistry * instance()
The KoSvgTextPropertiesModel class.
static bool qFuzzyCompare(half p1, half p2)
const QString FontFamilies
QList< KoSvgText::FontFamilyStyleInfo > styles
KisResourceModel * fontModel
QHash< QString, float > instanceCoords
QHash< QLocale, QString > localizedLabels