diff options
author | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2011-07-10 15:24:15 -0500 |
---|---|---|
committer | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2011-07-10 15:24:15 -0500 |
commit | bd0f3345a938b35ce6a12f6150373b0955b8dd12 (patch) | |
tree | 7a520322212d48ebcb9fbe1087e7fca28b76185c /tools/makeqpf | |
download | qt3-bd0f3345a938b35ce6a12f6150373b0955b8dd12.tar.gz qt3-bd0f3345a938b35ce6a12f6150373b0955b8dd12.zip |
Add Qt3 development HEAD version
Diffstat (limited to 'tools/makeqpf')
-rw-r--r-- | tools/makeqpf/main.cpp | 320 | ||||
-rwxr-xr-x | tools/makeqpf/makeall | 4 | ||||
-rw-r--r-- | tools/makeqpf/makeqpf.pro | 10 |
3 files changed, 334 insertions, 0 deletions
diff --git a/tools/makeqpf/main.cpp b/tools/makeqpf/main.cpp new file mode 100644 index 0000000..0dceee3 --- /dev/null +++ b/tools/makeqpf/main.cpp @@ -0,0 +1,320 @@ +/********************************************************************** +** Copyright (C) 1999-2008 Trolltech ASA. All rights reserved. +** +** This file is part of Qt/Embedded. +** +** This file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free +** Software Foundation and appearing in the files LICENSE.GPL2 +** and LICENSE.GPL3 included in the packaging of this file. +** Alternatively you may (at your option) use any later version +** of the GNU General Public License if such license has been +** publicly approved by Trolltech ASA (or its successors, if any) +** and the KDE Free Qt Foundation. +** +** Please review the following information to ensure GNU General +** Public Licensing requirements will be met: +** http://trolltech.com/products/qt/licenses/licensing/opensource/. +** If you are unsure which license is appropriate for your use, please +** review the following information: +** http://trolltech.com/products/qt/licenses/licensing/licensingoverview +** or contact the sales department at sales@trolltech.com. +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with +** the Software. +** +** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted +** herein. +** +**********************************************************************/ + +#include <qapplication.h> +#include <qtextstream.h> +#include <qscrollview.h> +#include <qfile.h> +#include <qfont.h> +#include <qvbox.h> +#include <qlabel.h> +#include <qstringlist.h> +#include <qlistview.h> +#include <qmainwindow.h> +#include <qmessagebox.h> +#include <qpainter.h> +#ifdef Q_WS_QWS +#include <qmemorymanager_qws.h> +#endif + +#include <cstdlib> + + +class FontViewItem : public QListViewItem { + QString family; + int pointSize; + int weight; + bool italic; + QFont font; + +public: + FontViewItem(const QString& f, int pt, int w, bool ital, QListView* parent) : + QListViewItem(parent), + family(f), pointSize(pt), weight(w), italic(ital) + { + } + + void renderAndSave() + { + font = QFont(family,pointSize,weight,italic); +#ifdef Q_WS_QWS + memorymanager->savePrerenderedFont((QMemoryManager::FontID)font.handle()); +#endif + setHeight(QFontMetrics(font).lineSpacing()); + repaint(); + } + + void render(int from, int to) + { + font = QFont(family,pointSize,weight,italic); +#ifdef Q_WS_QWS + for (int i=from; i<=to; i++) { + if ( memorymanager->inFont((QMemoryManager::FontID)font.handle(),QChar(i))) { + memorymanager->lockGlyph((QMemoryManager::FontID)font.handle(),QChar(i)); + memorymanager->unlockGlyph((QMemoryManager::FontID)font.handle(),QChar(i)); + } + } +#endif + } + + void save() + { + font = QFont(family,pointSize,weight,italic); +#ifdef Q_WS_QWS + memorymanager->savePrerenderedFont((QMemoryManager::FontID)font.handle(),FALSE); +#endif + setHeight(QFontMetrics(font).lineSpacing()); + repaint(); + } + + void paintCell( QPainter *p, const QColorGroup & cg, + int column, int width, int alignment ) + { + p->setFont(font); + QListViewItem::paintCell(p,cg,column,width,alignment); + } + + int width( const QFontMetrics&, + const QListView* lv, int column) const + { + QFontMetrics fm(font); + return QListViewItem::width(fm,lv,column); + } + + QString text(int col) const + { + switch (col) { + case 0: + return family; + case 1: + return QString::number(pointSize)+"pt"; + case 2: + if ( weight < QFont::Normal ) { + return "Light"; + } else if ( weight >= QFont::Black ) { + return "Black"; + } else if ( weight >= QFont::Bold ) { + return "Bold"; + } else if ( weight >= QFont::DemiBold ) { + return "DemiBold"; + } else { + return "Normal"; + } + case 3: + return italic ? "Italic" : "Roman"; + } + return QString::null; + } +}; + +class MakeQPF : public QMainWindow +{ + Q_OBJECT + QListView* view; +public: + MakeQPF() + { + view = new QListView(this); + view->addColumn("Family"); + view->addColumn("Size"); + view->addColumn("Weight"); + view->addColumn("Style"); + setCentralWidget(view); + QString fontdir = QString(getenv("QTDIR")) + "/lib/fonts"; + readFontDir(fontdir); + + connect(view,SIGNAL(selectionChanged(QListViewItem*)), + this,SLOT(renderAndSave(QListViewItem*))); + } + + void readFontDir(const QString& fntd) + { + QString fontdir = fntd + "/fontdir"; + QFile fd(fontdir); + if ( !fd.open(IO_ReadOnly) ) { + QMessageBox::warning(this, "Read Error", + "<p>Cannot read "+fontdir); + return; + } + while ( !fd.atEnd() ) { + QString line; + fd.readLine(line,9999); + if ( line[0] != '#' ) { + QStringList attr = QStringList::split(" ",line); + if ( attr.count() >= 7 ) { + QString family = attr[0]; + int weight = QString(attr[4]).toInt(); + bool italic = QString(attr[3]) == "y"; + QStringList sizes = attr[5]; + if ( sizes[0] == "0" ) { + if ( attr[7].isNull() ) + sizes = QStringList::split(',',attr[6]); + else + sizes = QStringList::split(',',attr[7]); + } + for (QStringList::Iterator it = sizes.begin(); it != sizes.end(); ++it) { + int pointSize = (*it).toInt()/10; + if ( pointSize ) + new FontViewItem( + family, pointSize, weight, italic, view); + } + } + } + } + } + + void renderAndSaveAll() + { + QListViewItem* c = view->firstChild(); + while ( c ) { + renderAndSave(c); + qApp->processEvents(); + c = c->nextSibling(); + } + } + + void renderAndSave(const QString& family) + { + QListViewItem* c = view->firstChild(); + while ( c ) { + if ( c->text(0).lower() == family.lower() ) + renderAndSave(c); + c = c->nextSibling(); + } + } + + void render(const QString& family, int from, int to) + { + QListViewItem* c = view->firstChild(); + while ( c ) { + if ( c->text(0).lower() == family.lower() ) + ((FontViewItem*)c)->render(from,to); + c = c->nextSibling(); + } + } + + void save(const QString& family) + { + QListViewItem* c = view->firstChild(); + while ( c ) { + if ( c->text(0).lower() == family.lower() ) + ((FontViewItem*)c)->save(); + c = c->nextSibling(); + } + } + +private slots: + void renderAndSave(QListViewItem* i) + { + ((FontViewItem*)i)->renderAndSave(); + } +}; + +static void usage() +{ + qWarning("Usage: makeqpf [-A] [-f spec-file] [font ...]"); + qWarning(""); + qWarning(" Saves QPF font files by rendering and saving fonts."); + qWarning(""); + qWarning(" -A = Render and save all fonts in fontdir"); + qWarning(" -f = File of lines:"); + qWarning(" fontname character-ranges"); + qWarning(" eg."); + qWarning(" smoothtimes 0-ff,20a0-20af"); + qWarning(" font = Font to render and save"); +} + +int main(int argc, char** argv) +{ + QApplication app(argc, argv, QApplication::GuiServer); + MakeQPF m; + if ( argc > 1 ) { + argv++; + QString specfile; + while ( *argv && argv[0][0] == '-' ) { + if (argv[0][1] == 'A' ) + m.renderAndSaveAll(); + else if (argv[0][1] == 'f' ) + specfile = *++argv; + else { + usage(); + specfile=QString::null; + *argv=0; + break; + } + argv++; + } + if ( !specfile.isNull() ) { + QFile f(specfile); + if ( f.open(IO_ReadOnly) ) { + QTextStream s(&f); + while (!s.atEnd()) { + QString family,ranges; + s >> family >> ranges; + QStringList r = QStringList::split(',',ranges); + for (QStringList::Iterator it=r.begin(); it!=r.end(); ++it) { + QString rng = *it; + int dash = rng.find('-'); + int from,to; + if ( dash==0 ) { + from=0; + to=rng.mid(1).toInt(0,16); + } else if ( dash==(int)rng.length()-1 ) { + from=rng.left(dash).toInt(0,16); + to=65535; + } else if ( dash<0 ) { + from=to=rng.toInt(0,16); + } else { + from=rng.left(dash).toInt(0,16); + to=rng.mid(dash+1).toInt(0,16); + } + m.render(family,from,to); + } + m.save(family); + } + } else { + qWarning("Cannot open %s",specfile.latin1()); + } + } else { + while (*argv) + m.renderAndSave(*argv++); + } + } else { + // Interactive + app.setMainWidget(&m); + m.show(); + return app.exec(); + } +} + +#include "main.moc" diff --git a/tools/makeqpf/makeall b/tools/makeqpf/makeall new file mode 100755 index 0000000..cd5008c --- /dev/null +++ b/tools/makeqpf/makeall @@ -0,0 +1,4 @@ +for dpy in LinuxFb Transformed:Rot90 Transformed:Rot180 Transformed:Rot270 +do + QWS_DISPLAY=$dpy ./makeqpf +done diff --git a/tools/makeqpf/makeqpf.pro b/tools/makeqpf/makeqpf.pro new file mode 100644 index 0000000..8a61af6 --- /dev/null +++ b/tools/makeqpf/makeqpf.pro @@ -0,0 +1,10 @@ +TEMPLATE = app +CONFIG += qt warn_on release +HEADERS = +SOURCES = main.cpp +INTERFACES = +TARGET = makeqpf +REQUIRES=full-config nocrosscompiler + +target.path = $$bins.path +INSTALLS += target |