blob: bc197d68727042a8a05806789006cd6f781a0bbf [file] [log] [blame]
/*
* Copyright 2011 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "SkFontHost.h"
#include "SkMMapStream.h"
#include "SkTypefaceCache.h"
#define FONT_PATH "/Library/Fonts/Skia.ttf"
class FTMacTypeface : public SkTypeface {
public:
FTMacTypeface(Style style, uint32_t id, SkStream* stream) : SkTypeface(style, id) {
// we take ownership of the stream
fStream = stream;
}
virtual ~FTMacTypeface() {
fStream->unref();
}
SkStream* fStream;
};
static FTMacTypeface* create_from_path(const char path[]) {
SkStream* stream = new SkMMAPStream(path);
size_t size = stream->getLength();
SkASSERT(size);
FTMacTypeface* tf = new FTMacTypeface(SkTypeface::kNormal,
SkTypefaceCache::NewFontID(),
stream);
SkTypefaceCache::Add(tf, SkTypeface::kNormal);
return tf;
}
static SkTypeface* ref_default_typeface() {
static SkTypeface* gDef;
if (NULL == gDef) {
gDef = create_from_path(FONT_PATH);
}
gDef->ref();
return gDef;
}
///////////////////////////////////////////////////////////////////////////////
SkTypeface* SkFontHost::CreateTypeface(const SkTypeface* familyFace,
const char familyName[],
SkTypeface::Style style) {
return ref_default_typeface();
}
SkTypeface* SkFontHost::CreateTypefaceFromStream(SkStream* stream) {
SkDEBUGFAIL("SkFontHost::CreateTypefaceFromStream unimplemented");
return NULL;
}
SkTypeface* SkFontHost::CreateTypefaceFromFile(const char path[]) {
return create_from_path(path);
}
SkStream* SkFontHost::OpenStream(uint32_t fontID) {
FTMacTypeface* tf = (FTMacTypeface*)SkTypefaceCache::FindByID(fontID);
if (tf) {
tf->fStream->ref();
return tf->fStream;
}
return NULL;
}
size_t SkFontHost::GetFileName(SkFontID fontID, char path[], size_t length,
int32_t* index) {
if (path) {
strncpy(path, "font", length);
}
if (index) {
*index = 0;
}
return 4;
}
void SkFontHost::Serialize(const SkTypeface*, SkWStream*) {
SkDEBUGFAIL("SkFontHost::Serialize unimplemented");
}
SkTypeface* SkFontHost::Deserialize(SkStream* stream) {
SkDEBUGFAIL("SkFontHost::Deserialize unimplemented");
return NULL;
}
SkFontID SkFontHost::NextLogicalFont(SkFontID currFontID, SkFontID origFontID) {
return 0;
}
#include "SkTypeface_mac.h"
SkTypeface* SkCreateTypefaceFromCTFont(CTFontRef fontRef) {
SkDEBUGFAIL("Not supported");
return NULL;
}