00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00025 #ifndef __vtkFreeTypeTools_h
00026 #define __vtkFreeTypeTools_h
00027
00028 #include "vtkObject.h"
00029
00030 class vtkImageData;
00031 class vtkTextProperty;
00032 class vtkStdString;
00033 class vtkUnicodeString;
00034
00035
00036 #include "vtk_freetype.h"
00037 #include FT_FREETYPE_H
00038 #include FT_GLYPH_H
00039 #include FT_CACHE_H
00040
00041 class FTFont;
00042
00043
00044
00045 class VTK_RENDERING_EXPORT vtkFreeTypeToolsCleanup
00046 {
00047 public:
00048 vtkFreeTypeToolsCleanup();
00049 ~vtkFreeTypeToolsCleanup();
00050 };
00051
00052
00053
00054 class VTK_RENDERING_EXPORT vtkFreeTypeTools : public vtkObject
00055 {
00056 public:
00057 vtkTypeMacro(vtkFreeTypeTools, vtkObject);
00058 void PrintSelf(ostream& os, vtkIndent indent);
00059
00061 static vtkFreeTypeTools* GetInstance();
00062
00065 static void SetInstance(vtkFreeTypeTools *instance);
00066
00068 FT_Library* GetLibrary();
00069
00071
00074 vtkSetClampMacro(MaximumNumberOfFaces,unsigned int,1,VTK_UNSIGNED_INT_MAX);
00075 vtkGetMacro(MaximumNumberOfFaces, unsigned int);
00076 vtkSetClampMacro(MaximumNumberOfSizes,unsigned int,1,VTK_UNSIGNED_INT_MAX);
00077 vtkGetMacro(MaximumNumberOfSizes, unsigned int);
00078 vtkSetClampMacro(MaximumNumberOfBytes,unsigned long,1,VTK_UNSIGNED_LONG_MAX);
00079 vtkGetMacro(MaximumNumberOfBytes, unsigned long);
00081
00083
00092 bool GetBoundingBox(vtkTextProperty *tprop, const vtkStdString& str,
00093 int bbox[4]);
00094 bool GetBoundingBox(vtkTextProperty *tprop, const vtkUnicodeString& str,
00095 int bbox[4]);
00096 bool IsBoundingBoxValid(int bbox[4]);
00098
00100
00102 bool RenderString(vtkTextProperty *tprop, const vtkStdString& str,
00103 vtkImageData *data);
00104 bool RenderString(vtkTextProperty *tprop, const vtkUnicodeString& str,
00105 vtkImageData *data);
00107
00109
00117 void MapTextPropertyToId(vtkTextProperty *tprop, unsigned long *tprop_cache_id);
00118 void MapIdToTextProperty(unsigned long tprop_cache_id, vtkTextProperty *tprop);
00120
00122
00126 vtkSetMacro(ScaleToPowerTwo, bool);
00127 vtkGetMacro(ScaleToPowerTwo, bool);
00128 vtkBooleanMacro(ScaleToPowerTwo, bool);
00130
00131 protected:
00133
00135 template <typename T>
00136 bool CalculateBoundingBox(vtkTextProperty *tprop, const T& str, int bbox[4]);
00138
00140
00142 template <typename T>
00143 void PrepareImageData(vtkImageData *data,
00144 vtkTextProperty *tprop,
00145 const T& str,
00146 int *x, int *y);
00148
00150
00151 template <typename T>
00152 bool PopulateImageData(vtkTextProperty *tprop, const T& str,
00153 int x, int y, vtkImageData *data);
00155
00160 bool GetSize(vtkTextProperty *tprop, FT_Size *size);
00161
00166 bool GetFace(vtkTextProperty *tprop, FT_Face *face);
00167
00170 bool GetGlyphIndex(vtkTextProperty *tprop, FT_UInt32 c, FT_UInt *gindex);
00171
00173
00183 enum
00184 {
00185 GLYPH_REQUEST_DEFAULT = 0,
00186 GLYPH_REQUEST_BITMAP = 1,
00187 GLYPH_REQUEST_OUTLINE = 2
00188 };
00189 bool GetGlyph(vtkTextProperty *tprop,
00190 FT_UInt32 c,
00191 FT_Glyph *glyph,
00192 int request = GLYPH_REQUEST_DEFAULT);
00193 bool GetSize(unsigned long tprop_cache_id, int font_size, FT_Size *size);
00194 bool GetFace(unsigned long tprop_cache_id, FT_Face *face);
00195 bool GetGlyphIndex(unsigned long tprop_cache_id, FT_UInt32 c,
00196 FT_UInt *gindex);
00197 bool GetGlyph(unsigned long tprop_cache_id,
00198 int font_size,
00199 FT_UInt gindex,
00200 FT_Glyph *glyph,
00201 int request = GLYPH_REQUEST_DEFAULT);
00203
00205 bool ScaleToPowerTwo;
00206
00207 vtkFreeTypeTools();
00208 virtual ~vtkFreeTypeTools();
00209
00210 private:
00211 vtkFreeTypeTools(const vtkFreeTypeTools&);
00212 void operator=(const vtkFreeTypeTools&);
00213
00215
00216 bool GetFace(vtkTextProperty *prop, unsigned long &prop_cache_id,
00217 FT_Face &face, bool &face_has_kerning);
00219
00221
00222 FT_Bitmap* GetBitmap(FT_UInt32 c, unsigned long prop_cache_id,
00223 int prop_font_size, FT_UInt &gindex,
00224 FT_BitmapGlyph &bitmap_glyph);
00226
00227
00228 static vtkFreeTypeTools* Instance;
00229 static vtkFreeTypeToolsCleanup Cleanup;
00230
00231
00232 FTC_Manager *CacheManager;
00233 FTC_ImageCache *ImageCache;
00234 FTC_CMapCache *CMapCache;
00235
00237
00238 FTC_Manager* GetCacheManager();
00239 FTC_ImageCache* GetImageCache();
00240 FTC_CMapCache* GetCMapCache();
00242
00243 unsigned int MaximumNumberOfFaces;
00244 unsigned int MaximumNumberOfSizes;
00245 unsigned long MaximumNumberOfBytes;
00246
00247 void InitializeCacheManager();
00248 void ReleaseCacheManager();
00249 };
00250
00251 #endif