Index: experimental/PdfViewer/SkPdfFont.h |
=================================================================== |
--- experimental/PdfViewer/SkPdfFont.h (revision 10712) |
+++ experimental/PdfViewer/SkPdfFont.h (working copy) |
@@ -9,7 +9,7 @@ |
#include "SkTypeface.h" |
#include "SkUtils.h" |
-#include "SkPdfBasics.h" |
+#include "SkPdfGraphicsState.h" |
#include "SkPdfUtils.h" |
@@ -38,7 +38,7 @@ |
std::map<std::string, SkPdfStandardFontEntry>& getStandardFonts(); |
SkTypeface* SkTypefaceFromPdfStandardFont(const char* fontName, bool bold, bool italic); |
-SkPdfFont* fontFromName(SkNativeParsedPDF* doc, SkPdfObject* obj, const char* fontName); |
+SkPdfFont* fontFromName(SkPdfNativeDoc* doc, SkPdfNativeObject* obj, const char* fontName); |
struct SkUnencodedText { |
void* text; |
@@ -77,13 +77,13 @@ |
std::map<std::string, SkPdfEncoding*>& getStandardEncodings(); |
class SkPdfToUnicode { |
- SkNativeParsedPDF* fParsed; |
+ SkPdfNativeDoc* fParsed; |
// TODO(edisonn): hide public members |
public: |
unsigned short* fCMapEncoding; |
unsigned char* fCMapEncodingFlag; |
- SkPdfToUnicode(SkNativeParsedPDF* parsed, SkPdfStream* stream); |
+ SkPdfToUnicode(SkPdfNativeDoc* parsed, SkPdfStream* stream); |
}; |
@@ -170,7 +170,7 @@ |
const SkPdfEncoding* encoding() const {return fEncoding;} |
- void drawText(const SkDecodedText& text, SkPaint* paint, PdfContext* pdfContext, SkCanvas* canvas) { |
+ void drawText(const SkDecodedText& text, SkPaint* paint, SkPdfContext* pdfContext, SkCanvas* canvas) { |
for (int i = 0 ; i < text.size(); i++) { |
canvas->setMatrix(pdfContext->fGraphicsState.fMatrixTm); |
#ifdef PDF_TRACE |
@@ -178,6 +178,16 @@ |
pdfContext->fGraphicsState.fMatrixTm.mapPoints(&point, 1); |
printf("DrawText at (%f, %f)\n", SkScalarToDouble(point.x()), SkScalarToDouble(point.y())); |
#endif // PDF_TRACE |
+ |
+#ifdef PDF_TRACE_DRAWTEXT |
+ SkPaint col; |
+ col.setColor(SK_ColorMAGENTA); |
+ SkRect rect = SkRect::MakeXYWH(SkDoubleToScalar(0.0), SkDoubleToScalar(0.0), SkDoubleToScalar(10.0), SkDoubleToScalar(10.0)); |
+ canvas->save(); |
+ canvas->setMatrix(pdfContext->fGraphicsState.fMatrixTm); |
+ canvas->drawRect(rect, col); |
+ canvas->restore(); |
+#endif |
double width = drawOneChar(text[i], paint, pdfContext, canvas); |
pdfContext->fGraphicsState.fMatrixTm.preTranslate(SkDoubleToScalar(width), SkDoubleToScalar(0.0)); |
} |
@@ -204,23 +214,23 @@ |
} |
}; |
- static SkPdfFont* fontFromPdfDictionary(SkNativeParsedPDF* doc, SkPdfFontDictionary* dict); |
+ static SkPdfFont* fontFromPdfDictionary(SkPdfNativeDoc* doc, SkPdfFontDictionary* dict); |
static SkPdfFont* Default() {return fontFromName(NULL, NULL, "TimesNewRoman");} |
- static SkPdfType0Font* fontFromType0FontDictionary(SkNativeParsedPDF* doc, SkPdfType0FontDictionary* dict); |
- static SkPdfType1Font* fontFromType1FontDictionary(SkNativeParsedPDF* doc, SkPdfType1FontDictionary* dict); |
- static SkPdfType3Font* fontFromType3FontDictionary(SkNativeParsedPDF* doc, SkPdfType3FontDictionary* dict); |
- static SkPdfTrueTypeFont* fontFromTrueTypeFontDictionary(SkNativeParsedPDF* doc, SkPdfTrueTypeFontDictionary* dict); |
- static SkPdfMultiMasterFont* fontFromMultiMasterFontDictionary(SkNativeParsedPDF* doc, SkPdfMultiMasterFontDictionary* dict); |
+ static SkPdfType0Font* fontFromType0FontDictionary(SkPdfNativeDoc* doc, SkPdfType0FontDictionary* dict); |
+ static SkPdfType1Font* fontFromType1FontDictionary(SkPdfNativeDoc* doc, SkPdfType1FontDictionary* dict); |
+ static SkPdfType3Font* fontFromType3FontDictionary(SkPdfNativeDoc* doc, SkPdfType3FontDictionary* dict); |
+ static SkPdfTrueTypeFont* fontFromTrueTypeFontDictionary(SkPdfNativeDoc* doc, SkPdfTrueTypeFontDictionary* dict); |
+ static SkPdfMultiMasterFont* fontFromMultiMasterFontDictionary(SkPdfNativeDoc* doc, SkPdfMultiMasterFontDictionary* dict); |
- static SkPdfFont* fontFromFontDescriptor(SkNativeParsedPDF* doc, SkPdfFontDescriptorDictionary* fd, bool loadFromName = true); |
+ static SkPdfFont* fontFromFontDescriptor(SkPdfNativeDoc* doc, SkPdfFontDescriptorDictionary* fd, bool loadFromName = true); |
public: |
- virtual double drawOneChar(unsigned int ch, SkPaint* paint, PdfContext* pdfContext, SkCanvas* canvas) = 0; |
+ virtual double drawOneChar(unsigned int ch, SkPaint* paint, SkPdfContext* pdfContext, SkCanvas* canvas) = 0; |
virtual void afterWord(SkPaint* paint, SkMatrix* matrix) = 0; |
private: |
- static SkPdfFont* fontFromPdfDictionaryOnce(SkNativeParsedPDF* doc, SkPdfFontDictionary* dict); |
+ static SkPdfFont* fontFromPdfDictionaryOnce(SkPdfNativeDoc* doc, SkPdfFontDictionary* dict); |
}; |
class SkPdfStandardFont : public SkPdfFont { |
@@ -230,7 +240,7 @@ |
SkPdfStandardFont(SkTypeface* typeface) : fTypeface(typeface) {} |
public: |
- virtual double drawOneChar(unsigned int ch, SkPaint* paint, PdfContext* pdfContext, SkCanvas* canvas) { |
+ virtual double drawOneChar(unsigned int ch, SkPaint* paint, SkPdfContext* pdfContext, SkCanvas* canvas) { |
paint->setTypeface(fTypeface); |
paint->setTextEncoding(SkPaint::kUTF8_TextEncoding); |
@@ -249,11 +259,11 @@ |
class SkPdfType0Font : public SkPdfFont { |
public: |
- SkPdfType0Font(SkNativeParsedPDF* doc, SkPdfType0FontDictionary* dict); |
+ SkPdfType0Font(SkPdfNativeDoc* doc, SkPdfType0FontDictionary* dict); |
public: |
- virtual double drawOneChar(unsigned int ch, SkPaint* paint, PdfContext* pdfContext, SkCanvas* canvas) { |
+ virtual double drawOneChar(unsigned int ch, SkPaint* paint, SkPdfContext* pdfContext, SkCanvas* canvas) { |
return fBaseFont->drawOneChar(ToUnicode(ch), paint, pdfContext, canvas); |
} |
@@ -263,16 +273,23 @@ |
class SkPdfType1Font : public SkPdfFont { |
public: |
- SkPdfType1Font(SkNativeParsedPDF* doc, SkPdfType1FontDictionary* dict) { |
+ SkPdfType1Font(SkPdfNativeDoc* doc, SkPdfType1FontDictionary* dict) { |
if (dict->has_FontDescriptor()) { |
fBaseFont = SkPdfFont::fontFromFontDescriptor(doc, dict->FontDescriptor(doc)); |
} else { |
fBaseFont = fontFromName(doc, dict, dict->BaseFont(doc).c_str()); |
} |
+ |
+ if (dict->isEncodingAName(doc)) { |
+ fEncoding = SkPdfEncoding::fromName(dict->getEncodingAsName(doc).c_str()); |
+ } else if (dict->isEncodingADictionary(doc)) { |
+ //SkPdfDictionary* dictEnc = dict->getEncodingAsDictionary(doc); |
+ } |
+ dict->FontDescriptor(doc); |
} |
public: |
- virtual double drawOneChar(unsigned int ch, SkPaint* paint, PdfContext* pdfContext, SkCanvas* canvas) { |
+ virtual double drawOneChar(unsigned int ch, SkPaint* paint, SkPdfContext* pdfContext, SkCanvas* canvas) { |
return fBaseFont->drawOneChar(ToUnicode(ch), paint, pdfContext, canvas); |
} |
@@ -283,13 +300,13 @@ |
class SkPdfTrueTypeFont : public SkPdfType1Font { |
public: |
- SkPdfTrueTypeFont(SkNativeParsedPDF* doc, SkPdfTrueTypeFontDictionary* dict) : SkPdfType1Font(doc, dict) { |
+ SkPdfTrueTypeFont(SkPdfNativeDoc* doc, SkPdfTrueTypeFontDictionary* dict) : SkPdfType1Font(doc, dict) { |
} |
}; |
class SkPdfMultiMasterFont : public SkPdfType1Font { |
public: |
- SkPdfMultiMasterFont(SkNativeParsedPDF* doc, SkPdfMultiMasterFontDictionary* dict) : SkPdfType1Font(doc, dict) { |
+ SkPdfMultiMasterFont(SkPdfNativeDoc* doc, SkPdfMultiMasterFontDictionary* dict) : SkPdfType1Font(doc, dict) { |
} |
}; |
/* |
@@ -324,7 +341,7 @@ |
class SkPdfType3Font : public SkPdfFont { |
struct Type3FontChar { |
- SkPdfObject* fObj; |
+ SkPdfNativeObject* fObj; |
double fWidth; |
}; |
@@ -339,7 +356,7 @@ |
Type3FontChar* fChars; |
public: |
- SkPdfType3Font(SkNativeParsedPDF* parsed, SkPdfType3FontDictionary* dict) { |
+ SkPdfType3Font(SkPdfNativeDoc* parsed, SkPdfType3FontDictionary* dict) { |
fBaseFont = fontFromName(parsed, dict, dict->BaseFont(parsed).c_str()); |
if (dict->has_Encoding()) { |
@@ -400,7 +417,7 @@ |
} |
public: |
- virtual double drawOneChar(unsigned int ch, SkPaint* paint, PdfContext* pdfContext, SkCanvas* canvas) { |
+ virtual double drawOneChar(unsigned int ch, SkPaint* paint, SkPdfContext* pdfContext, SkCanvas* canvas) { |
if (ch < fFirstChar || ch > fLastChar || !fChars[ch - fFirstChar].fObj) { |
return fBaseFont->drawOneChar(ToUnicode(ch), paint, pdfContext, canvas); |
} |