Krita Source Code Documentation
Loading...
Searching...
No Matches
KisFontFamilyComboBox Class Reference

The KisFontFamilyComboBox class A QCombobox that limits the amount of fonts it contains. Amongst others it blacklists certain fonts, it also filters out 'style' fonts, like those used for Bold and Italic, and it allows you to limit the amount of fonts to certain writing systems. More...

#include <kis_font_family_combo_box.h>

+ Inheritance diagram for KisFontFamilyComboBox:

Public Member Functions

 KisFontFamilyComboBox (QWidget *parent=0)
 
void refillComboBox (QVector< QFontDatabase::WritingSystem > writingSystems=QVector< QFontDatabase::WritingSystem >())
 
void setInitialized ()
 
void setTopFont (const QString &family)
 

Private Slots

void slotTextChanged (const QString &input)
 

Private Attributes

QStringList m_blacklistedFonts
 
PinnedFontsSeparatorm_fontSeparator
 
bool m_initialized {false}
 
bool m_initializeFromConfig
 
QStringList m_pinnedFonts
 
int m_separatorIndex
 

Detailed Description

The KisFontFamilyComboBox class A QCombobox that limits the amount of fonts it contains. Amongst others it blacklists certain fonts, it also filters out 'style' fonts, like those used for Bold and Italic, and it allows you to limit the amount of fonts to certain writing systems.

Definition at line 87 of file kis_font_family_combo_box.h.

Constructor & Destructor Documentation

◆ KisFontFamilyComboBox()

KisFontFamilyComboBox::KisFontFamilyComboBox ( QWidget * parent = 0)

Definition at line 58 of file kis_font_family_combo_box.cpp.

59 : QComboBox(parent)
60 , m_initialized(false)
62{
63 setEditable(true);
64 completer()->setCompletionMode(QCompleter::InlineCompletion);
65 completer()->setCaseSensitivity(Qt::CaseInsensitive);
66 // The following are all helper fonts for LaTeX that no one but LaTeX would use
67 // but because many people use LaTeX, they do show up on quite a few systems.
68 m_blacklistedFonts << "bbold10" << "cmbsy10" << "cmmib10"
69 << "cmss10" << "cmex10" << "cmmi10"
70 << "cmr10" << "cmsy10" << "eufb10"
71 << "eufm10" << "eurb10" << "eurm10"
72 << "esint10" << "eufm10" << "eusb10"
73 << "eusm10" << "lasy10" << "lasyb10"
74 << "msam10" << "msbm10" << "rsfs10"
75 << "stmary10" << "wasy10" << "wasyb10";
77 QFontComboBox *temp = new QFontComboBox(this);
78 m_fontSeparator = new PinnedFontsSeparator(temp->itemDelegate(), this);
79 temp->setEnabled(true);
80 temp->hide();
82
83 KConfigGroup cfg(KSharedConfig::openConfig(), "");
84 m_pinnedFonts = cfg.readEntry<QStringList>("PinnedFonts", QStringList());
85
86 connect(this, SIGNAL(currentTextChanged(QString)), this, SLOT(slotTextChanged(QString)));
87}
QList< QString > QStringList
void slotTextChanged(const QString &input)
PinnedFontsSeparator * m_fontSeparator
void refillComboBox(QVector< QFontDatabase::WritingSystem > writingSystems=QVector< QFontDatabase::WritingSystem >())

References m_blacklistedFonts, m_fontSeparator, m_pinnedFonts, m_separatorIndex, refillComboBox(), and slotTextChanged().

Member Function Documentation

◆ refillComboBox()

void KisFontFamilyComboBox::refillComboBox ( QVector< QFontDatabase::WritingSystem > writingSystems = QVector<QFontDatabase::WritingSystem>())

Definition at line 89 of file kis_font_family_combo_box.cpp.

