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 = it.value().instanceCoords.value(tag, defaultVal);
106 if (val == selectedValue) {
107 if (shouldNotReturnDefault && val == defaultVal)
continue;
108 filteredStyles.insert(it.key(), it.value());
111 return filteredStyles;
116 QHash<int, KoSvgText::FontFamilyStyleInfo> styles;
121 for (
int i = 0; i<
d->styles.size(); i++) {
122 styles.insert(i,
d->styles.at(i));
123 weights.append(
d->styles.value(i).instanceCoords.value(
WEIGHT_TAG, 400.0));
124 widths.append(
d->styles.value(i).instanceCoords.value(
WIDTH_TAG, 100.0));
125 int fontStyle =
d->styles.value(i).isItalic?
d->styles.value(i).isOblique? QFont::StyleOblique: QFont::StyleItalic: QFont::StyleNormal;
126 if (
d->styles.value(i).instanceCoords.contains(
SLANT_TAG) || fontStyle == QFont::StyleOblique) {
127 slants.append(
d->styles.value(i).instanceCoords.value(
SLANT_TAG, -11.0));
129 if (
d->styles.value(i).instanceCoords.contains(
ITALIC_TAG) || fontStyle == QFont::StyleItalic) {
130 italics.append(
d->styles.value(i).instanceCoords.value(
ITALIC_TAG, 1.0));
134 if (styles.size() > 1) {
137 if (styles.size() > 1) {
141 if (styles.size() > 1) {
142 QHash<int, KoSvgText::FontFamilyStyleInfo> italicStyles;
143 QHash<int, KoSvgText::FontFamilyStyleInfo> obliqueStyles;
144 if (!slants.isEmpty()) {
146 styleMode == QFont::StyleItalic? -11.0: -styleValue, slants,
151 if (!italics.isEmpty()) {
159 if (styleMode == QFont::StyleItalic) {
160 if (!italicStyles.isEmpty()) {
161 styles = italicStyles;
162 }
else if (!obliqueStyles.isEmpty()) {
163 styles = obliqueStyles;
165 }
else if (styleMode == QFont::StyleOblique) {
166 if (!obliqueStyles.isEmpty()) {
167 styles = obliqueStyles;
168 }
else if (!italicStyles.isEmpty()) {
169 styles = italicStyles;
172 QHash<int, KoSvgText::FontFamilyStyleInfo> regularStyles;
173 for (
auto it = styles.begin(); it!= styles.end(); it++) {
174 if (!obliqueStyles.contains(it.key()) && !italicStyles.contains(it.key())) {
175 regularStyles.insert(it.key(), it.value());
178 if (!regularStyles.isEmpty()) styles = regularStyles;
181 return styles.isEmpty()? 0: styles.keys().first();
186 QStringList families = textPropertiesModel->fontFamilies();
189 if (!families.isEmpty() &&
d->fontModel) {
192 QString familyName = !name? families.first(): name.value();
195 if (!res.isEmpty()) {
198 styles = family->styles();
208 if (column != 0)
return QModelIndex();
209 if (row >= 0 && row < d->styles.size())
return createIndex(row, column, &row);
210 return QModelIndex();
216 return QModelIndex();
222 return d->styles.size();
233 if (!
index.isValid())
return QVariant();
236 if (role == Qt::DisplayRole) {
239 Q_FOREACH(
const QLocale &locale,
d->locales) {
246 }
else if (role ==
Weight){
248 }
else if (role ==
Width){
251 QFont::Style styleType = style.
isItalic? style.
isOblique? QFont::StyleOblique: QFont::StyleItalic: QFont::StyleNormal;
253 styleType = QFont::StyleItalic;
255 styleType = QFont::StyleOblique;
258 }
else if (role ==
Slant){
267 vals.insert(it.key(), QVariant::fromValue(it.value()));
277 QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
279 roles[
Width] =
"width";
281 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)
QModelIndex parent(const QModelIndex &child) const
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'
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.
const QString FontFamilies
QList< KoSvgText::FontFamilyStyleInfo > styles
KisResourceModel * fontModel
QHash< QString, float > instanceCoords
QHash< QLocale, QString > localizedLabels