| Index: src/utils/ios/SkFontHost_iOS.mm
|
| diff --git a/src/utils/ios/SkFontHost_iOS.mm b/src/utils/ios/SkFontHost_iOS.mm
|
| deleted file mode 100755
|
| index ae75165a4e0f73b8e59d49f3286476bc041a4cf3..0000000000000000000000000000000000000000
|
| --- a/src/utils/ios/SkFontHost_iOS.mm
|
| +++ /dev/null
|
| @@ -1,262 +0,0 @@
|
| -#import <UIKit/UIKit.h>
|
| -
|
| -#include "SkStream_NSData.h"
|
| -#include "SkTypeface.h"
|
| -#include "SkFontHost.h"
|
| -#include "SkThread.h"
|
| -#include "SkTemplates.h"
|
| -
|
| -enum FontDesign {
|
| - kUnknown_Design,
|
| - kSans_FontDesign,
|
| - kSerif_FontDesign,
|
| -
|
| - kIllegal_FontDesign, // never use with a real font
|
| -};
|
| -
|
| -// returns kIllegal_FontDesign if not found
|
| -static FontDesign find_design_from_name(const char name[]) {
|
| - static const struct {
|
| - const char* fName;
|
| - FontDesign fDesign;
|
| - } gRec[] = {
|
| - { "sans-serif", kSans_FontDesign },
|
| - { "serif", kSerif_FontDesign },
|
| - };
|
| -
|
| - for (size_t i = 0; i < SK_ARRAY_COUNT(gRec); i++) {
|
| - if (!strcasecmp(name, gRec[i].fName)) {
|
| - return gRec[i].fDesign;
|
| - }
|
| - }
|
| - return kIllegal_FontDesign;
|
| -}
|
| -
|
| -struct FontRes {
|
| - const char* fName;
|
| - SkTypeface::Style fStyle;
|
| - FontDesign fDesign;
|
| -};
|
| -
|
| -static const FontRes gFontRes[] = {
|
| - { "DroidSans", SkTypeface::kNormal, kSans_FontDesign },
|
| - { "DroidSans", SkTypeface::kBold, kSans_FontDesign },
|
| - { "DroidSerif-Regular", SkTypeface::kNormal, kSerif_FontDesign },
|
| - { "DroidSerif-Bold", SkTypeface::kBold, kSerif_FontDesign },
|
| -// { "PescaderoPro", SkTypeface::kNormal, kSerif_FontDesign },
|
| -// { "PescaderoPro-Bold", SkTypeface::kBold, kSerif_FontDesign },
|
| -};
|
| -#define FONTRES_COUNT SK_ARRAY_COUNT(gFontRes)
|
| -
|
| -#define DEFAULT_INDEX_REGULAR 1
|
| -#define DEFAULT_INDEX_BOLD 2
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -
|
| -class SkTypeface_Stream : public SkTypeface {
|
| -public:
|
| - SkTypeface_Stream(SkStream* stream, Style style);
|
| - virtual ~SkTypeface_Stream();
|
| -
|
| - SkStream* refStream() {
|
| - fStream->ref();
|
| - return fStream;
|
| - }
|
| -
|
| -private:
|
| - SkStream* fStream;
|
| -};
|
| -
|
| -static int32_t gUniqueFontID;
|
| -
|
| -SkTypeface_Stream::SkTypeface_Stream(SkStream* stream, Style style)
|
| -: SkTypeface(style, sk_atomic_inc(&gUniqueFontID) + 1) {
|
| - fStream = stream;
|
| - fStream->ref();
|
| -}
|
| -
|
| -SkTypeface_Stream::~SkTypeface_Stream() {
|
| - fStream->unref();
|
| -}
|
| -
|
| -static SkTypeface_Stream* create_from_fontres(const FontRes& res) {
|
| - SkStream* stream = SkStream_NSData::CreateFromResource(res.fName, "ttf");
|
| - SkAutoUnref aur(stream);
|
| -
|
| - return SkNEW_ARGS(SkTypeface_Stream, (stream, res.fStyle));
|
| -}
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -
|
| -static int compute_style_distance(SkTypeface::Style a, SkTypeface::Style b) {
|
| - int dist = 0;
|
| - int diff = a ^ b;
|
| - if (diff & SkTypeface::kBold) {
|
| - dist += 2;
|
| - }
|
| - if (diff & SkTypeface::kItalic) {
|
| - dist += 1;
|
| - }
|
| - return dist;
|
| -}
|
| -
|
| -static SkTypeface_Stream* gFonts[FONTRES_COUNT];
|
| -
|
| -static void assure_init_fonts() {
|
| - static bool gOnce;
|
| - if (!gOnce) {
|
| - for (size_t i = 0; i < FONTRES_COUNT; i++) {
|
| - gFonts[i] = create_from_fontres(gFontRes[i]);
|
| - gOnce = true;
|
| - }
|
| - }
|
| -}
|
| -
|
| -static SkTypeface_Stream* get_default_font(SkTypeface::Style style) {
|
| - assure_init_fonts();
|
| -
|
| - if (style & SkTypeface::kBold) {
|
| - return gFonts[DEFAULT_INDEX_BOLD];
|
| - } else {
|
| - return gFonts[DEFAULT_INDEX_REGULAR];
|
| - }
|
| -}
|
| -
|
| -static SkTypeface_Stream* find_by_id(SkFontID fontID) {
|
| - assure_init_fonts();
|
| -
|
| - for (size_t i = 0; i < FONTRES_COUNT; i++) {
|
| - if (gFonts[i]->uniqueID() == fontID) {
|
| - return gFonts[i];
|
| - }
|
| - }
|
| - return NULL;
|
| -}
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -
|
| -template <typename T> T* ref_and_return(T* obj) {
|
| - obj->ref();
|
| - return obj;
|
| -}
|
| -
|
| -SkTypeface* SkFontHost::CreateTypeface(const SkTypeface* familyFace,
|
| - const char familyName[],
|
| - const void* data, size_t bytelength,
|
| - SkTypeface::Style style) {
|
| - assure_init_fonts();
|
| -
|
| - if (familyName) {
|
| - FontDesign design = find_design_from_name(familyName);
|
| - if (kIllegal_FontDesign != design) {
|
| - familyName = "$#@*&%*#$@ never match any name";
|
| - }
|
| -
|
| - int bestDistance = 999;
|
| - int bestIndex = -1;
|
| - for (size_t i = 0; i < FONTRES_COUNT; i++) {
|
| - if (design == gFontRes[i].fDesign || !strcmp(gFontRes[i].fName, familyName)) {
|
| - int dist = compute_style_distance(style, gFontRes[i].fStyle);
|
| - if (dist < bestDistance) {
|
| - bestDistance = dist;
|
| - bestIndex = i;
|
| - }
|
| - }
|
| - }
|
| - if (bestIndex >= 0) {
|
| - return ref_and_return(gFonts[bestIndex]);
|
| - }
|
| - }
|
| -
|
| - return ref_and_return(get_default_font(style));
|
| -}
|
| -
|
| -SkTypeface* SkFontHost::CreateTypefaceFromStream(SkStream* stream) {
|
| - SkDEBUGFAIL("SkFontHost::CreateTypeface unimplemented");
|
| - return NULL;
|
| -}
|
| -
|
| -SkTypeface* SkFontHost::CreateTypefaceFromFile(char const*) {
|
| -// SkDEBUGFAIL("SkFontHost::CreateTypefaceFromFile unimplemented");
|
| - return NULL;
|
| -}
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -
|
| -SkStream* SkFontHost::OpenStream(uint32_t uniqueID) {
|
| - SkTypeface_Stream* tf = find_by_id(uniqueID);
|
| - SkASSERT(tf);
|
| - return tf->refStream();
|
| -}
|
| -
|
| -size_t SkFontHost::GetFileName(SkFontID fontID, char path[], size_t length,
|
| - int32_t* index) {
|
| - SkDebugf("SkFontHost::GetFileName unimplemented\n");
|
| - return 0;
|
| -}
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -
|
| -void SkFontHost::Serialize(const SkTypeface* face, SkWStream* stream) {
|
| - SkDEBUGFAIL("SkFontHost::Serialize unimplemented");
|
| -}
|
| -
|
| -SkTypeface* SkFontHost::Deserialize(SkStream* stream) {
|
| - int style = stream->readU8();
|
| - int len = stream->readPackedUInt();
|
| - const char* name = NULL;
|
| - if (len > 0) {
|
| - SkString str;
|
| - str.resize(len);
|
| - stream->read(str.writable_str(), len);
|
| -
|
| - if (str.startsWith("DroidSans")) {
|
| - name = "sans-serif";
|
| - } else if (str.startsWith("DroidSerif")) {
|
| - name = "serif";
|
| - }
|
| - SkDebugf("---- deserialize typeface <%s> %d %s\n", str.c_str(), style, name);
|
| - }
|
| -// name = NULL; style = 0;
|
| - return SkFontHost::CreateTypeface(NULL, name, NULL, NULL,
|
| - (SkTypeface::Style)style);
|
| -}
|
| -
|
| -SkFontID SkFontHost::NextLogicalFont(SkFontID currFontID, SkFontID origFontID) {
|
| - return 0;
|
| -}
|
| -
|
| -#define FONT_CACHE_MEMORY_BUDGET 1 * 1024 * 1024
|
| -
|
| -size_t SkFontHost::ShouldPurgeFontCache(size_t sizeAllocatedSoFar) {
|
| - if (sizeAllocatedSoFar > FONT_CACHE_MEMORY_BUDGET)
|
| - return sizeAllocatedSoFar - FONT_CACHE_MEMORY_BUDGET;
|
| - else
|
| - return 0; // nothing to do
|
| -}
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -int SkFontHost::ComputeGammaFlag(const SkPaint& paint) {
|
| - return 0;
|
| -}
|
| -
|
| -void SkFontHost::GetGammaTables(const uint8_t* tables[2]) {
|
| - tables[0] = NULL; // black gamma (e.g. exp=1.4)
|
| - tables[1] = NULL; // white gamma (e.g. exp= 1/1.4)
|
| -}
|
| -
|
| -// static
|
| -SkAdvancedTypefaceMetrics* SkFontHost::GetAdvancedTypefaceMetrics(
|
| - uint32_t fontID,
|
| - SkAdvancedTypefaceMetrics::PerGlyphInfo perGlyphInfo) {
|
| - SkDEBUGFAIL("SkFontHost::GetAdvancedTypefaceMetrics unimplemented");
|
| - return NULL;
|
| -}
|
| -
|
| -void SkFontHost::FilterRec(SkScalerContext::Rec* rec, SkTypeface*) {
|
| -}
|
| -
|
| -SkScalerContext* SkFontHost::CreateScalerContext(const SkDescriptor* desc) {
|
| - SkDEBUGFAIL("SkFontHost::CreateScalarContext unimplemented");
|
| - return NULL;
|
| -}
|
|
|