00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef SkFontHost_DEFINED
00018 #define SkFontHost_DEFINED
00019
00020 #include "SkScalerContext.h"
00021 #include "SkTypeface.h"
00022
00023 class SkDescriptor;
00024 class SkStream;
00025 class SkWStream;
00026
00027 typedef uint32_t SkFontID;
00028 typedef uint32_t SkFontTableTag;
00029
00059 class SkFontHost {
00060 public:
00068 static SkTypeface* CreateTypeface(const SkTypeface* familyFace,
00069 const char famillyName[],
00070 SkTypeface::Style style);
00071
00083 static SkTypeface* CreateTypefaceFromStream(SkStream*);
00084
00089 static SkTypeface* CreateTypefaceFromFile(const char path[]);
00090
00092
00097 static bool ValidFontID(SkFontID uniqueID);
00098
00103 static SkStream* OpenStream(SkFontID uniqueID);
00104
00131 static size_t GetFileName(SkFontID fontID, char path[], size_t length,
00132 int32_t* index);
00133
00135
00139 static void Serialize(const SkTypeface*, SkWStream*);
00140
00144 static SkTypeface* Deserialize(SkStream*);
00145
00147
00150 static SkScalerContext* CreateScalerContext(const SkDescriptor* desc);
00151
00159 static uint32_t NextLogicalFont(SkFontID fontID);
00160
00162
00173 static void FilterRec(SkScalerContext::Rec* rec);
00174
00176
00179 static int CountTables(SkFontID);
00180
00185 static int GetTableTags(SkFontID, SkFontTableTag[]);
00186
00189 static size_t GetTableSize(SkFontID, SkFontTableTag);
00190
00211 static size_t GetTableData(SkFontID fontID, SkFontTableTag tag,
00212 size_t offset, size_t length, void* data);
00213
00215
00222 static size_t ShouldPurgeFontCache(size_t sizeAllocatedSoFar);
00223
00227 static int ComputeGammaFlag(const SkPaint& paint);
00228
00232 static void GetGammaTables(const uint8_t* tables[2]);
00233
00235
00243 enum LCDOrientation {
00244 kHorizontal_LCDOrientation = 0,
00245 kVertical_LCDOrientation = 1,
00246 };
00247
00248 static void SetSubpixelOrientation(LCDOrientation orientation);
00249 static LCDOrientation GetSubpixelOrientation();
00250
00258 enum LCDOrder {
00259 kRGB_LCDOrder = 0,
00260 kBGR_LCDOrder = 1,
00261 };
00262
00263 static void SetSubpixelOrder(LCDOrder order);
00264 static LCDOrder GetSubpixelOrder();
00265 };
00266
00267 #endif
00268