Ignore:
Timestamp:
Mar 8, 2010, 12:52:58 PM (15 years ago)
Author:
Dmitry A. Kuminov
Message:

trunk: Merged in qt 4.6.2 sources.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

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

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
     
    130130}
    131131
     132CFont *QFontEngineS60::fontWithSize(qreal size) const
     133{
     134    CFont *result = 0;
     135    TFontSpec fontSpec(qt_QString2TPtrC(QFontEngine::fontDef.family), TInt(size));
     136    fontSpec.iFontStyle.SetBitmapType(EAntiAliasedGlyphBitmap);
     137    fontSpec.iFontStyle.SetPosture(QFontEngine::fontDef.style == QFont::StyleNormal?EPostureUpright:EPostureItalic);
     138    fontSpec.iFontStyle.SetStrokeWeight(QFontEngine::fontDef.weight > QFont::Normal?EStrokeWeightBold:EStrokeWeightNormal);
     139    const TInt errorCode = S60->screenDevice()->GetNearestFontToDesignHeightInPixels(result, fontSpec);
     140    Q_ASSERT(result && (errorCode == 0));
     141    return result;
     142}
     143
     144void QFontEngineS60::setFontScale(qreal scale)
     145{
     146    if (qFuzzyCompare(scale, qreal(1))) {
     147        if (!m_originalFont)
     148            m_originalFont = fontWithSize(m_originalFontSizeInPixels);
     149        m_activeFont = m_originalFont;
     150    } else {
     151        const qreal scaledFontSizeInPixels = m_originalFontSizeInPixels * scale;
     152        if (!m_scaledFont ||
     153                (TInt(scaledFontSizeInPixels) != TInt(m_scaledFontSizeInPixels))) {
     154            releaseFont(m_scaledFont);
     155            m_scaledFontSizeInPixels = scaledFontSizeInPixels;
     156            m_scaledFont = fontWithSize(m_scaledFontSizeInPixels);
     157        }
     158        m_activeFont = m_scaledFont;
     159    }
     160}
     161
     162void QFontEngineS60::releaseFont(CFont *&font)
     163{
     164    if (font) {
     165        S60->screenDevice()->ReleaseFont(font);
     166        font = 0;
     167    }
     168}
     169
    132170QFontEngineS60::QFontEngineS60(const QFontDef &request, const QFontEngineS60Extensions *extensions)
    133171    : m_extensions(extensions)
     172    , m_originalFont(0)
     173    , m_originalFontSizeInPixels((request.pixelSize >= 0)?
     174            request.pixelSize:pointsToPixels(request.pointSize))
     175    , m_scaledFont(0)
     176    , m_scaledFontSizeInPixels(0)
     177    , m_activeFont(0)
    134178{
    135179    QFontEngine::fontDef = request;
    136     m_fontSizeInPixels = (request.pixelSize >= 0)?
    137             request.pixelSize:pointsToPixels(request.pointSize);
    138 
    139     TFontSpec fontSpec(qt_QString2TPtrC(request.family), m_fontSizeInPixels);
    140     fontSpec.iFontStyle.SetBitmapType(EAntiAliasedGlyphBitmap);
    141     fontSpec.iFontStyle.SetPosture(request.style == QFont::StyleNormal?EPostureUpright:EPostureItalic);
    142     fontSpec.iFontStyle.SetStrokeWeight(request.weight > QFont::Normal?EStrokeWeightBold:EStrokeWeightNormal);
    143     const TInt errorCode = S60->screenDevice()->GetNearestFontToDesignHeightInPixels(m_font, fontSpec);
    144     Q_ASSERT(errorCode == 0);
    145 
     180    setFontScale(1.0);
    146181    cache_cost = sizeof(QFontEngineS60);
    147182}
     
    149184QFontEngineS60::~QFontEngineS60()
    150185{
    151     S60->screenDevice()->ReleaseFont(m_font);
     186    releaseFont(m_originalFont);
     187    releaseFont(m_scaledFont);
    152188}
    153189
     
    252288QFixed QFontEngineS60::ascent() const
    253289{
    254     return m_font->FontMaxAscent();
     290    return m_originalFont->FontMaxAscent();
    255291}
    256292
    257293QFixed QFontEngineS60::descent() const
    258294{
    259     return m_font->FontMaxDescent();
     295    return m_originalFont->FontMaxDescent();
    260296}
    261297
     
    267303qreal QFontEngineS60::maxCharWidth() const
    268304{
    269     return m_font->MaxCharWidthInPixels();
     305    return m_originalFont->MaxCharWidthInPixels();
    270306}
    271307
     
    303339
    304340    const CFont::TCharacterDataAvailability availability =
    305         m_font->GetCharacterData(specialCode, metrics, bitmap, bitmapSize);
     341            m_activeFont->GetCharacterData(specialCode, metrics, bitmap, bitmapSize);
    306342    const glyph_t fallbackGlyph = '?';
    307343    if (availability != CFont::EAllCharacterData) {
    308344        const CFont::TCharacterDataAvailability fallbackAvailability =
    309             m_font->GetCharacterData(fallbackGlyph, metrics, bitmap, bitmapSize);
     345                m_activeFont->GetCharacterData(fallbackGlyph, metrics, bitmap, bitmapSize);
    310346        Q_ASSERT(fallbackAvailability == CFont::EAllCharacterData);
    311347    }
Note: See TracChangeset for help on using the changeset viewer.