summaryrefslogtreecommitdiffstats
path: root/kpovmodeler/pmtruetypecache.h
diff options
context:
space:
mode:
Diffstat (limited to 'kpovmodeler/pmtruetypecache.h')
-rw-r--r--kpovmodeler/pmtruetypecache.h194
1 files changed, 194 insertions, 0 deletions
diff --git a/kpovmodeler/pmtruetypecache.h b/kpovmodeler/pmtruetypecache.h
new file mode 100644
index 00000000..b305cb1c
--- /dev/null
+++ b/kpovmodeler/pmtruetypecache.h
@@ -0,0 +1,194 @@
+//-*-C++-*-
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2002 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+#ifndef PMTRUETYPECACHE_H
+#define PMTRUETYPECACHE_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "pmsplinesegment.h"
+
+#include <qcache.h>
+#include <kstaticdeleter.h>
+
+#ifdef HAVE_FREETYPE
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#include FT_GLYPH_H
+#include FT_OUTLINE_H
+#endif
+
+class PMTrueTypeFont;
+
+/**
+ * Cache for truetype fonts
+ */
+class PMTrueTypeCache
+{
+public:
+ /**
+ * Returns a pointer to the font with file name "file" or 0, if the
+ * font does not exist or is no truetype font
+ *
+ * Returns 0 if freetype is not available.
+ */
+ static PMTrueTypeFont* font( const QString& file );
+
+#ifdef HAVE_FREETYPE
+
+ /**
+ * Destructor
+ */
+ ~PMTrueTypeCache( );
+
+private:
+ static PMTrueTypeCache* s_pInstance;
+ static KStaticDeleter<PMTrueTypeCache> s_staticDeleter;
+
+ /**
+ * Lookup function
+ */
+ PMTrueTypeFont* lookUp( const QString& file );
+
+ QCache<PMTrueTypeFont> m_cache;
+ FT_Library m_library;
+
+#endif //HAVE_FREETYPE
+
+private:
+ /**
+ * Standard constructor
+ */
+ PMTrueTypeCache( );
+};
+
+/**
+ * Class that represents a truetype character outline
+ */
+class PMTrueTypeOutline
+{
+public:
+#ifdef HAVE_FREETYPE
+ /**
+ * Constructor that generates the outline for the glyph.
+ * The outline is scaled to match the font height.
+ */
+ PMTrueTypeOutline( FT_OutlineGlyph glyph, FT_Face face );
+#else
+ /**
+ * Standard constructor.
+ *
+ * Don't use this constructor. It is only added as dummy if freetype
+ * is not installed.
+ */
+ PMTrueTypeOutline( )
+ {
+ m_contours = 0;
+ m_segments = 0;
+ m_advance = 0;
+ }
+#endif
+ /**
+ * Returns the outline
+ */
+ const PMSegmentListList& outline( ) const { return m_outline; }
+ /**
+ * Returns the number of contours
+ */
+ int contours( ) const { return m_contours; }
+ /**
+ * Returns the sum of the number of segments for all contours
+ */
+ int segments( ) const { return m_segments; }
+ /**
+ * Returns the offset for the next character
+ */
+ double advance( ) const { return m_advance; }
+
+ PMSegmentListList m_outline;
+ int m_contours;
+ int m_segments;
+ double m_advance;
+};
+
+/**
+ * Class that represents a truetype font.
+ *
+ * This class caches the glyph outlines.
+ */
+class PMTrueTypeFont
+{
+public:
+ /**
+ * Returns the outline for the character
+ *
+ * Returns 0 if there is no glyph for the character or the font is
+ * not a valid, scalable true type font.
+ */
+ PMTrueTypeOutline* outline( QChar c );
+ /**
+ * Returns true if the font is a valid, scalable true type font
+ */
+ bool isValid( );
+ /**
+ * Returns the kerning offset for the two characters
+ */
+ double kerning( QChar c1, QChar c2 );
+
+#ifdef HAVE_FREETYPE
+
+public:
+ /**
+ * Creates a true type font
+ */
+ PMTrueTypeFont( FT_Library lib, FT_Face face );
+ /**
+ * Deletes the true type font
+ */
+ ~PMTrueTypeFont( );
+
+private:
+ FT_UInt findGlyphIndex( QChar c );
+
+ FT_Library m_library;
+ FT_Face m_face;
+
+ bool m_valid;
+ bool m_validChecked;
+ bool m_useKerning;
+
+ QCache<PMTrueTypeOutline> m_cache;
+
+#else //!HAVE_FREETYPE
+
+public:
+ /**
+ * Standard constructor.
+ *
+ * Don't use this constructor. It is only added as dummy if freetype
+ * is not installed.
+ */
+ PMTrueTypeFont( );
+
+#endif //HAVE_FREETYPE
+
+};
+
+#endif