OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #ifndef UNICODE | 8 #ifndef UNICODE |
9 #define UNICODE | 9 #define UNICODE |
10 #endif | 10 #endif |
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
378 //overlap is certain, use memmove | 378 //overlap is certain, use memmove |
379 memmove(fontPackageBuffer.get() + extra, fontPackageBuffer.get(), bytesW
ritten); | 379 memmove(fontPackageBuffer.get() + extra, fontPackageBuffer.get(), bytesW
ritten); |
380 | 380 |
381 // Write the ttc header. | 381 // Write the ttc header. |
382 SkTTCFHeader* ttcfHeader = reinterpret_cast<SkTTCFHeader*>(fontPackageBu
ffer.get()); | 382 SkTTCFHeader* ttcfHeader = reinterpret_cast<SkTTCFHeader*>(fontPackageBu
ffer.get()); |
383 ttcfHeader->ttcTag = SkTTCFHeader::TAG; | 383 ttcfHeader->ttcTag = SkTTCFHeader::TAG; |
384 ttcfHeader->version = SkTTCFHeader::version_1; | 384 ttcfHeader->version = SkTTCFHeader::version_1; |
385 ttcfHeader->numOffsets = SkEndian_SwapBE32(ttcCount); | 385 ttcfHeader->numOffsets = SkEndian_SwapBE32(ttcCount); |
386 SK_OT_ULONG* offsetPtr = SkTAfter<SK_OT_ULONG>(ttcfHeader); | 386 SK_OT_ULONG* offsetPtr = SkTAfter<SK_OT_ULONG>(ttcfHeader); |
387 for (int i = 0; i < ttcCount; ++i, ++offsetPtr) { | 387 for (int i = 0; i < ttcCount; ++i, ++offsetPtr) { |
388 *offsetPtr = SkEndian_SwapBE32(extra); | 388 *offsetPtr = SkEndian_SwapBE32(SkToU32(extra)); |
389 } | 389 } |
390 | 390 |
391 // Fix up offsets in sfnt table entries. | 391 // Fix up offsets in sfnt table entries. |
392 SkSFNTHeader* sfntHeader = SkTAddOffset<SkSFNTHeader>(fontPackageBuffer.
get(), extra); | 392 SkSFNTHeader* sfntHeader = SkTAddOffset<SkSFNTHeader>(fontPackageBuffer.
get(), extra); |
393 int numTables = SkEndian_SwapBE16(sfntHeader->numTables); | 393 int numTables = SkEndian_SwapBE16(sfntHeader->numTables); |
394 SkSFNTHeader::TableDirectoryEntry* tableDirectory = | 394 SkSFNTHeader::TableDirectoryEntry* tableDirectory = |
395 SkTAfter<SkSFNTHeader::TableDirectoryEntry>(sfntHeader); | 395 SkTAfter<SkSFNTHeader::TableDirectoryEntry>(sfntHeader); |
396 for (int i = 0; i < numTables; ++i, ++tableDirectory) { | 396 for (int i = 0; i < numTables; ++i, ++tableDirectory) { |
397 tableDirectory->offset = SkEndian_SwapBE32( | 397 tableDirectory->offset = SkEndian_SwapBE32( |
398 SkEndian_SwapBE32(tableDirectory->offset) + extra); | 398 SkToU32(SkEndian_SwapBE32(SkToU32(tableDirectory->offset)) + ext
ra)); |
399 } | 399 } |
400 } else { | 400 } else { |
401 extra = 0; | 401 extra = 0; |
402 fontPackageBuffer.realloc(bytesWritten); | 402 fontPackageBuffer.realloc(bytesWritten); |
403 } | 403 } |
404 | 404 |
405 SkAutoTUnref<SkMemoryStream> newStream(new SkMemoryStream()); | 405 SkAutoTUnref<SkMemoryStream> newStream(new SkMemoryStream()); |
406 newStream->setMemoryOwned(fontPackageBuffer.detach(), bytesWritten + extra); | 406 newStream->setMemoryOwned(fontPackageBuffer.detach(), bytesWritten + extra); |
407 | 407 |
408 SkTScopedComPtr<IStream> newIStream; | 408 SkTScopedComPtr<IStream> newIStream; |
(...skipping 1658 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2067 xpsGlyph->verticalOffset = (SkFixedToFloat(y) * -procs->centemPerUnit) | 2067 xpsGlyph->verticalOffset = (SkFixedToFloat(y) * -procs->centemPerUnit) |
2068 - first.verticalOffset; | 2068 - first.verticalOffset; |
2069 } | 2069 } |
2070 } | 2070 } |
2071 | 2071 |
2072 static void text_draw_init(const SkPaint& paint, | 2072 static void text_draw_init(const SkPaint& paint, |
2073 const void* text, size_t byteLength, | 2073 const void* text, size_t byteLength, |
2074 SkBitSet& glyphsUsed, | 2074 SkBitSet& glyphsUsed, |
2075 SkDraw& myDraw, SkXPSDrawProcs& procs) { | 2075 SkDraw& myDraw, SkXPSDrawProcs& procs) { |
2076 procs.fD1GProc = xps_draw_1_glyph; | 2076 procs.fD1GProc = xps_draw_1_glyph; |
2077 size_t numGlyphGuess; | 2077 int numGlyphGuess; |
2078 switch (paint.getTextEncoding()) { | 2078 switch (paint.getTextEncoding()) { |
2079 case SkPaint::kUTF8_TextEncoding: | 2079 case SkPaint::kUTF8_TextEncoding: |
2080 numGlyphGuess = SkUTF8_CountUnichars( | 2080 numGlyphGuess = SkUTF8_CountUnichars( |
2081 static_cast<const char *>(text), | 2081 static_cast<const char *>(text), |
2082 byteLength); | 2082 byteLength); |
2083 break; | 2083 break; |
2084 case SkPaint::kUTF16_TextEncoding: | 2084 case SkPaint::kUTF16_TextEncoding: |
2085 numGlyphGuess = SkUTF16_CountUnichars( | 2085 numGlyphGuess = SkUTF16_CountUnichars( |
2086 static_cast<const uint16_t *>(text), | 2086 static_cast<const uint16_t *>(text), |
2087 byteLength); | 2087 SkToInt(byteLength)); |
2088 break; | 2088 break; |
2089 case SkPaint::kGlyphID_TextEncoding: | 2089 case SkPaint::kGlyphID_TextEncoding: |
2090 numGlyphGuess = byteLength / 2; | 2090 numGlyphGuess = SkToInt(byteLength / 2); |
2091 break; | 2091 break; |
2092 default: | 2092 default: |
2093 SK_ALWAYSBREAK(true); | 2093 SK_ALWAYSBREAK(true); |
2094 } | 2094 } |
2095 procs.xpsGlyphs.setReserve(numGlyphGuess); | 2095 procs.xpsGlyphs.setReserve(numGlyphGuess); |
2096 procs.glyphUse = &glyphsUsed; | 2096 procs.glyphUse = &glyphsUsed; |
2097 procs.centemPerUnit = 100.0f / SkScalarToFLOAT(paint.getTextSize()); | 2097 procs.centemPerUnit = 100.0f / SkScalarToFLOAT(paint.getTextSize()); |
2098 | 2098 |
2099 myDraw.fProcs = &procs; | 2099 myDraw.fProcs = &procs; |
2100 } | 2100 } |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2269 IID_PPV_ARGS(&this->fXpsFactory)), | 2269 IID_PPV_ARGS(&this->fXpsFactory)), |
2270 "Could not create factory for layer."); | 2270 "Could not create factory for layer."); |
2271 | 2271 |
2272 HRVM(this->fXpsFactory->CreateCanvas(&this->fCurrentXpsCanvas), | 2272 HRVM(this->fXpsFactory->CreateCanvas(&this->fCurrentXpsCanvas), |
2273 "Could not create canvas for layer."); | 2273 "Could not create canvas for layer."); |
2274 } | 2274 } |
2275 | 2275 |
2276 bool SkXPSDevice::allowImageFilter(const SkImageFilter*) { | 2276 bool SkXPSDevice::allowImageFilter(const SkImageFilter*) { |
2277 return false; | 2277 return false; |
2278 } | 2278 } |
OLD | NEW |