Ignore:
Timestamp:
May 5, 2011, 5:36:53 AM (14 years ago)
Author:
Dmitry A. Kuminov
Message:

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/gui/text/qfontmetrics.cpp

    r769 r846  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
     
    329329    QFontEngine *engine = d->engineForScript(QUnicodeTables::Common);
    330330    Q_ASSERT(engine != 0);
    331     return qRound(engine->ascent() + engine->descent()) + 1;
     331    return qRound(engine->ascent()) + qRound(engine->descent()) + 1;
    332332}
    333333
     
    357357    QFontEngine *engine = d->engineForScript(QUnicodeTables::Common);
    358358    Q_ASSERT(engine != 0);
    359     return qRound(engine->leading() + engine->ascent() + engine->descent()) + 1;
     359    return qRound(engine->leading()) + qRound(engine->ascent()) + qRound(engine->descent()) + 1;
    360360}
    361361
     
    526526*/
    527527int QFontMetrics::width(const QString &text, int len) const
     528{
     529    return width(text, len, 0);
     530}
     531
     532/*!
     533    \internal
     534*/
     535int QFontMetrics::width(const QString &text, int len, int flags) const
    528536{
    529537    int pos = text.indexOf(QLatin1Char('\x9c'));
     
    536544        return 0;
    537545
    538     QTextEngine layout(text, d.data());
     546    if (flags & Qt::TextBypassShaping) {
     547        // Skip harfbuzz complex shaping, only use advances
     548        int numGlyphs = len;
     549        QVarLengthGlyphLayoutArray glyphs(numGlyphs);
     550        QFontEngine *engine = d->engineForScript(QUnicodeTables::Common);
     551        if (!engine->stringToCMap(text.data(), len, &glyphs, &numGlyphs, 0)) {
     552            glyphs.resize(numGlyphs);
     553            if (!engine->stringToCMap(text.data(), len, &glyphs, &numGlyphs, 0))
     554                Q_ASSERT_X(false, Q_FUNC_INFO, "stringToCMap shouldn't fail twice");
     555        }
     556
     557        QFixed width;
     558        for (int i = 0; i < numGlyphs; ++i)
     559            width += glyphs.advances_x[i];
     560        return qRound(width);
     561    }
     562
     563    QStackTextEngine layout(text, d.data());
    539564    layout.ignoreBidi = true;
    540565    return qRound(layout.width(0, len));
     
    612637        int to = qMin(text.length(), pos + 8);
    613638        QString cstr = QString::fromRawData(text.unicode() + from, to - from);
    614         QTextEngine layout(cstr, d.data());
     639        QStackTextEngine layout(cstr, d.data());
    615640        layout.ignoreBidi = true;
    616641        layout.itemize();
     
    661686        return QRect();
    662687
    663     QTextEngine layout(text, d.data());
     688    QStackTextEngine layout(text, d.data());
    664689    layout.ignoreBidi = true;
    665690    layout.itemize();
     
    831856        return QRect();
    832857
    833     QTextEngine layout(text, d.data());
     858    QStackTextEngine layout(text, d.data());
    834859    layout.ignoreBidi = true;
    835860    layout.itemize();
     
    13761401    int len = (pos != -1) ? pos : text.length();
    13771402
    1378     QTextEngine layout(text, d.data());
     1403    QStackTextEngine layout(text, d.data());
    13791404    layout.ignoreBidi = true;
    13801405    layout.itemize();
     
    14531478        return QRectF();
    14541479
    1455     QTextEngine layout(text, d.data());
     1480    QStackTextEngine layout(text, d.data());
    14561481    layout.ignoreBidi = true;
    14571482    layout.itemize();
     
    16261651        return QRect();
    16271652
    1628     QTextEngine layout(text, d.data());
     1653    QStackTextEngine layout(text, d.data());
    16291654    layout.ignoreBidi = true;
    16301655    layout.itemize();
Note: See TracChangeset for help on using the changeset viewer.