| 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 |