90{
91#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
92 QFontDatabase fonts = QFontDatabase();
93#endif
94 int maxWidth = 0;
95 this->clear();
96
97 QStringList duplicateFonts;
98 QStringList filteredFonts;
99
100 if (writingSystems.isEmpty()) {
101 writingSystems.append(QFontDatabase::Any);
102 }
103
104 for (int i = 0; i < writingSystems.size(); i++) {
105#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
106 Q_FOREACH (QString family, fonts.families(writingSystems.at(i))) {
107 // if it's a private family it shouldn't be added.
108 bool addFont = !fonts.isPrivateFamily(family);
109#else
110 Q_FOREACH (QString family, QFontDatabase::families(writingSystems.at(i))) {
111 // if it's a private family it shouldn't be added.
112 bool addFont = !QFontDatabase::isPrivateFamily(family);
113#endif
114
115 if (addFont && filteredFonts.contains(family)) {
116 addFont = false;
117 }
118 if (addFont && duplicateFonts.contains(family)) {
119 addFont = false;
120 }
121 if (addFont && m_blacklistedFonts.contains(family)) {
122 addFont = false;
123 }
124#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
125 if (addFont && !fonts.isSmoothlyScalable(family)) {
126#else
127 if (addFont && !QFontDatabase::isSmoothlyScalable(family)) {
128#endif
129 addFont = false;
130 }
131
132 if (addFont) {
133 // now, check for all possible familyname+style name combinations, so we can avoid those.
134#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
135 Q_FOREACH (const QString style, fonts.styles(family)) {
136#else
137 Q_FOREACH (const QString style, QFontDatabase::styles(family)) {
138#endif
139 duplicateFonts.append(family + " " + style);
140 duplicateFonts.append(family + "_" + style);
141 }
142 filteredFonts.append(family);
143 int width = 1.5 * view()->fontMetrics()
144 .horizontalAdvance(family + " " + QFontDatabase::writingSystemSample(QFontDatabase::Any));
145 if (width > maxWidth) {
146 maxWidth = width;
147 }
148 }
149 }
150 }
151 this->addItems(filteredFonts);
152 KisFontFamilyValidator *familyValidator = new KisFontFamilyValidator(filteredFonts, this);
153 this->setValidator(familyValidator);
154 if (this->count() > this->maxVisibleItems()) {
155 maxWidth += view()->style()->pixelMetric(QStyle::PixelMetric::PM_ScrollBarExtent);
156 }
157 view()->setMinimumWidth(maxWidth);
158} // KisFontFamilyComboBox::refillComboBox
QAction * clear(const QObject *recvr, const char *slot, QObject *parent)

References m_blacklistedFonts.

◆ setInitialized()

void KisFontFamilyComboBox::setInitialized ( )

Definition at line 186 of file kis_font_family_combo_box.cpp.

187{
188 if(m_initialized)
189 return;
190
191 m_initialized = true;
192
193 for(int i=m_pinnedFonts.count()-1; i>=0; i--){
194 this->insertItem(0, m_pinnedFonts[i]);
196 }
197
198 if(m_pinnedFonts.count() > 0){
199 this->insertSeparator(m_separatorIndex);
202 }
203
204 this->setItemDelegate(m_fontSeparator);
205}

References m_fontSeparator, m_initialized, m_pinnedFonts, m_separatorIndex, PinnedFontsSeparator::setSeparatorAdded(), and PinnedFontsSeparator::setSeparatorIndex().

◆ setTopFont()

void KisFontFamilyComboBox::setTopFont ( const QString & family)

Definition at line 160 of file kis_font_family_combo_box.cpp.

161{
162 if (family.isEmpty() || !m_initialized || m_pinnedFonts.contains(family)) {
163 return;
164 }
165
166 if (m_pinnedFonts.count() > 4) {
167 this->removeItem(4);
168 m_pinnedFonts.pop_back();
170 }
171
172 if (m_pinnedFonts.isEmpty()) {
173 this->insertSeparator(0);
175 }
176
177 m_pinnedFonts.push_front(family);
178 this->insertItem(0, family);
181 KConfigGroup cfg(KSharedConfig::openConfig(), "");
182
183 cfg.writeEntry("PinnedFonts", m_pinnedFonts);
184}

References m_fontSeparator, m_initialized, m_pinnedFonts, m_separatorIndex, PinnedFontsSeparator::setSeparatorAdded(), and PinnedFontsSeparator::setSeparatorIndex().

◆ slotTextChanged

void KisFontFamilyComboBox::slotTextChanged ( const QString & input)
privateslot

Definition at line 207 of file kis_font_family_combo_box.cpp.

207 {
208 QString text = input;
209 int pos = text.size();
210 this->validator()->fixup(text);
211 if (this->validator()->validate(text, pos) == QValidator::Acceptable) {
212 setCurrentText(text);
213 Q_EMIT activated(currentIndex());
214 }
215}

Member Data Documentation

◆ m_blacklistedFonts

QStringList KisFontFamilyComboBox::m_blacklistedFonts
private

Definition at line 103 of file kis_font_family_combo_box.h.

◆ m_fontSeparator

PinnedFontsSeparator* KisFontFamilyComboBox::m_fontSeparator
private

Definition at line 107 of file kis_font_family_combo_box.h.

◆ m_initialized

bool KisFontFamilyComboBox::m_initialized {false}
private

Definition at line 104 of file kis_font_family_combo_box.h.

104{false};

◆ m_initializeFromConfig

bool KisFontFamilyComboBox::m_initializeFromConfig
private

Definition at line 105 of file kis_font_family_combo_box.h.

◆ m_pinnedFonts

QStringList KisFontFamilyComboBox::m_pinnedFonts
private

Definition at line 102 of file kis_font_family_combo_box.h.

◆ m_separatorIndex

int KisFontFamilyComboBox::m_separatorIndex
private

Definition at line 106 of file kis_font_family_combo_box.h.


The documentation for this class was generated from the following files: