You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

181 lines
4.5 KiB

#ifndef __FC_ENGINE_H__
#define __FC_ENGINE_H__
/*
* KFontInst - KDE Font Installer
*
* Copyright 2003-2007 Craig Drummond <craig@kde.org>
*
* ----
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#include "KfiConstants.h"
#include <QColor>
#include <QFont>
#include <QRect>
#include <QVector>
#include <fontconfig/fontconfig.h>
//#include "Misc.h"
#include "Fc.h"
// Enable the following to use locale aware family name - if font supports this.
//#define KFI_USE_TRANSLATED_FAMILY_NAME
class KConfig;
typedef struct _XftFont XftFont;
typedef struct _XftDraw XftDraw;
typedef struct _XftColor XftColor;
namespace KFI
{
class Q_DECL_EXPORT CFcEngine
{
public:
class Xft;
struct TRange {
TRange(quint32 f = 0, quint32 t = 0)
: from(f)
, to(t)
{
}
bool null() const
{
return 0 == from && 0 == to;
}
quint32 from, to;
};
struct TChar : public QRect {
TChar(const QRect &r = QRect(), quint32 u = 0)
: QRect(r)
, ucs4(u)
{
}
quint32 ucs4;
};
static CFcEngine *instance();
CFcEngine(bool init = true);
virtual ~CFcEngine();
void readConfig(KConfig &cfg);
void writeConfig(KConfig &cfg);
static void setDirty()
{
theirFcDirty = true;
}
QImage drawPreview(const QString &name, quint32 style, int faceNo, const QColor &txt, const QColor &bgnd, int h);
QImage draw(const QString &name, quint32 style, int faceNo, const QColor &txt, const QColor &bgnd, int fSize, const QString &text);
QImage draw(const QString &name,
quint32 style,
int faceNo,
const QColor &txt,
const QColor &bgnd,
int w,
int h,
bool thumb,
const QList<TRange> &range = QList<TRange>(),
QList<TChar> *chars = nullptr);
int getNumIndexes()
{
return itsIndexCount;
} // Only valid after draw has been called!
static QFont getQFont(const QString &family, quint32 style, int size);
const QVector<int> &sizes() const
{
return itsSizes;
}
bool atMin() const
{
return 0 == itsSizes.size() || 0 == itsAlphaSizeIndex;
}
bool atMax() const
{
return 0 == itsSizes.size() || itsSizes.size() - 1 == itsAlphaSizeIndex;
}
void zoomIn()
{
if (!atMax())
itsAlphaSizeIndex++;
}
void zoomOut()
{
if (!atMin())
itsAlphaSizeIndex--;
}
int alphaSize() const
{
return itsSizes[itsAlphaSizeIndex];
}
quint32 styleVal()
{
return itsStyle;
}
const QString &descriptiveName() const
{
return itsDescriptiveName;
}
const QString &getPreviewString()
{
return itsPreviewString;
}
static QString getDefaultPreviewString();
void setPreviewString(const QString &str)
{
itsPreviewString = str.isEmpty() ? getDefaultPreviewString() : str;
}
static QString getUppercaseLetters();
static QString getLowercaseLetters();
static QString getPunctuation();
static const int constScalableSizes[];
static const int constDefaultAlphaSize;
private:
bool parse(const QString &name, quint32 style, int faceNo);
XftFont *queryFont();
XftFont *getFont(int size);
bool isCorrect(XftFont *f, bool checkFamily);
void getSizes();
void drawName(int x, int &y, int h);
void addFontFile(const QString &file);
void reinit();
Xft *xft();
private:
bool itsInstalled;
QString itsName, itsDescriptiveName;
quint32 itsStyle;
int itsIndex, itsIndexCount, itsAlphaSizeIndex;
QVector<int> itsSizes;
FcBool itsScalable;
QStringList itsAddedFiles;
QString itsPreviewString;
static bool theirFcDirty;
Xft *itsXft;
};
}
#endif