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
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void slotTextChanged(const QString &input)
PinnedFontsSeparator * m_fontSeparator
void refillComboBox(QVector< QFontDatabase::WritingSystem > writingSystems=QVector< QFontDatabase::WritingSystem >())

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

References m_blacklistedFonts.

◆ setInitialized()

void KisFontFamilyComboBox::setInitialized ( )

Definition at line 170 of file kis_font_family_combo_box.cpp.

171{
172 if(m_initialized)
173 return;
174
175 m_initialized = true;
176
177 for(int i=m_pinnedFonts.count()-1; i>=0; i--){
178 this->insertItem(0, m_pinnedFonts[i]);
180 }
181
182 if(m_pinnedFonts.count() > 0){
183 this->insertSeparator(m_separatorIndex);
186 }
187
188 this->setItemDelegate(m_fontSeparator);
189}

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

◆ setTopFont()

void KisFontFamilyComboBox::setTopFont ( const QString & family)

Definition at line 144 of file kis_font_family_combo_box.cpp.

145{
146 if (family.isEmpty() || !m_initialized || m_pinnedFonts.contains(family)) {
147 return;
148 }
149
150 if (m_pinnedFonts.count() > 4) {
151 this->removeItem(4);
152 m_pinnedFonts.pop_back();
154 }
155
156 if (m_pinnedFonts.isEmpty()) {
157 this->insertSeparator(0);
159 }
160
161 m_pinnedFonts.push_front(family);
162 this->insertItem(0, family);
165 KConfigGroup cfg(KSharedConfig::openConfig(), "");
166
167 cfg.writeEntry("PinnedFonts", m_pinnedFonts);
168}

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 191 of file kis_font_family_combo_box.cpp.

191 {
192 QString text = input;
193 int pos = text.size();
194 this->validator()->fixup(text);
195 if (this->validator()->validate(text, pos) == QValidator::Acceptable) {
196 setCurrentText(text);
197 Q_EMIT activated(currentIndex());
198 }
199}

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: