summaryrefslogtreecommitdiff
path: root/library/fontdatabase.cpp
Unidiff
Diffstat (limited to 'library/fontdatabase.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--library/fontdatabase.cpp39
1 files changed, 18 insertions, 21 deletions
diff --git a/library/fontdatabase.cpp b/library/fontdatabase.cpp
index 50dcf3d..c64e645 100644
--- a/library/fontdatabase.cpp
+++ b/library/fontdatabase.cpp
@@ -1,39 +1,41 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of the Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21#include "qpeapplication.h" 21#include "qpeapplication.h"
22#include "fontfactoryinterface.h" 22#include "fontfactoryinterface.h"
23#include "fontdatabase.h" 23#include "fontdatabase.h"
24 24
25#include <qpe/qlibrary.h> 25#include <qpe/qlibrary.h>
26 26
27#ifdef QWS
27#include <qfontmanager_qws.h> 28#include <qfontmanager_qws.h>
29#endif
28#include <qdir.h> 30#include <qdir.h>
29#include <qdict.h> 31#include <qdict.h>
30#include <stdio.h> 32#include <stdio.h>
31#include <stdlib.h> 33#include <stdlib.h>
32 34
33static QString fontDir() 35static QString fontDir()
34{ 36{
35 QString qtdir = getenv("QTDIR"); 37 QString qtdir = getenv("QTDIR");
36 if ( qtdir.isEmpty() ) qtdir = "/usr/local/qt-embedded"; 38 if ( qtdir.isEmpty() ) qtdir = "/usr/local/qt-embedded";
37 return qtdir+"/lib/fonts/"; 39 return qtdir+"/lib/fonts/";
38} 40}
39 41
@@ -49,54 +51,52 @@ static QString fontFamily( const QString& key )
49 //bool italic = key.mid(u2-1,1) == "i"; 51 //bool italic = key.mid(u2-1,1) == "i";
50 // #### ignores _t and _I fields 52 // #### ignores _t and _I fields
51 return family; 53 return family;
52} 54}
53#endif 55#endif
54 56
55QValueList<FontFactory> *FontDatabase::factoryList = 0; 57QValueList<FontFactory> *FontDatabase::factoryList = 0;
56 58
57/*! 59/*!
58 \class FontDatabase fontdatabase.h 60 \class FontDatabase fontdatabase.h
59 \brief The FontDatabase class provides information about available fonts. 61 \brief The FontDatabase class provides information about available fonts.
60 62
61 Provides information about available fonts. 63 Most often you will simply want to query the database for the
62 64 available font families().
63 FontDatabase provides information about the available fonts of the
64 underlying window system.
65 65
66 Most often you will simply want to query the database for all font 66 Use FontDatabase rather than QFontDatabase when you may need access
67 families(), and their respective pointSizes(), styles() and charSets(). 67 to fonts that are not normally available. For example, if the
68 freetype library and the Qtopia freetype plugin are installed,
69 TrueType fonts will be available to your application. Font renderer
70 plugins have greater resource requirements than system fonts so they
71 should be used only when necessary. You can force the loading of
72 font renderer plugins with loadRenderers().
68 73
69 Use FontDatabase rather than QFontDatabase when you may need access to 74 \ingroup qtopiaemb
70 fonts not normally available. For example, if the freetype library and
71 Qtopia freetype plugin are installed TrueType fonts will be available
72 to your application. Font renderer plugins have greater resource
73 requirements than the system fonts so they should be used only when
74 necessary.
75*/ 75*/
76 76
77/*! 77/*!
78 Constructs the FontDatabase class. 78 Constructs a FontDatabase object.
79*/ 79*/
80FontDatabase::FontDatabase() 80FontDatabase::FontDatabase()
81#ifndef QT_NO_FONTDATABASE 81#ifndef QT_NO_FONTDATABASE
82 : QFontDatabase() 82 : QFontDatabase()
83#endif 83#endif
84{ 84{
85 if ( !factoryList ) 85 if ( !factoryList )
86 loadRenderers(); 86 loadRenderers();
87} 87}
88 88
89/*! 89/*!
90 Returns a list of names of all available font families. 90 Returns a list of names of all the available font families.
91*/ 91*/
92QStringList FontDatabase::families() const 92QStringList FontDatabase::families() const
93{ 93{
94#ifndef QT_NO_FONTDATABASE 94#ifndef QT_NO_FONTDATABASE
95 return QFontDatabase::families(); 95 return QFontDatabase::families();
96#else 96#else
97 QStringList list; 97 QStringList list;
98 QDict<void> familyDict; 98 QDict<void> familyDict;
99 QDiskFont *qdf; 99 QDiskFont *qdf;
100 for ( qdf=qt_fontmanager->diskfonts.first(); qdf!=0; 100 for ( qdf=qt_fontmanager->diskfonts.first(); qdf!=0;
101 qdf=qt_fontmanager->diskfonts.next()) { 101 qdf=qt_fontmanager->diskfonts.next()) {
102 QString familyname = qdf->name; 102 QString familyname = qdf->name;
@@ -132,26 +132,26 @@ QValueList<int> FontDatabase::standardSizes()
132 if ( first ) { 132 if ( first ) {
133 first = FALSE; 133 first = FALSE;
134 int i = 0; 134 int i = 0;
135 while( s[i] ) 135 while( s[i] )
136 sList.append( s[i++] ); 136 sList.append( s[i++] );
137 } 137 }
138 return sList; 138 return sList;
139} 139}
140 140
141#endif 141#endif
142 142
143/*! 143/*!
144 Load any font renderer plugins that are available and make fonts that 144 Load any font renderer plugins that are available and make the fonts
145 the plugins can read available. 145 that the plugins can read available.
146*/ 146*/
147void FontDatabase::loadRenderers() 147void FontDatabase::loadRenderers()
148{ 148{
149#ifndef QT_NO_COMPONENT 149#ifndef QT_NO_COMPONENT
150 if ( !factoryList ) 150 if ( !factoryList )
151 factoryList = new QValueList<FontFactory>; 151 factoryList = new QValueList<FontFactory>;
152 152
153 QValueList<FontFactory>::Iterator mit; 153 QValueList<FontFactory>::Iterator mit;
154 for ( mit = factoryList->begin(); mit != factoryList->end(); ++mit ) { 154 for ( mit = factoryList->begin(); mit != factoryList->end(); ++mit ) {
155 qt_fontmanager->factories.setAutoDelete( false ); 155 qt_fontmanager->factories.setAutoDelete( false );
156 qt_fontmanager->factories.removeRef( (*mit).factory ); 156 qt_fontmanager->factories.removeRef( (*mit).factory );
157 qt_fontmanager->factories.setAutoDelete( true ); 157 qt_fontmanager->factories.setAutoDelete( true );
@@ -179,25 +179,24 @@ void FontDatabase::loadRenderers()
179 } else { 179 } else {
180 delete lib; 180 delete lib;
181 } 181 }
182 } 182 }
183#endif 183#endif
184} 184}
185 185
186/*! 186/*!
187 \internal 187 \internal
188*/ 188*/
189void FontDatabase::readFonts( QFontFactory *factory ) 189void FontDatabase::readFonts( QFontFactory *factory )
190{ 190{
191
192 // Load in font definition file 191 // Load in font definition file
193 QString fn = fontDir() + "fontdir"; 192 QString fn = fontDir() + "fontdir";
194 FILE* fontdef=fopen(fn.local8Bit(),"r"); 193 FILE* fontdef=fopen(fn.local8Bit(),"r");
195 if(!fontdef) { 194 if(!fontdef) {
196 QCString temp=fn.local8Bit(); 195 QCString temp=fn.local8Bit();
197 qWarning("Cannot find font definition file %s - is $QTDIR set correctly?", 196 qWarning("Cannot find font definition file %s - is $QTDIR set correctly?",
198 temp.data()); 197 temp.data());
199 return; 198 return;
200 } 199 }
201 char buf[200]=""; 200 char buf[200]="";
202 char name[200]=""; 201 char name[200]="";
203 char render[200]=""; 202 char render[200]="";
@@ -211,25 +210,23 @@ void FontDatabase::readFonts( QFontFactory *factory )
211 int size=0; 210 int size=0;
212 flags[0]=0; 211 flags[0]=0;
213 sscanf(buf,"%s %s %s %s %d %d %s",name,file,render,isitalic,&weight,&size,flags); 212 sscanf(buf,"%s %s %s %s %d %d %s",name,file,render,isitalic,&weight,&size,flags);
214 QString filename; 213 QString filename;
215 if ( file[0] != '/' ) 214 if ( file[0] != '/' )
216 filename = fontDir(); 215 filename = fontDir();
217 filename += file; 216 filename += file;
218 if ( QFile::exists(filename) ) { 217 if ( QFile::exists(filename) ) {
219 if( factory->name() == render ) { 218 if( factory->name() == render ) {
220 QDiskFont * qdf=new QDiskFont(factory,name,isitalic[0]=='y', 219 QDiskFont * qdf=new QDiskFont(factory,name,isitalic[0]=='y',
221 weight,size,flags,filename); 220 weight,size,flags,filename);
222 qt_fontmanager->diskfonts.append(qdf); 221 qt_fontmanager->diskfonts.append(qdf);
223#ifndef QT_NO_FONTDATABASE
224#if QT_VERSION >= 232 222#if QT_VERSION >= 232
225 QFontDatabase::qwsAddDiskFont( qdf ); 223 QFontDatabase::qwsAddDiskFont( qdf );
226#endif 224#endif
227#endif
228 } 225 }
229 } 226 }
230 } 227 }
231 fgets(buf,200,fontdef); 228 fgets(buf,200,fontdef);
232 } 229 }
233 fclose(fontdef); 230 fclose(fontdef);
234} 231}
235 232