[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) { SkStream* SkFontHost::OpenStream(SkFontID uniqueID) {
const DWORD kTTCTag = *(DWORD*) "ttcf";
LOGFONT lf; LOGFONT lf;
GetLogFontByID(uniqueID, &lf); GetLogFontByID(uniqueID, &lf);
@ -797,12 +798,21 @@ SkStream* SkFontHost::OpenStream(SkFontID uniqueID) {
HFONT font = CreateFontIndirect(&lf); HFONT font = CreateFontIndirect(&lf);
HFONT savefont = (HFONT)SelectObject(hdc, font); HFONT savefont = (HFONT)SelectObject(hdc, font);
size_t bufferSize = GetFontData(hdc, 0, 0, NULL, 0); SkMemoryStream* stream = NULL;
SkMemoryStream* stream = new SkMemoryStream(bufferSize); DWORD tables[2] = {kTTCTag, 0};
if (!GetFontData(hdc, 0, 0, (void*)stream->getMemoryBase(), bufferSize)) { 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; delete stream;
stream = NULL; stream = NULL;
} }
}
}
SelectObject(hdc, savefont); SelectObject(hdc, savefont);
DeleteObject(font); DeleteObject(font);