summaryrefslogtreecommitdiffstats
path: root/kdvi/fontpool.h
diff options
context:
space:
mode:
Diffstat (limited to 'kdvi/fontpool.h')
-rw-r--r--kdvi/fontpool.h215
1 files changed, 215 insertions, 0 deletions
diff --git a/kdvi/fontpool.h b/kdvi/fontpool.h
new file mode 100644
index 00000000..2e9d25da
--- /dev/null
+++ b/kdvi/fontpool.h
@@ -0,0 +1,215 @@
+// -*- C++ -*-
+// fontpool.h
+//
+// (C) 2001-2004 Stefan Kebekus
+// Distributed under the GPL
+
+#ifndef _FONTPOOL_H
+#define _FONTPOOL_H
+
+#include "fontEncodingPool.h"
+#include "fontMap.h"
+#include "fontprogress.h"
+#include "TeXFontDefinition.h"
+
+#include <qptrlist.h>
+#include <qobject.h>
+
+#ifdef HAVE_FREETYPE
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#endif
+
+class KProcess;
+class KShellProcess;
+
+
+/**
+ * A list of fonts and a compilation of utility functions
+ *
+ * This class holds a list of fonts and is able to perform a number of
+ * functions on each of the fonts. The main use of this class is that
+ * it is able to control a concurrently running "kpsewhich" programm
+ * which is used to locate and load the fonts.
+ *
+ * @author Stefan Kebekus <[email protected]>
+ *
+ **/
+
+class fontPool : public QObject {
+ Q_OBJECT
+
+public:
+ // Default constructor.
+ fontPool();
+
+ // Default destructor.
+ ~fontPool();
+
+ /** Method used to set the MetafontMode for the PK font files. This
+ data is used when loading fonts. Currently, a change here will be
+ applied only to those font which were not yet loaded ---expect
+ funny results when changing the data in the mid-work. */
+ void setParameters( bool useFontHints );
+
+ /** Sets the DVI file's path. This information is used to set the
+ current working directory for the kpsewhich command, so that
+ kpsewhich will find fonts that are stored in the DVI file's
+ directory. */
+ void setExtraSearchPath( const QString &path ) {extraSearchPath = path;}
+
+ /** Returns the path that is set as the current working directory
+ for the kpsewhich command, so that kpsewhich will find fonts
+ that are stored in the DVI file's directory. */
+ QString getExtraSearchPath( ) const {return extraSearchPath;}
+
+ /** Sets the resolution of the output device. */
+ void setDisplayResolution( double _displayResolution_in_dpi );
+
+ /** Sets the number of centimeters per DVI unit. */
+ void setCMperDVIunit( double CMperDVI );
+ double getCMperDVIunit() const {return CMperDVIunit;}
+
+ // If return value is true, font hinting should be used if possible
+ bool getUseFontHints() const {return useFontHints;}
+
+ // This method adds a font to the list. If the font is not currently
+ // loaded, it's file will be located and font::load_font will be
+ // called. Since this is done using a concurrently running process,
+ // there is no guarantee that the loading is already performed when
+ // the method returns.
+ TeXFontDefinition* appendx(const QString& fontname, Q_UINT32 checksum, Q_UINT32 scale, double enlargement);
+
+ // Returns a string in a very basic HTML format which describes the
+ // fonts in the pool.
+ QString status();
+
+ // This is the list which actually holds pointers to the fonts
+ QPtrList<TeXFontDefinition> fontList;
+
+ // This method marks all fonts in the fontpool as "not in use". The
+ // fonts are, however, not removed from memory until the method
+ // release_fonts is called. The method is called when the dvi-file
+ // is closed. Because the next dvi-file which will be loaded is
+ // likely to use most of the fonts again, this method implements a
+ // convenient way of re-using fonts without loading them repeatedly.
+ void mark_fonts_as_unused();
+
+ /** This methods removes all fonts from the fontpool (and thus from
+ memory) which are labeled "not in use". For explanation, see the
+ mark_fonts_as_unused method. */
+ void release_fonts();
+
+#ifdef HAVE_FREETYPE
+ /** A handle to the FreeType library, which is used by TeXFont_PFM
+ font objects, if KDVI is compiled with FreeType support. */
+ FT_Library FreeType_library;
+
+ /** Simple marker. Set to 'true', if the FreeType library was loaded
+ successfully */
+ bool FreeType_could_be_loaded;
+
+ /** This maps TeX font names to font file names, full font names and
+ encodings. See the file 'fontMap.h' for a detailed
+ description. */
+ fontMap fontsByTeXName;
+
+ /** This is a list of known font encodings which can be conveniently
+ acessed by name. */
+ fontEncodingPool encodingPool;
+#endif
+
+ /** This flag is set during the construction of the fontPool
+ object. It indicates if the QT library supports the alpha
+ channel of pixmaps. Experiments show that --depending of the
+ configuration of QT at compile and runtime or the availability
+ of the XFt extension, alpha channels are either supported, or
+ silently converted to 1-bit masks. The redering routines in the
+ TeXFont implementation use this flag to choose the apropriate
+ drawing routines for the different setups. */
+ bool QPixmapSupportsAlpha;
+
+signals:
+ /** Passed through to the top-level kpart. */
+ void setStatusBarText( const QString& );
+
+public slots:
+ // Locates font files on the disk using the kpsewhich program. If
+ // 'locateTFMonly' is true, the method does not look for PFB- or
+ // PK-fonts. Instead, only TFM-files are searched. This option can be
+ // used as a 'last resort': if a found cannot be found, one can at
+ // least use the TFM file to draw filled rectangles for the
+ // characters. If not null, the bool pointed at by virtualFontsFound
+ // is set to true if one of the fonts found is a virtual font. If no
+ // virtual font is found, the variable remains untouched.
+ void locateFonts();
+
+private:
+ // This method goes through the list of fonts, and marks each of them
+ // as 'located'. Used, e.g. after a fatal error in the font lookup
+ // process to ensure that the problematic kpsewhich is not used again
+ void markFontsAsLocated();
+
+ // Checks if all the fonts file names have been located, and returns
+ // true if that is so.
+ bool areFontsLocated();
+
+ // This flag is used by PFB fonts to determine if the FREETYPE engine
+ // should use hinted fonts or not
+ bool useFontHints;
+
+ // Resolution of the output device.
+ double displayResolution_in_dpi;
+
+ // Number of centimeters per DVI unit
+ double CMperDVIunit;
+
+
+ /** Members used for font location */
+
+ // Locates font files on the disk using the kpsewhich program. If
+ // 'locateTFMonly' is true, the method does not look for PFB- or
+ // PK-fonts. Instead, only TFM-files are searched. This option can be
+ // used as a 'last resort': if a found cannot be found, one can at
+ // least use the TFM file to draw filled rectangles for the
+ // characters. If not null, the bool pointed at by virtualFontsFound
+ // is set to true if one of the fonts found is a virtual font. If no
+ // virtual font is found, the variable remains untouched.
+ void locateFonts(bool makePK, bool locateTFMonly, bool *virtualFontsFound=0);
+
+ // This QString is used internally by the mf_output_receiver()
+ // method. This string is set to QString::null in locateFonts(bool,
+ // bool, bool *). Values are set and read by the
+ // mf_output_receiver(...) method
+ QString MetafontOutput;
+
+ // This QString is used to collect the output of kpsewhich and
+ // MetaFont. The string is set to QString::null in the
+ // locateFonts()-method, and content is gathered by the
+ // mf_output_receiver(). This string is used by locateFonts() and
+ // locateFonts(bool, bool, bool *) to display error messages.
+ QString kpsewhichOutput;
+
+ // This string is set to the DVI file's path. It is used to set the
+ // current working directory for the kpsewhich command, so that
+ // kpsewhich will find fonts that are stored in the DVI file's
+ // directory. Used by the locateFonts() and the locateFonts(bool,
+ // bool, bool *) method. Values are set by the
+ // setExtraSearchPath(...) method
+ QString extraSearchPath;
+
+ // FontProgress; the progress dialog used when generating fonts.
+ fontProgressDialog progress;
+
+private slots:
+ /** Members used for font location */
+
+ // For internal purposess only. This slot is called when MetaFont is
+ // run via the kpsewhich programm. The MetaFont output is
+ // transmitted to the fontpool via this slot. This method calles
+ // suitable methods in the fontProgres Dialog, and collects the
+ // output of MetaFontt int the "MetafontOutput" member
+ void mf_output_receiver(KProcess *, char *, int);
+};
+
+#endif //ifndef _FONTPOOL_H