| 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 #include "SkPDFDevice.h" | 8 #include "SkPDFDevice.h" |
| 9 | 9 |
| 10 #include "SkAnnotation.h" | 10 #include "SkAnnotation.h" |
| (...skipping 1126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1137 SkPDFString::FormatString(glyphIDs + consumedGlyphCount, | 1137 SkPDFString::FormatString(glyphIDs + consumedGlyphCount, |
| 1138 availableGlyphs, font->multiByteGlyphs()); | 1138 availableGlyphs, font->multiByteGlyphs()); |
| 1139 content.entry()->fContent.writeText(encodedString.c_str()); | 1139 content.entry()->fContent.writeText(encodedString.c_str()); |
| 1140 consumedGlyphCount += availableGlyphs; | 1140 consumedGlyphCount += availableGlyphs; |
| 1141 content.entry()->fContent.writeText(" Tj\n"); | 1141 content.entry()->fContent.writeText(" Tj\n"); |
| 1142 } | 1142 } |
| 1143 content.entry()->fContent.writeText("ET\n"); | 1143 content.entry()->fContent.writeText("ET\n"); |
| 1144 } | 1144 } |
| 1145 | 1145 |
| 1146 void SkPDFDevice::drawPosText(const SkDraw& d, const void* text, size_t len, | 1146 void SkPDFDevice::drawPosText(const SkDraw& d, const void* text, size_t len, |
| 1147 const SkScalar pos[], SkScalar constY, | 1147 const SkScalar pos[], int scalarsPerPos, |
| 1148 int scalarsPerPos, const SkPaint& paint) { | 1148 const SkPoint& offset, const SkPaint& paint) { |
| 1149 NOT_IMPLEMENTED(paint.getMaskFilter() != NULL, false); | 1149 NOT_IMPLEMENTED(paint.getMaskFilter() != NULL, false); |
| 1150 if (paint.getMaskFilter() != NULL) { | 1150 if (paint.getMaskFilter() != NULL) { |
| 1151 // Don't pretend we support drawing MaskFilters, it makes for artifacts | 1151 // Don't pretend we support drawing MaskFilters, it makes for artifacts |
| 1152 // making text unreadable (e.g. same text twice when using CSS shadows). | 1152 // making text unreadable (e.g. same text twice when using CSS shadows). |
| 1153 return; | 1153 return; |
| 1154 } | 1154 } |
| 1155 SkASSERT(1 == scalarsPerPos || 2 == scalarsPerPos); | 1155 SkASSERT(1 == scalarsPerPos || 2 == scalarsPerPos); |
| 1156 SkPaint textPaint = calculate_text_paint(paint); | 1156 SkPaint textPaint = calculate_text_paint(paint); |
| 1157 ScopedContentEntry content(this, d, textPaint, true); | 1157 ScopedContentEntry content(this, d, textPaint, true); |
| 1158 if (!content.entry()) { | 1158 if (!content.entry()) { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1170 updateFont(textPaint, glyphIDs[0], content.entry()); | 1170 updateFont(textPaint, glyphIDs[0], content.entry()); |
| 1171 for (size_t i = 0; i < numGlyphs; i++) { | 1171 for (size_t i = 0; i < numGlyphs; i++) { |
| 1172 SkPDFFont* font = content.entry()->fState.fFont; | 1172 SkPDFFont* font = content.entry()->fState.fFont; |
| 1173 uint16_t encodedValue = glyphIDs[i]; | 1173 uint16_t encodedValue = glyphIDs[i]; |
| 1174 if (font->glyphsToPDFFontEncoding(&encodedValue, 1) != 1) { | 1174 if (font->glyphsToPDFFontEncoding(&encodedValue, 1) != 1) { |
| 1175 updateFont(textPaint, glyphIDs[i], content.entry()); | 1175 updateFont(textPaint, glyphIDs[i], content.entry()); |
| 1176 i--; | 1176 i--; |
| 1177 continue; | 1177 continue; |
| 1178 } | 1178 } |
| 1179 fFontGlyphUsage->noteGlyphUsage(font, &encodedValue, 1); | 1179 fFontGlyphUsage->noteGlyphUsage(font, &encodedValue, 1); |
| 1180 SkScalar x = pos[i * scalarsPerPos]; | 1180 SkScalar x = offset.x() + pos[i * scalarsPerPos]; |
| 1181 SkScalar y = scalarsPerPos == 1 ? constY : pos[i * scalarsPerPos + 1]; | 1181 SkScalar y = offset.y() + (2 == scalarsPerPos ? pos[i * scalarsPerPos +
1] : 0); |
| 1182 |
| 1182 align_text(glyphCacheProc, textPaint, glyphIDs + i, 1, &x, &y); | 1183 align_text(glyphCacheProc, textPaint, glyphIDs + i, 1, &x, &y); |
| 1183 set_text_transform(x, y, textPaint.getTextSkewX(), | 1184 set_text_transform(x, y, textPaint.getTextSkewX(), |
| 1184 &content.entry()->fContent); | 1185 &content.entry()->fContent); |
| 1185 SkString encodedString = | 1186 SkString encodedString = |
| 1186 SkPDFString::FormatString(&encodedValue, 1, | 1187 SkPDFString::FormatString(&encodedValue, 1, |
| 1187 font->multiByteGlyphs()); | 1188 font->multiByteGlyphs()); |
| 1188 content.entry()->fContent.writeText(encodedString.c_str()); | 1189 content.entry()->fContent.writeText(encodedString.c_str()); |
| 1189 content.entry()->fContent.writeText(" Tj\n"); | 1190 content.entry()->fContent.writeText(" Tj\n"); |
| 1190 } | 1191 } |
| 1191 content.entry()->fContent.writeText("ET\n"); | 1192 content.entry()->fContent.writeText("ET\n"); |
| (...skipping 993 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2185 SkAutoTUnref<SkPDFObject> image( | 2186 SkAutoTUnref<SkPDFObject> image( |
| 2186 SkPDFCreateImageObject(*bitmap, subset, fEncoder)); | 2187 SkPDFCreateImageObject(*bitmap, subset, fEncoder)); |
| 2187 if (!image) { | 2188 if (!image) { |
| 2188 return; | 2189 return; |
| 2189 } | 2190 } |
| 2190 | 2191 |
| 2191 SkPDFUtils::DrawFormXObject(this->addXObjectResource(image.get()), | 2192 SkPDFUtils::DrawFormXObject(this->addXObjectResource(image.get()), |
| 2192 &content.entry()->fContent); | 2193 &content.entry()->fContent); |
| 2193 } | 2194 } |
| 2194 | 2195 |
| OLD | NEW |