Ignore:
Timestamp:
Nov 13, 2009, 11:57:53 PM (16 years ago)
Author:
Dmitry A. Kuminov
Message:

gui/text: Keep track of scripts supported by individual styles within a font family to make sure that if some style doesn't support all scripts the other style does, the font matching algorithm will select another family for this style instead of drawing empty boxes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/gui/text/qfontdatabase.cpp

    r223 r318  
    145145                                uint yres = 0, uint avgwidth = 0, bool add = false);
    146146#endif // Q_WS_X11
     147#ifdef Q_WS_PM
     148    QList<QFontDatabase::WritingSystem> systems;
     149#endif
    147150#if defined(Q_WS_QWS) || defined(Q_WS_PM)
    148151    QByteArray fileName;
     
    224227            free(pixelSizes[count].encodings);
    225228#endif
     229#ifdef Q_WS_PM
     230            pixelSizes[count].systems.~QList<QFontDatabase::WritingSystem>();
     231#endif
    226232#if defined(Q_WS_QWS) || defined(Q_WS_PM)
    227233            pixelSizes[count].fileName.~QByteArray();
     
    279285    pixelSizes[count].count = 0;
    280286    pixelSizes[count].encodings = 0;
     287#endif
     288#ifdef Q_WS_PM
     289    new (&pixelSizes[count].systems) QList<QFontDatabase::WritingSystem>;
    281290#endif
    282291#if defined(Q_WS_QWS) || defined(Q_WS_PM)
     
    965974#endif // Q_WS_X11
    966975
     976#if defined(Q_WS_PM)
     977static bool sizeSupportsScript(int script, QtFontSize *size)
     978{
     979    // empty writing system list means we support all
     980    // (see qfontdatabase_pm.cpp for explanation)
     981    if (size->systems.isEmpty())
     982        return true;
     983    foreach (QFontDatabase::WritingSystem ws, size->systems) {
     984        if (scriptForWritingSystem[ws] == script)
     985            return true;
     986    }
     987    return false;
     988}
     989#endif // Q_WS_PM
     990
    967991#if !defined(Q_WS_MAC)
    968992static
     
    10461070                }
    10471071#endif
     1072#ifdef Q_WS_PM
     1073                if (!sizeSupportsScript(script, style->pixelSizes + x)) {
     1074                    FM_DEBUG("          size %3d does not support the script we want",
     1075                             style->pixelSizes[x].pixelSize);
     1076                    continue;
     1077                }
     1078#endif
    10481079
    10491080                unsigned int d;
     
    10901121        }
    10911122#endif // Q_WS_X11
     1123#ifdef Q_WS_PM
     1124        if (size) {
     1125            if (!sizeSupportsScript(script, size)) {
     1126                size = 0;
     1127                FM_DEBUG("          foundry doesn't support the script we want");
     1128                continue;
     1129            }
     1130        }
     1131#endif
    10921132
    10931133        unsigned int this_score = 0x0000;
Note: See TracChangeset for help on using the changeset viewer.