summaryrefslogtreecommitdiffstats
path: root/tools/makeqpf/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/makeqpf/main.cpp')
-rw-r--r--tools/makeqpf/main.cpp320
1 files changed, 320 insertions, 0 deletions
diff --git a/tools/makeqpf/main.cpp b/tools/makeqpf/main.cpp
new file mode 100644
index 000000000..bd15bd4e3
--- /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 TQt/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 TQt Foundation.
+**
+** Please review the following information to ensure GNU General
+** Public Licensing retquirements 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 TQt Commercial licenses may use this file in
+** accordance with the TQt 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 TQListViewItem {
+ TQString family;
+ int pointSize;
+ int weight;
+ bool italic;
+ TQFont font;
+
+public:
+ FontViewItem(const TQString& f, int pt, int w, bool ital, TQListView* parent) :
+ TQListViewItem(parent),
+ family(f), pointSize(pt), weight(w), italic(ital)
+ {
+ }
+
+ void renderAndSave()
+ {
+ font = TQFont(family,pointSize,weight,italic);
+#ifdef Q_WS_QWS
+ memorymanager->savePrerenderedFont((TQMemoryManager::FontID)font.handle());
+#endif
+ setHeight(TQFontMetrics(font).lineSpacing());
+ repaint();
+ }
+
+ void render(int from, int to)
+ {
+ font = TQFont(family,pointSize,weight,italic);
+#ifdef Q_WS_QWS
+ for (int i=from; i<=to; i++) {
+ if ( memorymanager->inFont((TQMemoryManager::FontID)font.handle(),TQChar(i))) {
+ memorymanager->lockGlyph((TQMemoryManager::FontID)font.handle(),TQChar(i));
+ memorymanager->unlockGlyph((TQMemoryManager::FontID)font.handle(),TQChar(i));
+ }
+ }
+#endif
+ }
+
+ void save()
+ {
+ font = TQFont(family,pointSize,weight,italic);
+#ifdef Q_WS_QWS
+ memorymanager->savePrerenderedFont((TQMemoryManager::FontID)font.handle(),FALSE);
+#endif
+ setHeight(TQFontMetrics(font).lineSpacing());
+ repaint();
+ }
+
+ void paintCell( TQPainter *p, const TQColorGroup & cg,
+ int column, int width, int alignment )
+ {
+ p->setFont(font);
+ TQListViewItem::paintCell(p,cg,column,width,alignment);
+ }
+
+ int width( const TQFontMetrics&,
+ const TQListView* lv, int column) const
+ {
+ TQFontMetrics fm(font);
+ return TQListViewItem::width(fm,lv,column);
+ }
+
+ TQString text(int col) const
+ {
+ switch (col) {
+ case 0:
+ return family;
+ case 1:
+ return TQString::number(pointSize)+"pt";
+ case 2:
+ if ( weight < TQFont::Normal ) {
+ return "Light";
+ } else if ( weight >= TQFont::Black ) {
+ return "Black";
+ } else if ( weight >= TQFont::Bold ) {
+ return "Bold";
+ } else if ( weight >= TQFont::DemiBold ) {
+ return "DemiBold";
+ } else {
+ return "Normal";
+ }
+ case 3:
+ return italic ? "Italic" : "Roman";
+ }
+ return TQString::null;
+ }
+};
+
+class MakeTQPF : public TQMainWindow
+{
+ Q_OBJECT
+ TQListView* view;
+public:
+ MakeTQPF()
+ {
+ view = new TQListView(this);
+ view->addColumn("Family");
+ view->addColumn("Size");
+ view->addColumn("Weight");
+ view->addColumn("Style");
+ setCentralWidget(view);
+ TQString fontdir = TQString(getenv("QTDIR")) + "/lib/fonts";
+ readFontDir(fontdir);
+
+ connect(view,SIGNAL(selectionChanged(TQListViewItem*)),
+ this,SLOT(renderAndSave(TQListViewItem*)));
+ }
+
+ void readFontDir(const TQString& fntd)
+ {
+ TQString fontdir = fntd + "/fontdir";
+ TQFile fd(fontdir);
+ if ( !fd.open(IO_ReadOnly) ) {
+ TQMessageBox::warning(this, "Read Error",
+ "<p>Cannot read "+fontdir);
+ return;
+ }
+ while ( !fd.atEnd() ) {
+ TQString line;
+ fd.readLine(line,9999);
+ if ( line[0] != '#' ) {
+ TQStringList attr = TQStringList::split(" ",line);
+ if ( attr.count() >= 7 ) {
+ TQString family = attr[0];
+ int weight = TQString(attr[4]).toInt();
+ bool italic = TQString(attr[3]) == "y";
+ TQStringList sizes = attr[5];
+ if ( sizes[0] == "0" ) {
+ if ( attr[7].isNull() )
+ sizes = TQStringList::split(',',attr[6]);
+ else
+ sizes = TQStringList::split(',',attr[7]);
+ }
+ for (TQStringList::Iterator it = sizes.begin(); it != sizes.end(); ++it) {
+ int pointSize = (*it).toInt()/10;
+ if ( pointSize )
+ new FontViewItem(
+ family, pointSize, weight, italic, view);
+ }
+ }
+ }
+ }
+ }
+
+ void renderAndSaveAll()
+ {
+ TQListViewItem* c = view->firstChild();
+ while ( c ) {
+ renderAndSave(c);
+ qApp->processEvents();
+ c = c->nextSibling();
+ }
+ }
+
+ void renderAndSave(const TQString& family)
+ {
+ TQListViewItem* c = view->firstChild();
+ while ( c ) {
+ if ( c->text(0).lower() == family.lower() )
+ renderAndSave(c);
+ c = c->nextSibling();
+ }
+ }
+
+ void render(const TQString& family, int from, int to)
+ {
+ TQListViewItem* c = view->firstChild();
+ while ( c ) {
+ if ( c->text(0).lower() == family.lower() )
+ ((FontViewItem*)c)->render(from,to);
+ c = c->nextSibling();
+ }
+ }
+
+ void save(const TQString& family)
+ {
+ TQListViewItem* c = view->firstChild();
+ while ( c ) {
+ if ( c->text(0).lower() == family.lower() )
+ ((FontViewItem*)c)->save();
+ c = c->nextSibling();
+ }
+ }
+
+private slots:
+ void renderAndSave(TQListViewItem* i)
+ {
+ ((FontViewItem*)i)->renderAndSave();
+ }
+};
+
+static void usage()
+{
+ qWarning("Usage: makeqpf [-A] [-f spec-file] [font ...]");
+ qWarning("");
+ qWarning(" Saves TQPF 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)
+{
+ TQApplication app(argc, argv, TQApplication::GuiServer);
+ MakeTQPF m;
+ if ( argc > 1 ) {
+ argv++;
+ TQString specfile;
+ while ( *argv && argv[0][0] == '-' ) {
+ if (argv[0][1] == 'A' )
+ m.renderAndSaveAll();
+ else if (argv[0][1] == 'f' )
+ specfile = *++argv;
+ else {
+ usage();
+ specfile=TQString::null;
+ *argv=0;
+ break;
+ }
+ argv++;
+ }
+ if ( !specfile.isNull() ) {
+ TQFile f(specfile);
+ if ( f.open(IO_ReadOnly) ) {
+ TQTextStream s(&f);
+ while (!s.atEnd()) {
+ TQString family,ranges;
+ s >> family >> ranges;
+ TQStringList r = TQStringList::split(',',ranges);
+ for (TQStringList::Iterator it=r.begin(); it!=r.end(); ++it) {
+ TQString 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"