/**************************************************************************** ** ** Copyright (C) 2015 The Qt Company Ltd. ** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see http://www.qt.io/terms-conditions. For further ** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 or version 3 as published by the Free ** Software Foundation and appearing in the file LICENSE.LGPLv21 and ** LICENSE.LGPLv3 included in the packaging of this file. Please review the ** following information to ensure the GNU Lesser General Public License ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** As a special exception, The Qt Company gives you certain additional ** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QABSTRACTFONTENGINE_QWS_H #define QABSTRACTFONTENGINE_QWS_H #include #include #include #include #include #include QT_BEGIN_HEADER QT_BEGIN_NAMESPACE QT_MODULE(Gui) class QFontEngineInfoPrivate; class Q_GUI_EXPORT QFontEngineInfo { public: QDOC_PROPERTY(QString family READ family WRITE setFamily) QDOC_PROPERTY(qreal pixelSize READ pixelSize WRITE setPixelSize) QDOC_PROPERTY(int weight READ weight WRITE setWeight) QDOC_PROPERTY(QFont::Style style READ style WRITE setStyle) QDOC_PROPERTY(QList writingSystems READ writingSystems WRITE setWritingSystems) QFontEngineInfo(); explicit QFontEngineInfo(const QString &family); QFontEngineInfo(const QFontEngineInfo &other); QFontEngineInfo &operator=(const QFontEngineInfo &other); ~QFontEngineInfo(); void setFamily(const QString &name); QString family() const; void setPixelSize(qreal size); qreal pixelSize() const; void setWeight(int weight); int weight() const; void setStyle(QFont::Style style); QFont::Style style() const; QList writingSystems() const; void setWritingSystems(const QList &writingSystems); private: QFontEngineInfoPrivate *d; }; class QAbstractFontEngine; struct Q_GUI_EXPORT QFontEngineFactoryInterface : public QFactoryInterface { virtual QAbstractFontEngine *create(const QFontEngineInfo &info) = 0; virtual QList availableFontEngines() const = 0; }; #define QFontEngineFactoryInterface_iid "com.trolltech.Qt.QFontEngineFactoryInterface" Q_DECLARE_INTERFACE(QFontEngineFactoryInterface, QFontEngineFactoryInterface_iid) class QFontEnginePluginPrivate; class Q_GUI_EXPORT QFontEnginePlugin : public QObject, public QFontEngineFactoryInterface { Q_OBJECT Q_INTERFACES(QFontEngineFactoryInterface:QFactoryInterface) public: QFontEnginePlugin(const QString &foundry, QObject *parent = 0); ~QFontEnginePlugin(); virtual QStringList keys() const; virtual QAbstractFontEngine *create(const QFontEngineInfo &info) = 0; virtual QList availableFontEngines() const = 0; private: Q_DECLARE_PRIVATE(QFontEnginePlugin) Q_DISABLE_COPY(QFontEnginePlugin) }; class QAbstractFontEnginePrivate; class Q_GUI_EXPORT QAbstractFontEngine : public QObject { Q_OBJECT public: enum Capability { CanOutlineGlyphs = 1, CanRenderGlyphs_Mono = 2, CanRenderGlyphs_Gray = 4, CanRenderGlyphs = CanRenderGlyphs_Mono | CanRenderGlyphs_Gray }; Q_DECLARE_FLAGS(Capabilities, Capability) explicit QAbstractFontEngine(QObject *parent = 0); ~QAbstractFontEngine(); typedef int Fixed; // 26.6 struct FixedPoint { Fixed x; Fixed y; }; struct GlyphMetrics { inline GlyphMetrics() : x(0), y(0), width(0), height(0), advance(0) {} Fixed x; Fixed y; Fixed width; Fixed height; Fixed advance; }; enum FontProperty { Ascent, Descent, Leading, XHeight, AverageCharWidth, LineThickness, UnderlinePosition, MaxCharWidth, MinLeftBearing, MinRightBearing, GlyphCount, // hints CacheGlyphsHint, OutlineGlyphsHint }; // keep in sync with QTextEngine::ShaperFlag!! enum TextShapingFlag { RightToLeft = 0x0001, ReturnDesignMetrics = 0x0002 }; Q_DECLARE_FLAGS(TextShapingFlags, TextShapingFlag) virtual Capabilities capabilities() const = 0; virtual QVariant fontProperty(FontProperty property) const = 0; virtual bool convertStringToGlyphIndices(const QChar *string, int length, uint *glyphs, int *numGlyphs, TextShapingFlags flags) const = 0; virtual void getGlyphAdvances(const uint *glyphs, int numGlyphs, Fixed *advances, TextShapingFlags flags) const = 0; virtual GlyphMetrics glyphMetrics(uint glyph) const = 0; virtual bool renderGlyph(uint glyph, int depth, int bytesPerLine, int height, uchar *buffer); virtual void addGlyphOutlinesToPath(uint *glyphs, int numGlyphs, FixedPoint *positions, QPainterPath *path); /* enum Extension { GetTrueTypeTable }; virtual bool supportsExtension(Extension extension) const; virtual QVariant extension(Extension extension, const QVariant &argument = QVariant()); */ private: Q_DECLARE_PRIVATE(QAbstractFontEngine) Q_DISABLE_COPY(QAbstractFontEngine) }; Q_DECLARE_OPERATORS_FOR_FLAGS(QAbstractFontEngine::Capabilities) Q_DECLARE_OPERATORS_FOR_FLAGS(QAbstractFontEngine::TextShapingFlags) QT_END_NAMESPACE QT_END_HEADER #endif