[PDF] Fix windows SkFontHost::OpenStream for TTC fonts.

Review URL: http://codereview.appspot.com/4515074

git-svn-id: http://skia.googlecode.com/svn/trunk@1319 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
vandebo@chromium.org 2011-05-13 03:41:29 +00:00
parent af8edcc477
commit d604481f7a

View File

@ -790,6 +790,7 @@ SkTypeface* SkFontHost::CreateTypefaceFromStream(SkStream* stream) {
}
SkStream* SkFontHost::OpenStream(SkFontID uniqueID) {
const DWORD kTTCTag = *(DWORD*) "ttcf";
LOGFONT lf;
GetLogFontByID(uniqueID, &lf);
@ -797,12 +798,21 @@ SkStream* SkFontHost::OpenStream(SkFontID uniqueID) {
HFONT font = CreateFontIndirect(&lf);
HFONT savefont = (HFONT)SelectObject(hdc, font);
size_t bufferSize = GetFontData(hdc, 0, 0, NULL, 0);
SkMemoryStream* stream = new SkMemoryStream(bufferSize);
if (!GetFontData(hdc, 0, 0, (void*)stream->getMemoryBase(), bufferSize)) {
SkMemoryStream* stream = NULL;
DWORD tables[2] = {kTTCTag, 0};
for (int i = 0; i < SK_ARRAY_COUNT(tables); i++) {
size_t bufferSize = GetFontData(hdc, tables[i], 0, NULL, 0);
if (bufferSize != GDI_ERROR) {
stream = new SkMemoryStream(bufferSize);
if (GetFontData(hdc, tables[i], 0, (void*)stream->getMemoryBase(),
bufferSize)) {
break;
} else {
delete stream;
stream = NULL;
}
}
}
SelectObject(hdc, savefont);
DeleteObject(font);