00001 #ifndef _FREETYPE_FONT_H_ 00002 #define _FREETYPE_FONT_H_ 00003 00004 #include <nds.h> 00005 #include "fontbase.h" 00006 00007 #include "ft2build.h" 00008 #include FT_FREETYPE_H 00009 #include FT_CACHE_H 00010 #include FT_BITMAP_H 00011 00012 #include "freetypefacemanager.h" 00013 00014 namespace WoopsiUI { 00015 00016 class MutableBitmapBase; 00017 class FreeTypeCache; 00018 00022 class FreeTypeFont : public FontBase { 00023 public: 00024 00033 FreeTypeFont(const FreeTypeCache* fontCache, const FaceID* faceID, const u8 width, const u8 height, const u16 colour); 00034 00038 inline ~FreeTypeFont() {}; 00039 00044 void getSbit(const u32 codepoint) const; 00045 00051 inline u16 getCharWidth(const u32 codepoint) const { 00052 getSbit(codepoint); 00053 return (u16) _sbit->xadvance; 00054 }; 00055 00061 inline u16 getStringWidth(const WoopsiString& text) const; 00062 00072 inline u16 getStringWidth(const WoopsiString& text, s32 startIndex, s32 length) const; 00073 00080 virtual inline const bool isCharBlank(const u32 codepoint) const { 00081 getSbit(codepoint); 00082 if ((_sbit->buffer == 0) || (_sbit->width == 0) || (_sbit->height == 0)) return true; 00083 return false; 00084 }; 00085 00098 s16 drawChar(MutableBitmapBase* bitmap, u32 letter, s16 x, s16 y, u16 clipX1, u16 clipY1, u16 clipX2, u16 clipY2); 00099 00100 private: 00101 const FreeTypeCache* _fontCache; 00102 const FaceID* _faceID; 00103 u32 _charMapIndex; 00104 FTC_ScalerRec _scaler; 00105 FTC_SBit _sbit; 00106 }; 00107 } 00108 00109 #endif