Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Side by Side Diff: experimental/PdfViewer/SkPdfFont.h

Issue 26912005: mode code cleanup (100c / l, comments) (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « experimental/PdfViewer/SkPdfConfig.h ('k') | experimental/PdfViewer/SkPdfFont.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2013 Google Inc. 2 * Copyright 2013 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 SkPdfFont_DEFINED 8 #ifndef SkPdfFont_DEFINED
9 #define SkPdfFont_DEFINED 9 #define SkPdfFont_DEFINED
10 10
11 #include "SkPdfGraphicsState.h"
11 #include "SkPdfHeaders_autogen.h" 12 #include "SkPdfHeaders_autogen.h"
12 #include "SkPdfMapper_autogen.h" 13 #include "SkPdfMapper_autogen.h"
13 14 #include "SkPdfUtils.h"
14 #include "SkTypeface.h" 15 #include "SkTypeface.h"
16 #include "SkTDict.h"
15 #include "SkUtils.h" 17 #include "SkUtils.h"
16 #include "SkPdfGraphicsState.h"
17 #include "SkPdfUtils.h"
18 #include "SkTDict.h"
19 18
20 class SkPdfType0Font; 19 class SkPdfType0Font;
21 class SkPdfType1Font; 20 class SkPdfType1Font;
22 class SkPdfType3Font; 21 class SkPdfType3Font;
23 class SkPdfTrueTypeFont; 22 class SkPdfTrueTypeFont;
24 class SkPdfMultiMasterFont; 23 class SkPdfMultiMasterFont;
25 class SkPdfFont; 24 class SkPdfFont;
26 25
27 struct SkPdfStandardFontEntry { 26 struct SkPdfStandardFontEntry {
28 // We don't own this pointer! 27 // We don't own this pointer!
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 166
168 public: 167 public:
169 SkPdfFont() : fBaseFont(NULL), fEncoding(SkPdfDefaultEncoding::instance()), fToUnicode(NULL) {} 168 SkPdfFont() : fBaseFont(NULL), fEncoding(SkPdfDefaultEncoding::instance()), fToUnicode(NULL) {}
170 169
171 virtual ~SkPdfFont() { 170 virtual ~SkPdfFont() {
172 // TODO(edisonn): NYI (will leak for now) 171 // TODO(edisonn): NYI (will leak for now)
173 } 172 }
174 173
175 const SkPdfEncoding* encoding() const {return fEncoding;} 174 const SkPdfEncoding* encoding() const {return fEncoding;}
176 175
177 void drawText(const SkDecodedText& text, SkPaint* paint, SkPdfContext* pdfCo ntext, SkCanvas* canvas) { 176 void drawText(const SkDecodedText& text, SkPaint* paint, SkPdfContext* pdfCo ntext,
177 SkCanvas* canvas) {
178 for (int i = 0 ; i < text.size(); i++) { 178 for (int i = 0 ; i < text.size(); i++) {
179 canvas->setMatrix(pdfContext->fGraphicsState.fMatrixTm); 179 canvas->setMatrix(pdfContext->fGraphicsState.fMatrixTm);
180 #ifdef PDF_TRACE 180 #ifdef PDF_TRACE
181 SkPoint point = SkPoint::Make(SkDoubleToScalar(0), SkDoubleToScalar( 0)); 181 SkPoint point = SkPoint::Make(SkDoubleToScalar(0), SkDoubleToScalar( 0));
182 pdfContext->fGraphicsState.fMatrixTm.mapPoints(&point, 1); 182 pdfContext->fGraphicsState.fMatrixTm.mapPoints(&point, 1);
183 printf("DrawText at (%f, %f)\n", SkScalarToDouble(point.x()), SkScal arToDouble(point.y())); 183 printf("DrawText at (%f, %f)\n", SkScalarToDouble(point.x()),
184 SkScalarToDouble(point.y()));
184 #endif // PDF_TRACE 185 #endif // PDF_TRACE
185 186
186 #ifdef PDF_TRACE_DRAWTEXT 187 #ifdef PDF_TRACE_DRAWTEXT
187 SkPaint col; 188 SkPaint col;
188 col.setColor(SK_ColorMAGENTA); 189 col.setColor(SK_ColorMAGENTA);
189 SkRect rect = SkRect::MakeXYWH(SkDoubleToScalar(0.0), SkDoubleToScal ar(0.0), SkDoubleToScalar(10.0), SkDoubleToScalar(10.0)); 190 SkRect rect = SkRect::MakeXYWH(SkDoubleToScalar(0.0),
191 SkDoubleToScalar(0.0),
192 SkDoubleToScalar(10.0),
193 SkDoubleToScalar(10.0));
190 canvas->save(); 194 canvas->save();
191 canvas->setMatrix(pdfContext->fGraphicsState.fMatrixTm); 195 canvas->setMatrix(pdfContext->fGraphicsState.fMatrixTm);
192 canvas->drawRect(rect, col); 196 canvas->drawRect(rect, col);
193 canvas->restore(); 197 canvas->restore();
194 #endif 198 #endif
195 double width = drawOneChar(text[i], paint, pdfContext, canvas); 199 double width = drawOneChar(text[i], paint, pdfContext, canvas);
196 pdfContext->fGraphicsState.fMatrixTm.preTranslate(SkDoubleToScalar(w idth), SkDoubleToScalar(0.0)); 200 pdfContext->fGraphicsState.fMatrixTm.preTranslate(SkDoubleToScalar(w idth),
201 SkDoubleToScalar(0 .0));
197 } 202 }
198 } 203 }
199 204
200 void ToUnicode(const SkDecodedText& textIn, SkUnicodeText* textOut) const { 205 void ToUnicode(const SkDecodedText& textIn, SkUnicodeText* textOut) const {
201 if (fToUnicode) { 206 if (fToUnicode) {
202 textOut->text = new uint16_t[textIn.len]; 207 textOut->text = new uint16_t[textIn.len];
203 textOut->len = textIn.len; 208 textOut->len = textIn.len;
204 for (int i = 0; i < textIn.len; i++) { 209 for (int i = 0; i < textIn.len; i++) {
205 textOut->text[i] = fToUnicode->fCMapEncoding[textIn.text[i]]; 210 textOut->text[i] = fToUnicode->fCMapEncoding[textIn.text[i]];
206 } 211 }
207 } else { 212 } else {
208 textOut->text = textIn.text; 213 textOut->text = textIn.text;
209 textOut->len = textIn.len; 214 textOut->len = textIn.len;
210 } 215 }
211 }; 216 };
212 217
213 inline unsigned int ToUnicode(unsigned int ch) const { 218 inline unsigned int ToUnicode(unsigned int ch) const {
214 if (fToUnicode && fToUnicode->fCMapEncoding) { 219 if (fToUnicode && fToUnicode->fCMapEncoding) {
215 return fToUnicode->fCMapEncoding[ch]; 220 return fToUnicode->fCMapEncoding[ch];
216 } else { 221 } else {
217 return ch; 222 return ch;
218 } 223 }
219 }; 224 };
220 225
221 static SkPdfFont* fontFromPdfDictionary(SkPdfNativeDoc* doc, SkPdfFontDictio nary* dict); 226 static SkPdfFont* fontFromPdfDictionary(SkPdfNativeDoc* doc, SkPdfFontDictio nary* dict);
222 static SkPdfFont* Default() {return fontFromName(NULL, NULL, "TimesNewRoman" );} 227 static SkPdfFont* Default() {return fontFromName(NULL, NULL, "TimesNewRoman" );}
223 228
224 static SkPdfType0Font* fontFromType0FontDictionary(SkPdfNativeDoc* doc, SkPd fType0FontDictionary* dict); 229 static SkPdfType0Font* fontFromType0FontDictionary(SkPdfNativeDoc* doc,
225 static SkPdfType1Font* fontFromType1FontDictionary(SkPdfNativeDoc* doc, SkPd fType1FontDictionary* dict); 230 SkPdfType0FontDictionary* dict);
226 static SkPdfType3Font* fontFromType3FontDictionary(SkPdfNativeDoc* doc, SkPd fType3FontDictionary* dict); 231 static SkPdfType1Font* fontFromType1FontDictionary(SkPdfNativeDoc* doc,
227 static SkPdfTrueTypeFont* fontFromTrueTypeFontDictionary(SkPdfNativeDoc* doc , SkPdfTrueTypeFontDictionary* dict); 232 SkPdfType1FontDictionary* dict);
228 static SkPdfMultiMasterFont* fontFromMultiMasterFontDictionary(SkPdfNativeDo c* doc, SkPdfMultiMasterFontDictionary* dict); 233 static SkPdfType3Font* fontFromType3FontDictionary(SkPdfNativeDoc* doc,
234 SkPdfType3FontDictionary* dict);
235 static SkPdfTrueTypeFont* fontFromTrueTypeFontDictionary(SkPdfNativeDoc* doc ,
236 SkPdfTrueTypeFontDi ctionary* dict);
237 static SkPdfMultiMasterFont* fontFromMultiMasterFontDictionary(
238 SkPdfNativeDoc* doc, SkPdfMultiMasterFontDictionary* dict);
229 239
230 static SkPdfFont* fontFromFontDescriptor(SkPdfNativeDoc* doc, SkPdfFontDescr iptorDictionary* fd, bool loadFromName = true); 240 static SkPdfFont* fontFromFontDescriptor(SkPdfNativeDoc* doc,
241 SkPdfFontDescriptorDictionary* fd,
242 bool loadFromName = true);
231 243
232 public: 244 public:
233 virtual double drawOneChar(unsigned int ch, SkPaint* paint, SkPdfContext* pd fContext, SkCanvas* canvas) = 0; 245 virtual double drawOneChar(unsigned int ch, SkPaint* paint, SkPdfContext* pd fContext,
246 SkCanvas* canvas) = 0;
234 virtual void afterWord(SkPaint* paint, SkMatrix* matrix) = 0; 247 virtual void afterWord(SkPaint* paint, SkMatrix* matrix) = 0;
235 248
236 private: 249 private:
237 static SkPdfFont* fontFromPdfDictionaryOnce(SkPdfNativeDoc* doc, SkPdfFontDi ctionary* dict); 250 static SkPdfFont* fontFromPdfDictionaryOnce(SkPdfNativeDoc* doc, SkPdfFontDi ctionary* dict);
238 }; 251 };
239 252
240 class SkPdfStandardFont : public SkPdfFont { 253 class SkPdfStandardFont : public SkPdfFont {
241 SkTypeface* fTypeface; 254 SkTypeface* fTypeface;
242 255
243 public: 256 public:
244 SkPdfStandardFont(SkTypeface* typeface) : fTypeface(typeface) {} 257 SkPdfStandardFont(SkTypeface* typeface) : fTypeface(typeface) {}
245 258
246 public: 259 public:
247 virtual double drawOneChar(unsigned int ch, SkPaint* paint, SkPdfContext* pd fContext, SkCanvas* canvas) { 260 virtual double drawOneChar(unsigned int ch, SkPaint* paint, SkPdfContext* pd fContext,
261 SkCanvas* canvas) {
248 paint->setTypeface(fTypeface); 262 paint->setTypeface(fTypeface);
249 paint->setTextEncoding(SkPaint::kUTF8_TextEncoding); 263 paint->setTextEncoding(SkPaint::kUTF8_TextEncoding);
250 264
251 unsigned long ch4 = ch; 265 unsigned long ch4 = ch;
252 char utf8[10]; 266 char utf8[10];
253 int len = SkUTF8_FromUnichar(ch4, utf8); 267 int len = SkUTF8_FromUnichar(ch4, utf8);
254 268
255 canvas->drawText(utf8, len, SkDoubleToScalar(0), SkDoubleToScalar(0), *p aint); 269 canvas->drawText(utf8, len, SkDoubleToScalar(0), SkDoubleToScalar(0), *p aint);
256 270
257 SkScalar textWidth = paint->measureText(utf8, len); 271 SkScalar textWidth = paint->measureText(utf8, len);
258 return SkScalarToDouble(textWidth); 272 return SkScalarToDouble(textWidth);
259 } 273 }
260 274
261 virtual void afterWord(SkPaint* paint, SkMatrix* matrix) {} 275 virtual void afterWord(SkPaint* paint, SkMatrix* matrix) {}
262 }; 276 };
263 277
264 class SkPdfType0Font : public SkPdfFont { 278 class SkPdfType0Font : public SkPdfFont {
265 public: 279 public:
266 SkPdfType0Font(SkPdfNativeDoc* doc, SkPdfType0FontDictionary* dict); 280 SkPdfType0Font(SkPdfNativeDoc* doc, SkPdfType0FontDictionary* dict);
267 281
268 public: 282 public:
269 283
270 virtual double drawOneChar(unsigned int ch, SkPaint* paint, SkPdfContext* pd fContext, SkCanvas* canvas) { 284 virtual double drawOneChar(unsigned int ch, SkPaint* paint, SkPdfContext* pd fContext,
285 SkCanvas* canvas) {
271 return fBaseFont->drawOneChar(ToUnicode(ch), paint, pdfContext, canvas); 286 return fBaseFont->drawOneChar(ToUnicode(ch), paint, pdfContext, canvas);
272 } 287 }
273 288
274 virtual void afterWord(SkPaint* paint, SkMatrix* matrix) { 289 virtual void afterWord(SkPaint* paint, SkMatrix* matrix) {
275 } 290 }
276 }; 291 };
277 292
278 class SkPdfType1Font : public SkPdfFont { 293 class SkPdfType1Font : public SkPdfFont {
279 public: 294 public:
280 SkPdfType1Font(SkPdfNativeDoc* doc, SkPdfType1FontDictionary* dict) { 295 SkPdfType1Font(SkPdfNativeDoc* doc, SkPdfType1FontDictionary* dict) {
281 if (dict->has_FontDescriptor()) { 296 if (dict->has_FontDescriptor()) {
282 fBaseFont = SkPdfFont::fontFromFontDescriptor(doc, dict->FontDescrip tor(doc)); 297 fBaseFont = SkPdfFont::fontFromFontDescriptor(doc, dict->FontDescrip tor(doc));
283 } else { 298 } else {
284 fBaseFont = fontFromName(doc, dict, dict->BaseFont(doc).c_str()); 299 fBaseFont = fontFromName(doc, dict, dict->BaseFont(doc).c_str());
285 } 300 }
286 301
287 if (dict->isEncodingAName(doc)) { 302 if (dict->isEncodingAName(doc)) {
288 fEncoding = SkPdfEncoding::fromName(dict->getEncodingAsName(doc).c_s tr()); 303 fEncoding = SkPdfEncoding::fromName(dict->getEncodingAsName(doc).c_s tr());
289 } else if (dict->isEncodingADictionary(doc)) { 304 } else if (dict->isEncodingADictionary(doc)) {
290 //SkPdfDictionary* dictEnc = dict->getEncodingAsDictionary(doc); 305 //SkPdfDictionary* dictEnc = dict->getEncodingAsDictionary(doc);
291 } 306 }
292 dict->FontDescriptor(doc); 307 dict->FontDescriptor(doc);
293 } 308 }
294 309
295 public: 310 public:
296 virtual double drawOneChar(unsigned int ch, SkPaint* paint, SkPdfContext* pdfContext, SkCanvas* canvas) { 311 virtual double drawOneChar(unsigned int ch, SkPaint* paint, SkPdfContext* pdfContext,
312 SkCanvas* canvas) {
297 return fBaseFont->drawOneChar(ToUnicode(ch), paint, pdfContext, canvas ); 313 return fBaseFont->drawOneChar(ToUnicode(ch), paint, pdfContext, canvas );
298 } 314 }
299 315
300 virtual void afterWord(SkPaint* paint, SkMatrix* matrix) { 316 virtual void afterWord(SkPaint* paint, SkMatrix* matrix) {
301 317
302 } 318 }
303 }; 319 };
304 320
305 class SkPdfTrueTypeFont : public SkPdfType1Font { 321 class SkPdfTrueTypeFont : public SkPdfType1Font {
306 public: 322 public:
307 SkPdfTrueTypeFont(SkPdfNativeDoc* doc, SkPdfTrueTypeFontDictionary* dict) : SkPdfType1Font(doc, dict) { 323 SkPdfTrueTypeFont(SkPdfNativeDoc* doc, SkPdfTrueTypeFontDictionary* dict)
308 } 324 : SkPdfType1Font(doc, dict) {}
309 }; 325 };
310 326
311 class SkPdfMultiMasterFont : public SkPdfType1Font { 327 class SkPdfMultiMasterFont : public SkPdfType1Font {
312 public: 328 public:
313 SkPdfMultiMasterFont(SkPdfNativeDoc* doc, SkPdfMultiMasterFontDictionary* di ct) : SkPdfType1Font(doc, dict) { 329 SkPdfMultiMasterFont(SkPdfNativeDoc* doc, SkPdfMultiMasterFontDictionary* di ct)
314 } 330 : SkPdfType1Font(doc, dict) {}
315 }; 331 };
316 /* 332 /*
317 class CIDToGIDMap { 333 class CIDToGIDMap {
318 virtual unsigned int map(unsigned int cid) = 0; 334 virtual unsigned int map(unsigned int cid) = 0;
319 static CIDToGIDMap* fromName(const char* name); 335 static CIDToGIDMap* fromName(const char* name);
320 }; 336 };
321 337
322 class CIDToGIDMap_Identity { 338 class CIDToGIDMap_Identity {
323 virtual unsigned int map(unsigned int cid) { return cid; } 339 virtual unsigned int map(unsigned int cid) { return cid; }
324 340
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 // TODO(edisonn): report pdf corruption 430 // TODO(edisonn): report pdf corruption
415 } 431 }
416 j++; 432 j++;
417 } else { 433 } else {
418 // TODO(edisonn): report bad pdf 434 // TODO(edisonn): report bad pdf
419 } 435 }
420 } 436 }
421 } 437 }
422 438
423 public: 439 public:
424 virtual double drawOneChar(unsigned int ch, SkPaint* paint, SkPdfContext* pd fContext, SkCanvas* canvas) { 440 virtual double drawOneChar(unsigned int ch, SkPaint* paint, SkPdfContext* pd fContext,
441 SkCanvas* canvas) {
425 if (ch < fFirstChar || ch > fLastChar || !fChars[ch - fFirstChar].fObj) { 442 if (ch < fFirstChar || ch > fLastChar || !fChars[ch - fFirstChar].fObj) {
426 return fBaseFont->drawOneChar(ToUnicode(ch), paint, pdfContext, canv as); 443 return fBaseFont->drawOneChar(ToUnicode(ch), paint, pdfContext, canv as);
427 } 444 }
428 445
429 #ifdef PDF_TRACE 446 #ifdef PDF_TRACE
430 printf("Type 3 char to unicode: %c\n", ToUnicode(ch)); 447 printf("Type 3 char to unicode: %c\n", ToUnicode(ch));
431 if (ToUnicode(ch) == 'A') { 448 if (ToUnicode(ch) == 'A') {
432 printf("break;\n"); 449 printf("break;\n");
433 } 450 }
434 #endif 451 #endif
435 452
436 // TODO(edisonn): is it better to resolve the reference at load time, or now? 453 // TODO(edisonn): is it better to resolve the reference at load time, or now?
437 doType3Char(pdfContext, canvas, pdfContext->fPdfDoc->resolveReference(fC hars[ch - fFirstChar].fObj), fFontBBox, fFonMatrix, pdfContext->fGraphicsState.f CurFontSize); 454 doType3Char(pdfContext,
455 canvas,
456 pdfContext->fPdfDoc->resolveReference(fChars[ch - fFirstChar ].fObj),
457 fFontBBox,
458 fFonMatrix,
459 pdfContext->fGraphicsState.fCurFontSize);
438 460
439 // TODO(edisonn): verify/test translate code, not tested yet 461 // TODO(edisonn): verify/test translate code, not tested yet
440 pdfContext->fGraphicsState.fMatrixTm.preTranslate(SkDoubleToScalar(pdfCo ntext->fGraphicsState.fCurFontSize * fChars[ch - fFirstChar].fWidth), 462 pdfContext->fGraphicsState.fMatrixTm.preTranslate(
441 SkDoubleToScalar(0.0)); 463 SkDoubleToScalar(pdfContext->fGraphicsState.fCurFontSize *
464 fChars[ch - fFirstChar].fWidth),
465 SkDoubleToScalar(0.0));
442 return fChars[ch - fFirstChar].fWidth; 466 return fChars[ch - fFirstChar].fWidth;
443 } 467 }
444 468
445 virtual void afterWord(SkPaint* paint, SkMatrix* matrix) { 469 virtual void afterWord(SkPaint* paint, SkMatrix* matrix) {}
446
447 }
448 }; 470 };
449 471
450 #endif // SkPdfFont_DEFINED 472 #endif // SkPdfFont_DEFINED
OLDNEW
« no previous file with comments | « experimental/PdfViewer/SkPdfConfig.h ('k') | experimental/PdfViewer/SkPdfFont.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698