X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/ae3bc8673d79edecb8fcb918d83db011535b0955..070618e10cea71d375789b9b95d236ac650660e7:/lib/gdi/font.h diff --git a/lib/gdi/font.h b/lib/gdi/font.h index 6cc238d7..7dd9f89a 100644 --- a/lib/gdi/font.h +++ b/lib/gdi/font.h @@ -8,7 +8,13 @@ #include FT_CACHE_H #include FT_CACHE_IMAGE_H #include FT_CACHE_SMALL_BITMAPS_H +#ifdef HAVE_FREETYPE2 +typedef FTC_ImageCache FTC_Image_Cache; +typedef FTC_ImageTypeRec FTC_Image_Desc; +typedef FTC_SBitCache FTC_SBit_Cache; +#endif #include +#include #include #include @@ -74,8 +80,10 @@ public: #define GS_ISSPACE 1 #define GS_ISFIRST 2 #define GS_USED 4 - #define GS_INVERT 8 +#define GS_SOFTHYPHEN 16 +#define GS_HYPHEN 32 +#define GS_CANBREAK (GS_ISSPACE|GS_SOFTHYPHEN|GS_HYPHEN) struct pGlyph { @@ -93,9 +101,8 @@ class eLCD; class eTextPara: public iObject { -DECLARE_REF(eTextPara); -private: - ePtr current_font, replacement_font; + DECLARE_REF(eTextPara); + ePtr current_font, replacement_font; FT_Face current_face, replacement_face; int use_kerning; int previous; @@ -107,6 +114,10 @@ private: eSize maximum; int left; glyphString glyphs; + std::list lineOffsets; + std::list lineChars; + int charCount; + bool doTopBottomReordering; int appendGlyph(Font *current_font, FT_Face current_face, FT_UInt glyphIndex, int flags, int rflags); void newLine(int flags); @@ -114,10 +125,12 @@ private: eRect boundBox; void calc_bbox(); int bboxValid; + void clear(); public: eTextPara(eRect area, ePoint start=ePoint(-1, -1)) - : current_font(0), replacement_font(0), current_face(0), replacement_face(0), - area(area), cursor(start), maximum(0, 0), left(start.x()), bboxValid(0) + :current_font(0), replacement_font(0), current_face(0), replacement_face(0) + ,area(area), cursor(start), maximum(0, 0), left(start.x()), charCount(0) + ,doTopBottomReordering(false), bboxValid(0) { } virtual ~eTextPara(); @@ -128,7 +141,7 @@ public: void setFont(const gFont *font); int renderString(const char *string, int flags=0); - void clear(); + void blit(gDC &dc, const ePoint &offset, const gRGB &background, const gRGB &foreground); @@ -154,30 +167,33 @@ public: const eRect& getGlyphBBox(int num) const { - assert(num >= 0); - assert(num < (int)glyphs.size()); + ASSERT(num >= 0); + ASSERT(num < (int)glyphs.size()); return glyphs[num].bbox; } void setGlyphFlag(int g, int f) { - assert(g >= 0); - assert(g < (int)glyphs.size()); + ASSERT(g >= 0); + ASSERT(g < (int)glyphs.size()); glyphs[g].flags |= f; } void clearGlyphFlag(int g, int f) { - assert(g >= 0); - assert(g < (int)glyphs.size()); + ASSERT(g >= 0); + ASSERT(g < (int)glyphs.size()); glyphs[g].flags |= f; } }; class Font: public iObject { -DECLARE_REF(Font); + DECLARE_REF(Font); public: +#ifdef HAVE_FREETYPE2 + FTC_ScalerRec scaler; +#endif FTC_Image_Desc font; fontRenderClass *renderer; FT_Error getGlyphBitmap(FT_ULong glyph_index, FTC_SBit *sbit);