Remove Type1 support
Type1 support was only required for postscript generation. As we don't support this anymore, get rid of this code. Change-Id: Ifdc27ec563b5da8d94554f8b078bcd3ac079d201 Reviewed-on: http://codereview.qt.nokia.com/3214 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
This commit is contained in:
parent
28f1c1b9ef
commit
b7f3253f90
@ -57,8 +57,6 @@
|
|||||||
#include FT_FREETYPE_H
|
#include FT_FREETYPE_H
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef QT_NO_PRINTER
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
static const char * const agl =
|
static const char * const agl =
|
||||||
@ -1493,251 +1491,4 @@ QByteArray QFontSubset::toTruetype() const
|
|||||||
return bindFont(tables);
|
return bindFont(tables);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------ Type 1 generation ---------------------------
|
|
||||||
|
|
||||||
// needs at least 6 bytes of space in tmp
|
|
||||||
static const char *encodeNumber(int num, char *tmp)
|
|
||||||
{
|
|
||||||
const char *ret = tmp;
|
|
||||||
if(num >= -107 && num <= 107) {
|
|
||||||
QPdf::toHex((uchar)(num + 139), tmp);
|
|
||||||
tmp += 2;
|
|
||||||
} else if (num > 107 && num <= 1131) {
|
|
||||||
num -= 108;
|
|
||||||
QPdf::toHex((uchar)((num >> 8) + 247), tmp);
|
|
||||||
tmp += 2;
|
|
||||||
QPdf::toHex((uchar)(num & 0xff), tmp);
|
|
||||||
tmp += 2;
|
|
||||||
} else if(num < - 107 && num >= -1131) {
|
|
||||||
num += 108;
|
|
||||||
num = -num;
|
|
||||||
QPdf::toHex((uchar)((num >> 8) + 251), tmp);
|
|
||||||
tmp += 2;
|
|
||||||
QPdf::toHex((uchar)(num & 0xff), tmp);
|
|
||||||
tmp += 2;
|
|
||||||
} else {
|
|
||||||
*tmp++ = 'f';
|
|
||||||
*tmp++ = 'f';
|
|
||||||
QPdf::toHex((uchar)(num >> 24), tmp);
|
|
||||||
tmp += 2;
|
|
||||||
QPdf::toHex((uchar)(num >> 16), tmp);
|
|
||||||
tmp += 2;
|
|
||||||
QPdf::toHex((uchar)(num >> 8), tmp);
|
|
||||||
tmp += 2;
|
|
||||||
QPdf::toHex((uchar)(num >> 0), tmp);
|
|
||||||
tmp += 2;
|
|
||||||
}
|
|
||||||
*tmp = 0;
|
|
||||||
// qDebug("encodeNumber: %d -> '%s'", num, ret);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static QByteArray charString(const QPainterPath &path, qreal advance, qreal lsb, qreal ppem)
|
|
||||||
{
|
|
||||||
// the charstring commands we need
|
|
||||||
const char *hsbw = "0D";
|
|
||||||
const char *closepath = "09";
|
|
||||||
const char *moveto[3] = { "16", "04", "15" };
|
|
||||||
const char *lineto[3] = { "06", "07", "05" };
|
|
||||||
const char *rcurveto = "08";
|
|
||||||
const char *endchar = "0E";
|
|
||||||
|
|
||||||
enum { horizontal = 1, vertical = 2 };
|
|
||||||
|
|
||||||
char tmp[16];
|
|
||||||
|
|
||||||
qreal factor = 1000./ppem;
|
|
||||||
|
|
||||||
int lsb_i = qRound(lsb*factor);
|
|
||||||
int advance_i = qRound(advance*factor);
|
|
||||||
// qDebug("--- charstring");
|
|
||||||
|
|
||||||
// first of all add lsb and width to the charstring using the hsbw command
|
|
||||||
QByteArray charstring;
|
|
||||||
charstring += encodeNumber(lsb_i, tmp);
|
|
||||||
charstring += encodeNumber(advance_i, tmp);
|
|
||||||
charstring += hsbw;
|
|
||||||
|
|
||||||
// add the path
|
|
||||||
int xl = lsb_i;
|
|
||||||
int yl = 0;
|
|
||||||
bool openpath = false;
|
|
||||||
for (int i = 0; i < path.elementCount(); ++i) {
|
|
||||||
const QPainterPath::Element &elm = path.elementAt(i);
|
|
||||||
int x = qRound(elm.x*factor);
|
|
||||||
int y = -qRound(elm.y*factor);
|
|
||||||
int dx = x - xl;
|
|
||||||
int dy = y - yl;
|
|
||||||
if (elm.type == QPainterPath::MoveToElement && openpath) {
|
|
||||||
// qDebug("closepath %s", closepath);
|
|
||||||
charstring += closepath;
|
|
||||||
}
|
|
||||||
if (elm.type == QPainterPath::MoveToElement ||
|
|
||||||
elm.type == QPainterPath::LineToElement) {
|
|
||||||
int type = -1;
|
|
||||||
if (dx || !dy) {
|
|
||||||
charstring += encodeNumber(dx, tmp);
|
|
||||||
type += horizontal;
|
|
||||||
// qDebug("horizontal");
|
|
||||||
}
|
|
||||||
if (dy) {
|
|
||||||
charstring += encodeNumber(dy, tmp);
|
|
||||||
type += vertical;
|
|
||||||
// qDebug("vertical");
|
|
||||||
}
|
|
||||||
// qDebug("moveto/lineto %s", (elm.type == QPainterPath::MoveToElement ? moveto[type] : lineto[type]));
|
|
||||||
charstring += (elm.type == QPainterPath::MoveToElement ? moveto[type] : lineto[type]);
|
|
||||||
openpath = true;
|
|
||||||
xl = x;
|
|
||||||
yl = y;
|
|
||||||
} else {
|
|
||||||
Q_ASSERT(elm.type == QPainterPath::CurveToElement);
|
|
||||||
const QPainterPath::Element &elm2 = path.elementAt(++i);
|
|
||||||
const QPainterPath::Element &elm3 = path.elementAt(++i);
|
|
||||||
int x2 = qRound(elm2.x*factor);
|
|
||||||
int y2 = -qRound(elm2.y*factor);
|
|
||||||
int x3 = qRound(elm3.x*factor);
|
|
||||||
int y3 = -qRound(elm3.y*factor);
|
|
||||||
charstring += encodeNumber(dx, tmp);
|
|
||||||
charstring += encodeNumber(dy, tmp);
|
|
||||||
charstring += encodeNumber(x2 - x, tmp);
|
|
||||||
charstring += encodeNumber(y2 - y, tmp);
|
|
||||||
charstring += encodeNumber(x3 - x2, tmp);
|
|
||||||
charstring += encodeNumber(y3 - y2, tmp);
|
|
||||||
charstring += rcurveto;
|
|
||||||
openpath = true;
|
|
||||||
xl = x3;
|
|
||||||
yl = y3;
|
|
||||||
// qDebug("rcurveto");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (openpath)
|
|
||||||
charstring += closepath;
|
|
||||||
charstring += endchar;
|
|
||||||
if (charstring.length() > 240) {
|
|
||||||
int pos = 240;
|
|
||||||
while (pos < charstring.length()) {
|
|
||||||
charstring.insert(pos, '\n');
|
|
||||||
pos += 241;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return charstring;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef QT_NO_FREETYPE
|
|
||||||
static const char *helvetica_styles[4] = {
|
|
||||||
"Helvetica",
|
|
||||||
"Helvetica-Bold",
|
|
||||||
"Helvetica-Oblique",
|
|
||||||
"Helvetica-BoldOblique"
|
|
||||||
};
|
|
||||||
static const char *times_styles[4] = {
|
|
||||||
"Times-Regular",
|
|
||||||
"Times-Bold",
|
|
||||||
"Times-Italic",
|
|
||||||
"Times-BoldItalic"
|
|
||||||
};
|
|
||||||
static const char *courier_styles[4] = {
|
|
||||||
"Courier",
|
|
||||||
"Courier-Bold",
|
|
||||||
"Courier-Oblique",
|
|
||||||
"Courier-BoldOblique"
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
QByteArray QFontSubset::toType1() const
|
|
||||||
{
|
|
||||||
QFontEngine::Properties properties = fontEngine->properties();
|
|
||||||
QVector<int> reverseMap = getReverseMap();
|
|
||||||
|
|
||||||
QByteArray font;
|
|
||||||
QPdf::ByteStream s(&font);
|
|
||||||
|
|
||||||
QByteArray id = QByteArray::number(object_id);
|
|
||||||
QByteArray psname = properties.postscriptName;
|
|
||||||
psname.replace(' ', "");
|
|
||||||
|
|
||||||
standard_font = false;
|
|
||||||
|
|
||||||
#ifndef QT_NO_FREETYPE
|
|
||||||
FT_Face face = ft_face(fontEngine);
|
|
||||||
if (face && !FT_IS_SCALABLE(face)) {
|
|
||||||
int style = 0;
|
|
||||||
if (fontEngine->fontDef.style)
|
|
||||||
style += 2;
|
|
||||||
if (fontEngine->fontDef.weight >= QFont::Bold)
|
|
||||||
style++;
|
|
||||||
if (fontEngine->fontDef.family.contains(QLatin1String("Helvetica"))) {
|
|
||||||
psname = helvetica_styles[style];
|
|
||||||
standard_font = true;
|
|
||||||
} else if (fontEngine->fontDef.family.contains(QLatin1String("Times"))) {
|
|
||||||
psname = times_styles[style];
|
|
||||||
standard_font = true;
|
|
||||||
} else if (fontEngine->fontDef.family.contains(QLatin1String("Courier"))) {
|
|
||||||
psname = courier_styles[style];
|
|
||||||
standard_font = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
s << "/F" << id << "-Base\n";
|
|
||||||
if (standard_font) {
|
|
||||||
s << '/' << psname << " findfont\n"
|
|
||||||
"0 dict copy dup /NumGlyphs 0 put dup /CMap 256 array put def\n";
|
|
||||||
} else {
|
|
||||||
s << "<<\n";
|
|
||||||
if(!psname.isEmpty())
|
|
||||||
s << "/FontName /" << psname << '\n';
|
|
||||||
s << "/FontInfo <</FsType " << (int)fontEngine->fsType << ">>\n"
|
|
||||||
"/FontType 1\n"
|
|
||||||
"/PaintType 0\n"
|
|
||||||
"/FontMatrix [.001 0 0 .001 0 0]\n"
|
|
||||||
"/FontBBox { 0 0 0 0 }\n"
|
|
||||||
"/Private <<\n"
|
|
||||||
"/password 5839\n"
|
|
||||||
"/MinFeature {16 16}\n"
|
|
||||||
"/BlueValues []\n"
|
|
||||||
"/lenIV -1\n"
|
|
||||||
">>\n"
|
|
||||||
"/CharStrings << >>\n"
|
|
||||||
"/NumGlyphs 0\n"
|
|
||||||
"/CMap 256 array\n"
|
|
||||||
">> def\n";
|
|
||||||
}
|
|
||||||
s << type1AddedGlyphs();
|
|
||||||
downloaded_glyphs = glyph_indices.size();
|
|
||||||
|
|
||||||
return font;
|
|
||||||
}
|
|
||||||
|
|
||||||
QByteArray QFontSubset::type1AddedGlyphs() const
|
|
||||||
{
|
|
||||||
if (downloaded_glyphs == glyph_indices.size())
|
|
||||||
return QByteArray();
|
|
||||||
|
|
||||||
QFontEngine::Properties properties = fontEngine->properties();
|
|
||||||
QVector<int> reverseMap = getReverseMap();
|
|
||||||
QByteArray glyphs;
|
|
||||||
QPdf::ByteStream s(&glyphs);
|
|
||||||
|
|
||||||
int nGlyphs = glyph_indices.size();
|
|
||||||
QByteArray id = QByteArray::number(object_id);
|
|
||||||
|
|
||||||
s << 'F' << id << "-Base [\n";
|
|
||||||
for (int i = downloaded_glyphs; i < nGlyphs; ++i) {
|
|
||||||
glyph_t g = glyph_indices.at(i);
|
|
||||||
QPainterPath path;
|
|
||||||
glyph_metrics_t metric;
|
|
||||||
fontEngine->getUnscaledGlyph(g, &path, &metric);
|
|
||||||
QByteArray charstring = charString(path, metric.xoff.toReal(), metric.x.toReal(),
|
|
||||||
properties.emSquare.toReal());
|
|
||||||
s << glyphName(i, reverseMap);
|
|
||||||
if (!standard_font)
|
|
||||||
s << "\n<" << charstring << ">\n";
|
|
||||||
}
|
|
||||||
s << (standard_font ? "] T1AddMapping\n" : "] T1AddGlyphs\n");
|
|
||||||
return glyphs;
|
|
||||||
}
|
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
#endif // QT_NO_PRINTER
|
|
||||||
|
@ -55,8 +55,6 @@
|
|||||||
|
|
||||||
#include "private/qfontengine_p.h"
|
#include "private/qfontengine_p.h"
|
||||||
|
|
||||||
#ifndef QT_NO_PRINTER
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
class QFontSubset
|
class QFontSubset
|
||||||
@ -71,8 +69,6 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
QByteArray toTruetype() const;
|
QByteArray toTruetype() const;
|
||||||
QByteArray toType1() const;
|
|
||||||
QByteArray type1AddedGlyphs() const;
|
|
||||||
QByteArray widthArray() const;
|
QByteArray widthArray() const;
|
||||||
QByteArray createToUnicodeMap() const;
|
QByteArray createToUnicodeMap() const;
|
||||||
QVector<int> getReverseMap() const;
|
QVector<int> getReverseMap() const;
|
||||||
@ -94,6 +90,4 @@ public:
|
|||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
#endif // QT_NO_PRINTER
|
|
||||||
|
|
||||||
#endif // QFONTSUBSET_P_H
|
#endif // QFONTSUBSET_P_H
|
||||||
|
Loading…
Reference in New Issue
Block a user