Ignore:
Timestamp:
Aug 2, 2010, 9:27:30 PM (15 years ago)
Author:
Dmitry A. Kuminov
Message:

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

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

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

    r651 r769  
    4545#include <private/qapplication_p.h>
    4646#include "qimage.h"
    47 #include "qt_s60_p.h"
     47#include <private/qt_s60_p.h>
    4848
    4949#include <e32base.h>
     
    5454QT_BEGIN_NAMESPACE
    5555
    56 QFontEngineS60Extensions::QFontEngineS60Extensions(CFont* fontOwner, COpenFont *font)
     56QSymbianTypeFaceExtras::QSymbianTypeFaceExtras(CFont* fontOwner, COpenFont *font)
    5757    : m_font(font)
    5858    , m_cmap(0)
     
    6060    , m_fontOwner(fontOwner)
    6161{
    62     TAny *shapingExtension = NULL;
    63     m_font->ExtendedInterface(KUidOpenFontShapingExtension, shapingExtension);
    64     m_shapingExtension = static_cast<MOpenFontShapingExtension*>(shapingExtension);
    6562    TAny *trueTypeExtension = NULL;
    6663    m_font->ExtendedInterface(KUidOpenFontTrueTypeExtension, trueTypeExtension);
    6764    m_trueTypeExtension = static_cast<MOpenFontTrueTypeExtension*>(trueTypeExtension);
    68     Q_ASSERT(m_shapingExtension && m_trueTypeExtension);
    69 }
    70 
    71 QByteArray QFontEngineS60Extensions::getSfntTable(uint tag) const
     65    Q_ASSERT(m_trueTypeExtension);
     66}
     67
     68QByteArray QSymbianTypeFaceExtras::getSfntTable(uint tag) const
    7269{
    7370    Q_ASSERT(m_trueTypeExtension->HasTrueTypeTable(tag));
     
    8077}
    8178
    82 const unsigned char *QFontEngineS60Extensions::cmap() const
     79bool QSymbianTypeFaceExtras::getSfntTableData(uint tag, uchar *buffer, uint *length) const
     80{
     81    if (!m_trueTypeExtension->HasTrueTypeTable(tag))
     82        return false;
     83
     84    bool result = true;
     85    TInt error = KErrNone;
     86    TInt tableByteLength;
     87    TAny *table =
     88        q_check_ptr(m_trueTypeExtension->GetTrueTypeTable(error, tag, &tableByteLength));
     89
     90    if (error != KErrNone) {
     91        return false;
     92    } else if (*length > 0 && *length < tableByteLength) {
     93        result = false; // Caller did not allocate enough memory
     94    } else {
     95        *length = tableByteLength;
     96        if (buffer)
     97            qMemCopy(buffer, table, tableByteLength);
     98    }
     99
     100    m_trueTypeExtension->ReleaseTrueTypeTable(table);
     101    return result;
     102}
     103
     104const unsigned char *QSymbianTypeFaceExtras::cmap() const
    83105{
    84106    if (!m_cmap) {
     
    90112}
    91113
    92 QPainterPath QFontEngineS60Extensions::glyphOutline(glyph_t glyph) const
    93 {
    94     QPainterPath result;
    95     QPolygonF polygon;
    96     TInt glyphIndex = glyph;
    97     TInt pointNumber = 0;
    98     TInt x, y;
    99     while (m_shapingExtension->GlyphPointInFontUnits(glyphIndex, pointNumber++, x, y)) {
    100         const QPointF point(qreal(x) / 0xffff, qreal(y) / 0xffff);
    101         if (polygon.contains(point)) {
    102             result.addPolygon(polygon);
    103             result.closeSubpath();
    104             polygon.clear();
    105         } else {
    106             polygon.append(point);
    107         }
    108     }
    109     return result;
    110 }
    111 
    112 CFont *QFontEngineS60Extensions::fontOwner() const
     114CFont *QSymbianTypeFaceExtras::fontOwner() const
    113115{
    114116    return m_fontOwner;
     
    168170}
    169171
    170 QFontEngineS60::QFontEngineS60(const QFontDef &request, const QFontEngineS60Extensions *extensions)
    171     : m_extensions(extensions)
     172QFontEngineS60::QFontEngineS60(const QFontDef &request, const QSymbianTypeFaceExtras *extras)
     173    : m_extras(extras)
    172174    , m_originalFont(0)
    173175    , m_originalFontSizeInPixels((request.pixelSize >= 0)?
     
    196198
    197199    HB_Glyph *g = glyphs->glyphs;
    198     const unsigned char* cmap = m_extensions->cmap();
     200    const unsigned char* cmap = m_extras->cmap();
     201    const bool isRtl = (flags & QTextEngine::RightToLeft);
    199202    for (int i = 0; i < len; ++i) {
    200203        const unsigned int uc = getChar(characters, i, len);
    201         *g++ = QFontEngine::getTrueTypeGlyphIndex(cmap, uc);
     204        *g++ = QFontEngine::getTrueTypeGlyphIndex(cmap,
     205                        isRtl ? QChar::mirroredChar(uc) : uc);
    202206    }
    203207
     
    217221    for (int i = 0; i < glyphs->numGlyphs; i++) {
    218222        const glyph_metrics_t bbox = boundingBox_const(glyphs->glyphs[i]);
    219         glyphs->advances_x[i] = glyphs->offsets[i].x = bbox.xoff;
    220         glyphs->advances_y[i] = glyphs->offsets[i].y = bbox.yoff;
     223        glyphs->advances_x[i] = bbox.xoff;
     224        glyphs->advances_y[i] = bbox.yoff;
    221225    }
    222226}
     
    313317bool QFontEngineS60::canRender(const QChar *string, int len)
    314318{
    315     const unsigned char *cmap = m_extensions->cmap();
     319    const unsigned char *cmap = m_extras->cmap();
    316320    for (int i = 0; i < len; ++i) {
    317321        const unsigned int uc = getChar(string, i, len);
     
    324328QByteArray QFontEngineS60::getSfntTable(uint tag) const
    325329{
    326     return m_extensions->getSfntTable(tag);
     330    return m_extras->getSfntTable(tag);
     331}
     332
     333bool QFontEngineS60::getSfntTableData(uint tag, uchar *buffer, uint *length) const
     334{
     335    return m_extras->getSfntTableData(tag, buffer, length);
    327336}
    328337
Note: See TracChangeset for help on using the changeset viewer.