diff options
Diffstat (limited to 'src/gui/text/qfontsubset.cpp')
-rw-r--r-- | src/gui/text/qfontsubset.cpp | 82 |
1 files changed, 32 insertions, 50 deletions
diff --git a/src/gui/text/qfontsubset.cpp b/src/gui/text/qfontsubset.cpp index f28cc72258..f6c973e522 100644 --- a/src/gui/text/qfontsubset.cpp +++ b/src/gui/text/qfontsubset.cpp @@ -78,24 +78,6 @@ QByteArray QFontSubset::glyphName(unsigned short unicode, bool symbol) return buffer; } -QByteArray QFontSubset::glyphName(unsigned int glyph, const QList<int> &reverseMap) const -{ - uint glyphIndex = glyph_indices[glyph]; - - if (glyphIndex == 0) - return "/.notdef"; - - QByteArray ba; - QPdf::ByteStream s(&ba); - if (reverseMap[glyphIndex] && reverseMap[glyphIndex] < 0x10000) { - s << '/' << glyphName(reverseMap[glyphIndex], false); - } else { - s << "/gl" << (int)glyphIndex; - } - return ba; -} - - QByteArray QFontSubset::widthArray() const { Q_ASSERT(!widths.isEmpty()); @@ -108,7 +90,7 @@ QByteArray QFontSubset::widthArray() const QFixed defWidth = widths[0]; //qDebug("defWidth=%d, scale=%f", defWidth.toInt(), scale.toReal()); - for (int i = 0; i < nGlyphs(); ++i) { + for (qsizetype i = 0; i < nGlyphs(); ++i) { if (defWidth != widths[i]) defWidth = 0; } @@ -116,10 +98,10 @@ QByteArray QFontSubset::widthArray() const s << "/DW " << qRound(defWidth.toInt() * scale); } else { s << "/W ["; - for (int g = 0; g < nGlyphs();) { + for (qsizetype g = 0; g < nGlyphs();) { QFixed w = widths[g]; - int start = g; - int startLinear = 0; + qsizetype start = g; + qsizetype startLinear = 0; ++g; while (g < nGlyphs()) { QFixed nw = widths[g]; @@ -137,11 +119,11 @@ QByteArray QFontSubset::widthArray() const // qDebug("start=%x startLinear=%x g-1=%x",start,startLinear,g-1); if (g - startLinear < 10) startLinear = 0; - int endnonlinear = startLinear ? startLinear : g; + qsizetype endnonlinear = startLinear ? startLinear : g; // qDebug(" startLinear=%x endnonlinear=%x", startLinear,endnonlinear); if (endnonlinear > start) { s << start << '['; - for (int i = start; i < endnonlinear; ++i) + for (qsizetype i = start; i < endnonlinear; ++i) s << qRound(widths[i].toInt() * scale); s << "]\n"; } @@ -195,14 +177,14 @@ QByteArray QFontSubset::createToUnicodeMap() const QPdf::ByteStream s(&ranges); char buf[5]; - for (int g = 1; g < nGlyphs(); ) { + for (qsizetype g = 1; g < nGlyphs(); ) { int uc0 = reverseMap.at(g); if (!uc0) { ++g; continue; } - int start = g; - int startLinear = 0; + qsizetype start = g; + qsizetype startLinear = 0; ++g; while (g < nGlyphs()) { int uc = reverseMap[g]; @@ -223,7 +205,7 @@ QByteArray QFontSubset::createToUnicodeMap() const // qDebug("start=%x startLinear=%x g-1=%x",start,startLinear,g-1); if (g - startLinear < 10) startLinear = 0; - int endnonlinear = startLinear ? startLinear : g; + qsizetype endnonlinear = startLinear ? startLinear : g; // qDebug(" startLinear=%x endnonlinear=%x", startLinear,endnonlinear); if (endnonlinear > start) { s << '<' << QPdf::toHex((ushort)start, buf) << "> <"; @@ -232,7 +214,7 @@ QByteArray QFontSubset::createToUnicodeMap() const s << '<' << QPdf::toHex((ushort)reverseMap[start], buf) << ">\n"; } else { s << '['; - for (int i = start; i < endnonlinear; ++i) { + for (qsizetype i = start; i < endnonlinear; ++i) { s << '<' << QPdf::toHex((ushort)reverseMap[i], buf) << "> "; } s << "]\n"; @@ -241,9 +223,9 @@ QByteArray QFontSubset::createToUnicodeMap() const } if (startLinear) { while (startLinear < g) { - int len = g - startLinear; - int uc_start = reverseMap[startLinear]; - int uc_end = uc_start + len - 1; + qsizetype len = g - startLinear; + qsizetype uc_start = reverseMap[startLinear]; + qsizetype uc_end = uc_start + len - 1; if ((uc_end >> 8) != (uc_start >> 8)) len = 256 - (uc_start & 0xff); s << '<' << QPdf::toHex((ushort)startLinear, buf) << "> <"; @@ -266,14 +248,14 @@ QByteArray QFontSubset::createToUnicodeMap() const return touc; } -int QFontSubset::addGlyph(uint index) +qsizetype QFontSubset::addGlyph(uint index) { qsizetype idx = glyph_indices.indexOf(index); if (idx < 0) { idx = glyph_indices.size(); glyph_indices.append(index); } - return (int)idx; + return idx; } #endif // QT_NO_PDF @@ -419,7 +401,7 @@ static QTtfTable generateHead(const qttf_head_table &head) { const int head_size = 54; QTtfTable t; - t.tag = MAKE_TAG('h', 'e', 'a', 'd'); + t.tag = QFont::Tag("head").value(); t.data.resize(head_size); QTtfStream s(t.data); @@ -490,7 +472,7 @@ static QTtfTable generateHhea(const qttf_hhea_table &hhea) { const int hhea_size = 36; QTtfTable t; - t.tag = MAKE_TAG('h', 'h', 'e', 'a'); + t.tag = QFont::Tag("hhea").value(); t.data.resize(hhea_size); QTtfStream s(t.data); @@ -541,7 +523,7 @@ static QTtfTable generateMaxp(const qttf_maxp_table &maxp) { const int maxp_size = 32; QTtfTable t; - t.tag = MAKE_TAG('m', 'a', 'x', 'p'); + t.tag = QFont::Tag("maxp").value(); t.data.resize(maxp_size); QTtfStream s(t.data); @@ -621,12 +603,12 @@ static QTtfTable generateName(const QList<QTtfNameRecord> &name) const int char_size = 2; QTtfTable t; - t.tag = MAKE_TAG('n', 'a', 'm', 'e'); + t.tag = QFont::Tag("name").value(); const int name_size = 6 + 12*name.size(); int string_size = 0; for (int i = 0; i < name.size(); ++i) { - string_size += name.at(i).value.length()*char_size; + string_size += name.at(i).value.size()*char_size; } t.data.resize(name_size + string_size); @@ -642,7 +624,7 @@ static QTtfTable generateName(const QList<QTtfNameRecord> &name) int off = 0; for (int i = 0; i < name.size(); ++i) { - int len = name.at(i).value.length()*char_size; + int len = name.at(i).value.size()*char_size; // quint16 platformID Platform ID. // quint16 encodingID Platform-specific encoding ID. // quint16 languageID Language ID. @@ -976,15 +958,15 @@ static QList<QTtfTable> generateGlyphTables(qttf_font_tables &tables, const QLis tables.hhea.numberOfHMetrics = nGlyphs; QTtfTable glyf; - glyf.tag = MAKE_TAG('g', 'l', 'y', 'f'); + glyf.tag = QFont::Tag("glyf").value(); QTtfTable loca; - loca.tag = MAKE_TAG('l', 'o', 'c', 'a'); + loca.tag = QFont::Tag("loca").value(); loca.data.resize(glyf_size < max_size_small ? (nGlyphs+1)*sizeof(quint16) : (nGlyphs+1)*sizeof(quint32)); QTtfStream ls(loca.data); QTtfTable hmtx; - hmtx.tag = MAKE_TAG('h', 'm', 't', 'x'); + hmtx.tag = QFont::Tag("hmtx").value(); hmtx.data.resize(nGlyphs*4); QTtfStream hs(hmtx.data); @@ -1084,7 +1066,7 @@ static QByteArray bindFont(const QList<QTtfTable>& _tables) for (int i = 0; i < tables.size(); ++i) { const QTtfTable &t = tables.at(i); const quint32 size = (t.data.size() + 3) & ~3; - if (t.tag == MAKE_TAG('h', 'e', 'a', 'd')) + if (t.tag == QFont::Tag("head").value()) head_offset = table_offset; f << t.tag << checksum(t.data) @@ -1165,12 +1147,12 @@ QByteArray QFontSubset::toTruetype() const font.maxp.maxCompositeContours = 0; font.maxp.maxComponentElements = 0; font.maxp.maxComponentDepth = 0; - const int numGlyphs = nGlyphs(); - font.maxp.numGlyphs = numGlyphs; + const qsizetype numGlyphs = nGlyphs(); + font.maxp.numGlyphs = quint16(numGlyphs); QList<QTtfGlyph> glyphs; glyphs.reserve(numGlyphs); - for (int i = 0; i < numGlyphs; ++i) { + for (qsizetype i = 0; i < numGlyphs; ++i) { glyph_t g = glyph_indices.at(i); QPainterPath path; glyph_metrics_t metric; @@ -1204,7 +1186,7 @@ QByteArray QFontSubset::toTruetype() const tables.append(generateMaxp(font.maxp)); // name QTtfTable name_table; - name_table.tag = MAKE_TAG('n', 'a', 'm', 'e'); + name_table.tag = QFont::Tag("name").value(); if (!noEmbed) name_table.data = fontEngine->getSfntTable(name_table.tag); if (name_table.data.isEmpty()) { @@ -1213,7 +1195,7 @@ QByteArray QFontSubset::toTruetype() const name.copyright = "Fake font"_L1; else name.copyright = QLatin1StringView(properties.copyright); - name.family = fontEngine->fontDef.families.first(); + name.family = fontEngine->fontDef.families.constFirst(); name.subfamily = "Regular"_L1; // ###### name.postscript_name = QLatin1StringView(properties.postscriptName); name_table = generateName(name); @@ -1222,7 +1204,7 @@ QByteArray QFontSubset::toTruetype() const if (!noEmbed) { QTtfTable os2; - os2.tag = MAKE_TAG('O', 'S', '/', '2'); + os2.tag = QFont::Tag("OS/2").value(); os2.data = fontEngine->getSfntTable(os2.tag); if (!os2.data.isEmpty()) tables.append(os2); |