⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qtextengine_p.h

📁 奇趣公司比较新的qt/emd版本
💻 H
📖 第 1 页 / 共 2 页
字号:
    unsigned short charShape         :1;    unsigned short digitSubstitute   :1;    unsigned short inhibitLigate     :1;    unsigned short fDisplayZWG        :1;    unsigned short arabicNumContext  :1;    unsigned short gcpClusters       :1;    unsigned short reserved          :1;    unsigned short engineReserved    :2;};Q_DECLARE_TYPEINFO(QScriptAnalysis, Q_PRIMITIVE_TYPE);inline bool operator == (const QScriptAnalysis &sa1, const QScriptAnalysis &sa2){    return        sa1.script == sa2.script &&        sa1.bidiLevel == sa2.bidiLevel;        // ###//             && override == other.override;}#endifstruct QGlyphLayout{    inline QGlyphLayout()        : glyph(0), justificationType(0), nKashidas(0), space_18d6(0)        {}    // highest value means highest priority for justification. Justification is done by first inserting kashidas    // starting with the highest priority positions, then stretching spaces, afterwards extending inter char    // spacing, and last spacing between arabic words.    // NoJustification is for example set for arabic where no Kashida can be inserted or for diacritics.    enum Justification {        NoJustification= 0,   // Justification can't be applied after this glyph        Arabic_Space   = 1,   // This glyph represents a space inside arabic text        Character      = 2,   // Inter-character justification point follows this glyph        Space          = 4,   // This glyph represents a blank outside an Arabic run        Arabic_Normal  = 7,   // Normal Middle-Of-Word glyph that connects to the right (begin)        Arabic_Waw     = 8,    // Next character is final form of Waw/Ain/Qaf/Fa        Arabic_BaRa    = 9,   // Next two chars are Ba + Ra/Ya/AlefMaksura        Arabic_Alef    = 10,  // Next character is final form of Alef/Tah/Lam/Kaf/Gaf        Arabic_HaaDal  = 11,  // Next character is final form of Haa/Dal/Taa Marbutah        Arabic_Seen    = 12,  // Initial or Medial form Of Seen/Sad        Arabic_Kashida = 13   // Kashida(U+640) in middle of word    };    glyph_t glyph;    struct Attributes {        unsigned short justification   :4;  // Justification class        unsigned short clusterStart    :1;  // First glyph of representation of cluster        unsigned short mark            :1;  // needs to be positioned around base char        unsigned short zeroWidth       :1;  // ZWJ, ZWNJ etc, with no width        unsigned short dontPrint       :1;        unsigned short combiningClass  :8;    };    Attributes attributes;    QFixedPoint advance;    QFixedPoint offset;    enum JustificationType {        JustifyNone,        JustifySpace,        JustifyKashida    };    uint justificationType :2;    uint nKashidas : 6; // more do not make sense...    uint space_18d6 : 24;};Q_DECLARE_TYPEINFO(QGlyphLayout, Q_PRIMITIVE_TYPE);inline bool qIsControlChar(ushort uc){    return uc >= 0x200b && uc <= 0x206f        && (uc <= 0x200f /* ZW Space, ZWNJ, ZWJ, LRM and RLM */            || (uc >= 0x2028 && uc <= 0x202f /* LS, PS, LRE, RLE, PDF, LRO, RLO, NNBSP */)            || uc >= 0x206a /* ISS, ASS, IAFS, AFS, NADS, NODS */);}struct QCharAttributes {    enum LineBreakType {        NoBreak,        SoftHyphen,        Break,        ForcedBreak    };    uchar lineBreakType  :2;    uchar whiteSpace     :1;     // A unicode whitespace character, except NBSP, ZWNBSP    uchar charStop       :1;     // Valid cursor position (for left/right arrow)};Q_DECLARE_TYPEINFO(QCharAttributes, Q_PRIMITIVE_TYPE);struct QScriptItem{    inline QScriptItem() : position(0), isSpace(false), isTab(false),                           isObject(false),                           num_glyphs(0), descent(-1), ascent(-1), width(-1),                           glyph_data_offset(0) {}    int position;    QScriptAnalysis analysis;    unsigned short isSpace  : 1;    unsigned short isTab    : 1;    unsigned short isObject : 1;    int num_glyphs;    QFixed descent;    QFixed ascent;    QFixed width;    int glyph_data_offset;    QFixed height() const { return ascent + descent; }};Q_DECLARE_TYPEINFO(QScriptItem, Q_MOVABLE_TYPE);typedef QVector<QScriptItem> QScriptItemArray;struct QScriptLine{    QScriptLine()        : from(0), length(0),        justified(0), gridfitted(0),        hasTrailingSpaces(0) {}    QFixed descent;    QFixed ascent;    QFixed x;    QFixed y;    QFixed width;    QFixed textWidth;    int from;    signed int length : 29;    mutable uint justified : 1;    mutable uint gridfitted : 1;    uint hasTrailingSpaces : 1;    QFixed height() const { return ascent + descent + 1; }    void setDefaultHeight(QTextEngine *eng);    void operator+=(const QScriptLine &other);};Q_DECLARE_TYPEINFO(QScriptLine, Q_PRIMITIVE_TYPE);inline void QScriptLine::operator+=(const QScriptLine &other){    descent = qMax(descent, other.descent);    ascent = qMax(ascent, other.ascent);    textWidth += other.textWidth;    length += other.length;}typedef QVector<QScriptLine> QScriptLineArray;class QFontPrivate;class QTextFormatCollection;class Q_GUI_EXPORT QTextEngine {public:    struct LayoutData {        LayoutData(const QString &str, void **stack_memory, int mem_size);        LayoutData();        ~LayoutData();        mutable QScriptItemArray items;        int allocated;        int available_glyphs;        void **memory;        unsigned short *logClustersPtr;        QGlyphLayout *glyphPtr;        int num_glyphs;        mutable int used;        uint hasBidi : 1;        uint inLayout : 1;        uint memory_on_stack : 1;        bool haveCharAttributes;        QString string;        void reallocate(int totalGlyphs);    };    QTextEngine(LayoutData *data);    QTextEngine();    QTextEngine(const QString &str, const QFont &f);    ~QTextEngine();    enum Mode {        WidthOnly = 0x07    };    // keep in sync with QAbstractFontEngine::TextShapingFlag!!    enum ShaperFlag {        RightToLeft = 0x0001,        DesignMetrics = 0x0002,        GlyphIndicesOnly = 0x0004    };    Q_DECLARE_FLAGS(ShaperFlags, ShaperFlag)    void invalidate();    void validate() const;    void itemize() const;    static void bidiReorder(int numRuns, const quint8 *levels, int *visualOrder);    const QCharAttributes *attributes() const;    void shape(int item) const;    void justify(const QScriptLine &si);    QFixed width(int charFrom, int numChars) const;    glyph_metrics_t boundingBox(int from,  int len) const;    glyph_metrics_t tightBoundingBox(int from,  int len) const;    int length(int item) const {        const QScriptItem &si = layoutData->items[item];        int from = si.position;        item++;        return (item < layoutData->items.size() ? layoutData->items[item].position : layoutData->string.length()) - from;    }    int length(const QScriptItem *si) const {        int end;        if (si + 1 < layoutData->items.constData()+ layoutData->items.size())            end = (si+1)->position;        else            end = layoutData->string.length();        return end - si->position;    }    QFontEngine *fontEngine(const QScriptItem &si, QFixed *ascent = 0, QFixed *descent = 0) const;    QFont font(const QScriptItem &si) const;    inline QFont font() const { return fnt; }    inline unsigned short *logClusters(const QScriptItem *si) const        { return layoutData->logClustersPtr+si->position; }    inline QGlyphLayout *glyphs(const QScriptItem *si) const        { return layoutData->glyphPtr + si->glyph_data_offset; }    inline void ensureSpace(int nGlyphs) const {        if (layoutData->num_glyphs - layoutData->used < nGlyphs)            layoutData->reallocate((((layoutData->used + nGlyphs)*3/2 + 15) >> 4) << 4);    }    void freeMemory();    int findItem(int strPos) const;    inline QTextFormatCollection *formats() const {#ifdef QT_BUILD_COMPAT_LIB        return 0; // Compat should never reference this symbol#else        return block.docHandle()->formatCollection();#endif    }    QTextCharFormat format(const QScriptItem *si) const;    inline QAbstractTextDocumentLayout *docLayout() const {#ifdef QT_BUILD_COMPAT_LIB        return 0; // Compat should never reference this symbol#else        return block.docHandle()->document()->documentLayout();#endif    }    int formatIndex(const QScriptItem *si) const;    QFixed nextTab(const QScriptItem *si, QFixed x) const;    mutable QScriptLineArray lines;    QString text;    QFont fnt;    QTextBlock block;    QTextOption option;    QFixed minWidth;    QFixed maxWidth;    QPointF position;    uint ignoreBidi : 1;    uint cacheGlyphs : 1;    uint stackEngine : 1;    uint forceJustification : 1;    int *underlinePositions;    mutable LayoutData *layoutData;    inline bool hasFormats() const { return (block.docHandle() || specialData); }    struct SpecialData {        int preeditPosition;        QString preeditText;        QList<QTextLayout::FormatRange> addFormats;        QVector<int> addFormatIndices;        QVector<int> resolvedFormatIndices;    };    SpecialData *specialData;    bool atWordSeparator(int position) const;    void indexAdditionalFormats();    QString elidedText(Qt::TextElideMode mode, const QFixed &width, int flags = 0) const;private:    void setBoundary(int strPos) const;    void addRequiredBoundaries() const;    void shapeText(int item) const;    void splitItem(int item, int pos) const;    void resolveAdditionalFormats() const;};class QStackTextEngine : public QTextEngine {public:    enum { MemSize = 256*40/sizeof(void *) };    QStackTextEngine(const QString &string, const QFont &f);    LayoutData _layoutData;    void *_memory[MemSize];};Q_DECLARE_OPERATORS_FOR_FLAGS(QTextEngine::ShaperFlags)#endif // QTEXTENGINE_P_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -