[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-devel
Subject:    [PATCH] Qt PostScript font names
From:       James Richard Tyrer <tyrerj () acm ! org>
Date:       2003-08-16 9:37:20
[Download RAW message or body]

I attach my "proof of concept" patch for Qt-3.1.2 to fix the PostScript 
names in PS data files WITHOUT embedded fonts.

I have only tested this on US English and Type1 (PFB) & TrueType font files,

It appears to work on my desktop system which has FontConfig-2.2, 
FreeType-2.1.4 and XFree86-4.3.0 all built from source.  I would expect 
that there would be problems on systems that are not up to date.

--
JRT

["qt-x11-free-3.1.2-PSfontname.patch" (text/plain)]

diff -Naur qt-x11-free-3.1.2.old/src/kernel/qpsprinter.cpp \
                qt-x11-free-3.1.2/src/kernel/qpsprinter.cpp
--- qt-x11-free-3.1.2.old/src/kernel/qpsprinter.cpp	Tue Aug 12 05:32:57 2003
+++ qt-x11-free-3.1.2/src/kernel/qpsprinter.cpp	Sat Aug 16 09:31:31 2003
@@ -95,8 +95,10 @@
 extern bool qt_has_xft;
 #endif
 
-static bool qt_gen_epsf = FALSE;
+static bool embedFonts;
+static bool embedFonts_0;
 
+static bool qt_gen_epsf = FALSE;
 void qt_generate_epsf( bool b )
 {
     qt_gen_epsf = b;
@@ -1386,8 +1388,6 @@
     int scriptUsed;
     QFont currentSet;
     float scale;
-
-    bool embedFonts;
     QStringList fontpath;
 };
 
@@ -1411,6 +1411,7 @@
     virtual unsigned short glyph_for_unicode(unsigned short unicode) { return \
unicode; }  unsigned short insertIntoSubset( unsigned short unicode );
     virtual bool embedded() { return FALSE; }
+    bool NoEmbedFonts() { return ! embedFonts_0 ; }
 
     bool operator == ( const QPSPrinterFontPrivate &other ) {
 	return other.psname == psname;
@@ -1596,6 +1597,13 @@
     s << "\n] d\n";
 }
 
+static void emitPSFontNameList( QTextStream &s, const QString &psname )
+{
+    s << "/" << psname << "List [\n";
+    s << "[ /" << psname << " 1.0 0.0 ]";
+    s << "\n] d\n";
+}
+
 static float pointSize( const QFont &f, float scale )
 {
     float psize;
@@ -1903,7 +1911,7 @@
         s << psname;
         s << "-ENC-";
         s << toHex((uchar)(range + rangeOffset));
-        if ( embedded() ) {
+        if ( embedded() && (! NoEmbedFonts() )) {
             s << " /";
             s << psname;
             s << " MFEmb\n";
@@ -2309,6 +2317,12 @@
 
 void QPSPrinterFontTTF::download(QTextStream& s,bool global)
 {
+    if ( NoEmbedFonts() ) {
+        emitPSFontNameList( s, psname);
+        downloadMapping(s, global);
+	return;
+    }
+
     //qDebug("downloading ttf font %s", psname.latin1() );
     //qDebug("target type=%d", target_type);
     global_dict = global;
@@ -3861,6 +3875,12 @@
 
 void QPSPrinterFontPFA::download(QTextStream& s, bool global)
 {
+    if ( NoEmbedFonts() ) {
+        emitPSFontNameList( s, psname);
+        downloadMapping(s, global);
+	return;
+    }
+
     //qDebug("downloading pfa font %s", psname.latin1() );
   char* p = data.data();
 
@@ -3922,6 +3942,12 @@
 
 void QPSPrinterFontPFB::download(QTextStream& s, bool global)
 {
+    if ( NoEmbedFonts() ) {
+        emitPSFontNameList( s, psname);
+        downloadMapping(s, global);
+	return;
+    }
+
     //qDebug("downloading pfb font %s", psname.latin1() );
   unsigned char* p = (unsigned char*) data.data();
   int pos;
@@ -4672,7 +4698,7 @@
 
 #ifdef Q_WS_X11
     bool xlfd = FALSE;
-    if ( priv->embedFonts ) {
+    if ( embedFonts ) {
 	f.d->load( (QFont::Script)script );
 	QFontStruct *fs = f.d->x11data.fontstruct[script];
 	//qDebug("fs = %p, script=%d", fs, script);
@@ -4762,7 +4788,7 @@
 	return;
 
 #ifdef Q_WS_X11
-    if ( priv->embedFonts && xlfd ) {
+    if ( embedFonts && xlfd ) {
 
 	for (QStringList::Iterator it=priv->fontpath.begin(); it!=priv->fontpath.end() && \
                fontfilename.isEmpty(); ++it) {
 	    if ((*it).left(1) != "/") continue; // not a path name, a font server
@@ -4918,7 +4944,8 @@
     // append qsettings fontpath
     QSettings settings;
     embedFonts = settings.readBoolEntry( "/qt/embedFonts", TRUE );
-
+    embedFonts_0 = embedFonts;
+    embedFonts = TRUE;
     if ( embedFonts ) {
 	int npaths;
 	char** font_path;



>> Visit http://mail.kde.org/mailman/listinfo/kde-devel#unsub to unsubscribe <<


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic