X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/d63d2c3c6cbbd574dda4f8b00ebe6c661735edd5..570fd1eb73ef6a1e402e50881fc2cfeccdc3992f:/lib/gdi/font.h diff --git a/lib/gdi/font.h b/lib/gdi/font.h index ac55c884..0f3bf714 100644 --- a/lib/gdi/font.h +++ b/lib/gdi/font.h @@ -1,35 +1,38 @@ #ifndef __FONT_H #define __FONT_H -#include -#include -#include -#include -#include -#include -#include +#ifndef SWIG + +#include +#include FT_FREETYPE_H +#include FT_CACHE_H +#include FT_CACHE_IMAGE_H +#include FT_CACHE_SMALL_BITMAPS_H #include #include #include #include #include -#include +#include +#include class FontRenderClass; class Font; -class gPixmapDC; +class gDC; class gFont; class gRGB; +#endif class fontRenderClass { +#ifndef SWIG friend class Font; friend class eTextPara; fbClass *fb; struct fontListEntry { - eString filename, face; + std::string filename, face; int scale; // 100 is 1:1 fontListEntry *next; ~fontListEntry(); @@ -40,20 +43,24 @@ class fontRenderClass FTC_Image_Cache imageCache; /* the glyph image cache */ FTC_SBit_Cache sbitsCache; /* the glyph small bitmaps cache */ - FTC_FaceID getFaceID(const eString &face); + FTC_FaceID getFaceID(const std::string &face); FT_Error getGlyphBitmap(FTC_Image_Desc *font, FT_ULong glyph_index, FTC_SBit *sbit); static fontRenderClass *instance; +#endif public: float getLineHeight(const gFont& font); - eString AddFont(const eString &filename, const eString &name, int scale); static fontRenderClass *getInstance(); - FT_Error FTC_Face_Requester(FTC_FaceID face_id, - FT_Face* aface); - Font *getFont(const eString &face, int size, int tabwidth=-1); +#ifndef SWIG + std::string AddFont(const std::string &filename, const std::string &name, int scale); + FT_Error FTC_Face_Requester(FTC_FaceID face_id, FT_Face* aface); + int getFont(ePtr &font, const std::string &face, int size, int tabwidth=-1); +#endif fontRenderClass(); ~fontRenderClass(); }; +#ifndef SWIG + #define RS_WRAP 1 #define RS_DOT 2 #define RS_DIRECT 4 @@ -63,10 +70,12 @@ public: #define GS_ISFIRST 2 #define GS_USED 4 +#define GS_INVERT 8 + struct pGlyph { int x, y, w; - Font *font; + ePtr font; FT_ULong glyph_index; int flags; eRect bbox; @@ -77,20 +86,21 @@ typedef std::vector glyphString; class Font; class eLCD; -class eTextPara +class eTextPara: public iObject { - Font *current_font, *replacement_font; +DECLARE_REF(eTextPara); +private: + ePtr current_font, replacement_font; FT_Face current_face, replacement_face; int use_kerning; int previous; - static eString replacement_facename; + static std::string replacement_facename; eRect area; ePoint cursor; eSize maximum; int left; glyphString glyphs; - int refcnt; int appendGlyph(Font *current_font, FT_Face current_face, FT_UInt glyphIndex, int flags, int rflags); void newLine(int flags); @@ -101,22 +111,19 @@ class eTextPara 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()), refcnt(0), bboxValid(0) + area(area), cursor(start), maximum(0, 0), left(start.x()), bboxValid(0) { } - ~eTextPara(); + virtual ~eTextPara(); - static void setReplacementFont(eString font) { replacement_facename=font; } - - void destroy(); - eTextPara *grab(); + static void setReplacementFont(std::string font) { replacement_facename=font; } - void setFont(const gFont &font); - int renderString(const eString &string, int flags=0); + void setFont(const gFont *font); + int renderString(const std::string &string, int flags=0); void clear(); - void blit(gPixmapDC &dc, const ePoint &offset, const gRGB &background, const gRGB &foreground); + void blit(gDC &dc, const ePoint &offset, const gRGB &background, const gRGB &foreground); enum { @@ -132,19 +139,40 @@ public: return boundBox; } + + const int size() const + { + return glyphs.size(); + } const eRect& getGlyphBBox(int num) const { + 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()); + glyphs[g].flags |= f; + } + + void clearGlyphFlag(int g, int f) + { + assert(g >= 0); + assert(g < (int)glyphs.size()); + glyphs[g].flags |= f; + } }; -class Font +class Font: public iObject { +DECLARE_REF(Font); public: FTC_Image_Desc font; fontRenderClass *renderer; - int ref; FT_Error getGlyphBitmap(FT_ULong glyph_index, FTC_SBit *sbit); FT_Face face; FT_Size size; @@ -152,12 +180,11 @@ public: int tabwidth; int height; Font(fontRenderClass *render, FTC_FaceID faceid, int isize, int tabwidth); - ~Font(); - - void lock(); - void unlock(); // deletes if ref==0 + virtual ~Font(); }; extern fontRenderClass *font; +#endif // !SWIG + #endif