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

Side by Side Diff: experimental/PdfViewer/SkPdfRenderer.cpp

Issue 23163007: pdfviewer: make pdfviewer compile on mac Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 years, 4 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/SkPdfGraphicsState.h ('k') | experimental/PdfViewer/SkPdfUtils.h » ('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 #include "SkCanvas.h" 8 #include "SkCanvas.h"
9 #include "SkDevice.h" 9 #include "SkDevice.h"
10 #include "SkForceLinking.h" 10 #include "SkForceLinking.h"
(...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after
472 // skia format, through a table 472 // skia format, through a table
473 473
474 // this functions returns the image, it does not look at the smask. 474 // this functions returns the image, it does not look at the smask.
475 475
476 static SkBitmap* getImageFromObjectCore(SkPdfContext* pdfContext, SkPdfImageDict ionary* image, bool transparencyMask) { 476 static SkBitmap* getImageFromObjectCore(SkPdfContext* pdfContext, SkPdfImageDict ionary* image, bool transparencyMask) {
477 if (image == NULL || !image->hasStream()) { 477 if (image == NULL || !image->hasStream()) {
478 // TODO(edisonn): report warning to be used in testing. 478 // TODO(edisonn): report warning to be used in testing.
479 return NULL; 479 return NULL;
480 } 480 }
481 481
482 int64_t bpc = image->BitsPerComponent(pdfContext->fPdfDoc); 482 int bpc = (int)image->BitsPerComponent(pdfContext->fPdfDoc);
483 int64_t width = image->Width(pdfContext->fPdfDoc); 483 int width = (int)image->Width(pdfContext->fPdfDoc);
484 int64_t height = image->Height(pdfContext->fPdfDoc); 484 int height = (int)image->Height(pdfContext->fPdfDoc);
485 std::string colorSpace = "DeviceRGB"; 485 std::string colorSpace = "DeviceRGB";
486 486
487 bool indexed = false; 487 bool indexed = false;
488 SkPMColor colors[256]; 488 SkPMColor colors[256];
489 int cnt = 0; 489 int cnt = 0;
490 490
491 // TODO(edisonn): color space can be an array too! 491 // TODO(edisonn): color space can be an array too!
492 if (image->isColorSpaceAName(pdfContext->fPdfDoc)) { 492 if (image->isColorSpaceAName(pdfContext->fPdfDoc)) {
493 colorSpace = image->getColorSpaceAsName(pdfContext->fPdfDoc); 493 colorSpace = image->getColorSpaceAsName(pdfContext->fPdfDoc);
494 } else if (image->isColorSpaceAArray(pdfContext->fPdfDoc)) { 494 } else if (image->isColorSpaceAArray(pdfContext->fPdfDoc)) {
495 SkPdfArray* array = image->getColorSpaceAsArray(pdfContext->fPdfDoc); 495 SkPdfArray* array = image->getColorSpaceAsArray(pdfContext->fPdfDoc);
496 if (array && array->size() == 4 && array->objAtAIndex(0)->isName("Indexe d") && 496 if (array && array->size() == 4 && array->objAtAIndex(0)->isName("Indexe d") &&
497 (array->objAtAIndex(1)->isName("Devic eRGB") || array->objAtAIndex(1)->isName("RGB")) && 497 (array->objAtAIndex(1)->isName("Devic eRGB") || array->objAtAIndex(1)->isName("RGB")) &&
498 array->objAtAIndex(2)->isInteger() && 498 array->objAtAIndex(2)->isInteger() &&
499 array->objAtAIndex(3)->isHexString() 499 array->objAtAIndex(3)->isHexString()
500 ) { 500 ) {
501 // TODO(edisonn): suport only DeviceRGB for now. 501 // TODO(edisonn): suport only DeviceRGB for now.
502 indexed = true; 502 indexed = true;
503 cnt = array->objAtAIndex(2)->intValue() + 1; 503 cnt = (int)array->objAtAIndex(2)->intValue() + 1;
504 if (cnt > 256) { 504 if (cnt > 256) {
505 // TODO(edionn): report NYIs 505 // TODO(edionn): report NYIs
506 return NULL; 506 return NULL;
507 } 507 }
508 SkColorTable colorTable(cnt); 508 SkColorTable colorTable(cnt);
509 NotOwnedString data = array->objAtAIndex(3)->strRef(); 509 NotOwnedString data = array->objAtAIndex(3)->strRef();
510 if (data.fBytes != (unsigned int)cnt * 3) { 510 if (data.fBytes != (unsigned int)cnt * 3) {
511 // TODO(edionn): report error/warning 511 // TODO(edionn): report error/warning
512 return NULL; 512 return NULL;
513 } 513 }
(...skipping 520 matching lines...) Expand 10 before | Expand all | Expand 10 after
1034 pdfContext->fGraphicsState.fTextLeading = ty; 1034 pdfContext->fGraphicsState.fTextLeading = ty;
1035 1035
1036 return kOK_SkPdfResult; 1036 return kOK_SkPdfResult;
1037 } 1037 }
1038 1038
1039 static SkPdfResult PdfOp_Td(SkPdfContext* pdfContext, SkCanvas* canvas, PdfToken Looper** looper) { 1039 static SkPdfResult PdfOp_Td(SkPdfContext* pdfContext, SkCanvas* canvas, PdfToken Looper** looper) {
1040 #ifdef PDF_TRACE 1040 #ifdef PDF_TRACE
1041 printf("stack size = %i\n", (int)pdfContext->fObjectStack.size()); 1041 printf("stack size = %i\n", (int)pdfContext->fObjectStack.size());
1042 #endif 1042 #endif
1043 double ty = pdfContext->fObjectStack.top()->numberValue(); pdfContext->fObje ctStack.pop(); 1043 double ty = pdfContext->fObjectStack.top()->numberValue(); pdfContext->fObje ctStack.pop();
1044 SkPdfNativeObject* obj = pdfContext->fObjectStack.top();
1045 obj = obj;
1046 double tx = pdfContext->fObjectStack.top()->numberValue(); pdfContext->fObje ctStack.pop(); 1044 double tx = pdfContext->fObjectStack.top()->numberValue(); pdfContext->fObje ctStack.pop();
1047 1045
1048 double array[6] = {1, 0, 0, 1, tx, -ty}; 1046 double array[6] = {1, 0, 0, 1, tx, -ty};
1049 SkMatrix matrix = SkMatrixFromPdfMatrix(array); 1047 SkMatrix matrix = SkMatrixFromPdfMatrix(array);
1050 1048
1051 pdfContext->fGraphicsState.fMatrixTm.preConcat(matrix); 1049 pdfContext->fGraphicsState.fMatrixTm.preConcat(matrix);
1052 pdfContext->fGraphicsState.fMatrixTlm.preConcat(matrix); 1050 pdfContext->fGraphicsState.fMatrixTlm.preConcat(matrix);
1053 1051
1054 return kPartial_SkPdfResult; 1052 return kPartial_SkPdfResult;
1055 } 1053 }
(...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after
1438 } 1436 }
1439 1437
1440 static SkPdfResult PdfOp_ET(SkPdfContext* pdfContext, SkCanvas* canvas, PdfToken Looper** looper) { 1438 static SkPdfResult PdfOp_ET(SkPdfContext* pdfContext, SkCanvas* canvas, PdfToken Looper** looper) {
1441 if (!pdfContext->fGraphicsState.fTextBlock) { 1439 if (!pdfContext->fGraphicsState.fTextBlock) {
1442 return kIgnoreError_SkPdfResult; 1440 return kIgnoreError_SkPdfResult;
1443 } 1441 }
1444 // TODO(edisonn): anything else to be done once we are done with draw text? Like restore stack? 1442 // TODO(edisonn): anything else to be done once we are done with draw text? Like restore stack?
1445 return kOK_SkPdfResult; 1443 return kOK_SkPdfResult;
1446 } 1444 }
1447 1445
1448 SkPdfResult skpdfGraphicsStateApplyFontCore(SkPdfContext* pdfContext, const SkPd fNativeObject* fontName, double fontSize) { 1446 static SkPdfResult skpdfGraphicsStateApplyFontCore(SkPdfContext* pdfContext, con st SkPdfNativeObject* fontName, double fontSize) {
1449 #ifdef PDF_TRACE 1447 #ifdef PDF_TRACE
1450 printf("font name: %s\n", fontName->nameValue2().c_str()); 1448 printf("font name: %s\n", fontName->nameValue2().c_str());
1451 #endif 1449 #endif
1452 1450
1453 if (!pdfContext->fGraphicsState.fResources->Font(pdfContext->fPdfDoc)) { 1451 if (!pdfContext->fGraphicsState.fResources->Font(pdfContext->fPdfDoc)) {
1454 // TODO(edisonn): try to recover and draw it any way? 1452 // TODO(edisonn): try to recover and draw it any way?
1455 return kIgnoreError_SkPdfResult; 1453 return kIgnoreError_SkPdfResult;
1456 } 1454 }
1457 1455
1458 SkPdfNativeObject* objFont = pdfContext->fGraphicsState.fResources->Font(pdf Context->fPdfDoc)->get(fontName); 1456 SkPdfNativeObject* objFont = pdfContext->fGraphicsState.fResources->Font(pdf Context->fPdfDoc)->get(fontName);
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after
1792 static SkPdfResult PdfOp_EI(SkPdfContext* pdfContext, SkCanvas* canvas, PdfToken Looper** looper) { 1790 static SkPdfResult PdfOp_EI(SkPdfContext* pdfContext, SkCanvas* canvas, PdfToken Looper** looper) {
1793 #ifdef ASSERT_BAD_PDF_OPS 1791 #ifdef ASSERT_BAD_PDF_OPS
1794 SkASSERT(false); // must be processed in inline image looper, but let's 1792 SkASSERT(false); // must be processed in inline image looper, but let's
1795 // have the assert when testing good pdfs. 1793 // have the assert when testing good pdfs.
1796 #endif 1794 #endif
1797 return kIgnoreError_SkPdfResult; 1795 return kIgnoreError_SkPdfResult;
1798 } 1796 }
1799 1797
1800 1798
1801 // TODO(edisonn): security review here, make sure all parameters are valid, and safe. 1799 // TODO(edisonn): security review here, make sure all parameters are valid, and safe.
1802 SkPdfResult skpdfGraphicsStateApply_ca(SkPdfContext* pdfContext, double ca) { 1800 static SkPdfResult skpdfGraphicsStateApply_ca(SkPdfContext* pdfContext, double c a) {
1803 pdfContext->fGraphicsState.fNonStroking.fOpacity = ca; 1801 pdfContext->fGraphicsState.fNonStroking.fOpacity = ca;
1804 return kOK_SkPdfResult; 1802 return kOK_SkPdfResult;
1805 } 1803 }
1806 1804
1807 SkPdfResult skpdfGraphicsStateApply_CA(SkPdfContext* pdfContext, double CA) { 1805 static SkPdfResult skpdfGraphicsStateApply_CA(SkPdfContext* pdfContext, double C A) {
1808 pdfContext->fGraphicsState.fStroking.fOpacity = CA; 1806 pdfContext->fGraphicsState.fStroking.fOpacity = CA;
1809 return kOK_SkPdfResult; 1807 return kOK_SkPdfResult;
1810 } 1808 }
1811 1809
1812 SkPdfResult skpdfGraphicsStateApplyLW(SkPdfContext* pdfContext, double lineWidth ) { 1810 static SkPdfResult skpdfGraphicsStateApplyLW(SkPdfContext* pdfContext, double li neWidth) {
1813 pdfContext->fGraphicsState.fLineWidth = lineWidth; 1811 pdfContext->fGraphicsState.fLineWidth = lineWidth;
1814 return kOK_SkPdfResult; 1812 return kOK_SkPdfResult;
1815 } 1813 }
1816 1814
1817 SkPdfResult skpdfGraphicsStateApplyLC(SkPdfContext* pdfContext, int64_t lineCap) { 1815 static SkPdfResult skpdfGraphicsStateApplyLC(SkPdfContext* pdfContext, int64_t l ineCap) {
1818 pdfContext->fGraphicsState.fLineCap = (int)lineCap; 1816 pdfContext->fGraphicsState.fLineCap = (int)lineCap;
1819 return kOK_SkPdfResult; 1817 return kOK_SkPdfResult;
1820 } 1818 }
1821 1819
1822 SkPdfResult skpdfGraphicsStateApplyLJ(SkPdfContext* pdfContext, int64_t lineJoin ) { 1820 static SkPdfResult skpdfGraphicsStateApplyLJ(SkPdfContext* pdfContext, int64_t l ineJoin) {
1823 pdfContext->fGraphicsState.fLineJoin = (int)lineJoin; 1821 pdfContext->fGraphicsState.fLineJoin = (int)lineJoin;
1824 return kOK_SkPdfResult; 1822 return kOK_SkPdfResult;
1825 } 1823 }
1826 1824
1827 SkPdfResult skpdfGraphicsStateApplyML(SkPdfContext* pdfContext, double miterLimi t) { 1825 static SkPdfResult skpdfGraphicsStateApplyML(SkPdfContext* pdfContext, double mi terLimit) {
1828 pdfContext->fGraphicsState.fMiterLimit = miterLimit; 1826 pdfContext->fGraphicsState.fMiterLimit = miterLimit;
1829 return kOK_SkPdfResult; 1827 return kOK_SkPdfResult;
1830 } 1828 }
1831 1829
1832 // TODO(edisonn): implement all rules, as of now 3) and 5) and 6) do not seem su ported by skia, but I am not sure 1830 // TODO(edisonn): implement all rules, as of now 3) and 5) and 6) do not seem su ported by skia, but I am not sure
1833 /* 1831 /*
1834 1) [ ] 0 No dash; solid, unbroken lines 1832 1) [ ] 0 No dash; solid, unbroken lines
1835 2) [3] 0 3 units on, 3 units off, … 1833 2) [3] 0 3 units on, 3 units off, …
1836 3) [2] 1 1 on, 2 off, 2 on, 2 off, … 1834 3) [2] 1 1 on, 2 off, 2 on, 2 off, …
1837 4) [2 1] 0 2 on, 1 off, 2 on, 1 off, … 1835 4) [2 1] 0 2 on, 1 off, 2 on, 1 off, …
1838 5) [3 5] 6 2 off, 3 on, 5 off, 3 on, 5 off, … 1836 5) [3 5] 6 2 off, 3 on, 5 off, 3 on, 5 off, …
1839 6) [2 3] 11 1 on, 3 off, 2 on, 3 off, 2 on, … 1837 6) [2 3] 11 1 on, 3 off, 2 on, 3 off, 2 on, …
1840 */ 1838 */
1841 1839
1842 SkPdfResult skpdfGraphicsStateApplyD(SkPdfContext* pdfContext, SkPdfArray* inter vals, SkPdfNativeObject* phase) { 1840 static SkPdfResult skpdfGraphicsStateApplyD(SkPdfContext* pdfContext, SkPdfArray * intervals, SkPdfNativeObject* phase) {
1843 int cnt = intervals->size(); 1841 int cnt = intervals->size();
1844 if (cnt >= 256) { 1842 if (cnt >= 256) {
1845 // TODO(edisonn): report error/warning, unsuported; 1843 // TODO(edisonn): report error/warning, unsuported;
1846 // TODO(edisonn): alloc memory 1844 // TODO(edisonn): alloc memory
1847 return kIgnoreError_SkPdfResult; 1845 return kIgnoreError_SkPdfResult;
1848 } 1846 }
1849 for (int i = 0; i < cnt; i++) { 1847 for (int i = 0; i < cnt; i++) {
1850 if (!intervals->objAtAIndex(i)->isNumber()) { 1848 if (!intervals->objAtAIndex(i)->isNumber()) {
1851 // TODO(edisonn): report error/warning 1849 // TODO(edisonn): report error/warning
1852 return kIgnoreError_SkPdfResult; 1850 return kIgnoreError_SkPdfResult;
(...skipping 17 matching lines...) Expand all
1870 pdfContext->fGraphicsState.fDashArrayLength = cnt; 1868 pdfContext->fGraphicsState.fDashArrayLength = cnt;
1871 pdfContext->fGraphicsState.fDashPhase = phase->scalarValue(); 1869 pdfContext->fGraphicsState.fDashPhase = phase->scalarValue();
1872 if (pdfContext->fGraphicsState.fDashPhase == 0) { 1870 if (pdfContext->fGraphicsState.fDashPhase == 0) {
1873 // other rules, changes? 1871 // other rules, changes?
1874 pdfContext->fGraphicsState.fDashPhase = total; 1872 pdfContext->fGraphicsState.fDashPhase = total;
1875 } 1873 }
1876 1874
1877 return kOK_SkPdfResult; 1875 return kOK_SkPdfResult;
1878 } 1876 }
1879 1877
1880 SkPdfResult skpdfGraphicsStateApplyD(SkPdfContext* pdfContext, SkPdfArray* dash) { 1878 static SkPdfResult skpdfGraphicsStateApplyD(SkPdfContext* pdfContext, SkPdfArray * dash) {
1881 // TODO(edisonn): verify input 1879 // TODO(edisonn): verify input
1882 if (!dash || dash->isArray() || dash->size() != 2 || !dash->objAtAIndex(0)-> isArray() || !dash->objAtAIndex(1)->isNumber()) { 1880 if (!dash || dash->isArray() || dash->size() != 2 || !dash->objAtAIndex(0)-> isArray() || !dash->objAtAIndex(1)->isNumber()) {
1883 // TODO(edisonn): report error/warning 1881 // TODO(edisonn): report error/warning
1884 return kIgnoreError_SkPdfResult; 1882 return kIgnoreError_SkPdfResult;
1885 } 1883 }
1886 return skpdfGraphicsStateApplyD(pdfContext, (SkPdfArray*)dash->objAtAIndex(0 ), dash->objAtAIndex(1)); 1884 return skpdfGraphicsStateApplyD(pdfContext, (SkPdfArray*)dash->objAtAIndex(0 ), dash->objAtAIndex(1));
1887 } 1885 }
1888 1886
1889 void skpdfGraphicsStateApplyFont(SkPdfContext* pdfContext, SkPdfArray* fontAndSi ze) { 1887 static void skpdfGraphicsStateApplyFont(SkPdfContext* pdfContext, SkPdfArray* fo ntAndSize) {
1890 if (!fontAndSize || fontAndSize->isArray() || fontAndSize->size() != 2 || !f ontAndSize->objAtAIndex(0)->isName() || !fontAndSize->objAtAIndex(1)->isNumber() ) { 1888 if (!fontAndSize || fontAndSize->isArray() || fontAndSize->size() != 2 || !f ontAndSize->objAtAIndex(0)->isName() || !fontAndSize->objAtAIndex(1)->isNumber() ) {
1891 // TODO(edisonn): report error/warning 1889 // TODO(edisonn): report error/warning
1892 return; 1890 return;
1893 } 1891 }
1894 skpdfGraphicsStateApplyFontCore(pdfContext, fontAndSize->objAtAIndex(0), fon tAndSize->objAtAIndex(1)->numberValue()); 1892 skpdfGraphicsStateApplyFontCore(pdfContext, fontAndSize->objAtAIndex(0), fon tAndSize->objAtAIndex(1)->numberValue());
1895 } 1893 }
1896 1894
1897 1895
1898 //lineWidth w Set the line width in the graphics state (see “Line Width” on page 152). 1896 //lineWidth w Set the line width in the graphics state (see “Line Width” on page 152).
1899 static SkPdfResult PdfOp_w(SkPdfContext* pdfContext, SkCanvas* canvas, PdfTokenL ooper** looper) { 1897 static SkPdfResult PdfOp_w(SkPdfContext* pdfContext, SkCanvas* canvas, PdfTokenL ooper** looper) {
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1971 // TABLE 7.3 Standard nonseparable blend modes 1969 // TABLE 7.3 Standard nonseparable blend modes
1972 gPdfBlendModes.set("Hue", SkXfermode::kHue_Mode); 1970 gPdfBlendModes.set("Hue", SkXfermode::kHue_Mode);
1973 gPdfBlendModes.set("Saturation", SkXfermode::kSaturation_Mode); 1971 gPdfBlendModes.set("Saturation", SkXfermode::kSaturation_Mode);
1974 gPdfBlendModes.set("Color", SkXfermode::kColor_Mode); 1972 gPdfBlendModes.set("Color", SkXfermode::kColor_Mode);
1975 gPdfBlendModes.set("Luminosity", SkXfermode::kLuminosity_Mode); 1973 gPdfBlendModes.set("Luminosity", SkXfermode::kLuminosity_Mode);
1976 } 1974 }
1977 }; 1975 };
1978 1976
1979 InitBlendModes _gDummyInniter; 1977 InitBlendModes _gDummyInniter;
1980 1978
1981 SkXfermode::Mode xferModeFromBlendMode(const char* blendMode, size_t len) { 1979 static SkXfermode::Mode xferModeFromBlendMode(const char* blendMode, size_t len) {
1982 SkXfermode::Mode mode = (SkXfermode::Mode)(SkXfermode::kLastMode + 1); 1980 SkXfermode::Mode mode = (SkXfermode::Mode)(SkXfermode::kLastMode + 1);
1983 if (gPdfBlendModes.find(blendMode, len, &mode)) { 1981 if (gPdfBlendModes.find(blendMode, len, &mode)) {
1984 return mode; 1982 return mode;
1985 } 1983 }
1986 1984
1987 return (SkXfermode::Mode)(SkXfermode::kLastMode + 1); 1985 return (SkXfermode::Mode)(SkXfermode::kLastMode + 1);
1988 } 1986 }
1989 1987
1990 void skpdfGraphicsStateApplyBM_name(SkPdfContext* pdfContext, const std::string& blendMode) { 1988 static void skpdfGraphicsStateApplyBM_name(SkPdfContext* pdfContext, const std:: string& blendMode) {
1991 SkXfermode::Mode mode = xferModeFromBlendMode(blendMode.c_str(), blendMode.l ength()); 1989 SkXfermode::Mode mode = xferModeFromBlendMode(blendMode.c_str(), blendMode.l ength());
1992 if (mode <= SkXfermode::kLastMode) { 1990 if (mode <= SkXfermode::kLastMode) {
1993 pdfContext->fGraphicsState.fBlendModesLength = 1; 1991 pdfContext->fGraphicsState.fBlendModesLength = 1;
1994 pdfContext->fGraphicsState.fBlendModes[0] = mode; 1992 pdfContext->fGraphicsState.fBlendModes[0] = mode;
1995 } else { 1993 } else {
1996 // TODO(edisonn): report unknown blend mode 1994 // TODO(edisonn): report unknown blend mode
1997 } 1995 }
1998 } 1996 }
1999 1997
2000 void skpdfGraphicsStateApplyBM_array(SkPdfContext* pdfContext, SkPdfArray* blend Modes) { 1998 static void skpdfGraphicsStateApplyBM_array(SkPdfContext* pdfContext, SkPdfArray * blendModes) {
2001 if (!blendModes || blendModes->isArray() || blendModes->size() == 0 || blend Modes->size() > 256) { 1999 if (!blendModes || blendModes->isArray() || blendModes->size() == 0 || blend Modes->size() > 256) {
2002 // TODO(edisonn): report error/warning 2000 // TODO(edisonn): report error/warning
2003 return; 2001 return;
2004 } 2002 }
2005 SkXfermode::Mode modes[256]; 2003 SkXfermode::Mode modes[256];
2006 int cnt = blendModes->size(); 2004 int cnt = blendModes->size();
2007 for (int i = 0; i < cnt; i++) { 2005 for (int i = 0; i < cnt; i++) {
2008 SkPdfNativeObject* name = blendModes->objAtAIndex(i); 2006 SkPdfNativeObject* name = blendModes->objAtAIndex(i);
2009 if (!name->isName()) { 2007 if (!name->isName()) {
2010 // TODO(edisonn): report error/warning 2008 // TODO(edisonn): report error/warning
2011 return; 2009 return;
2012 } 2010 }
2013 SkXfermode::Mode mode = xferModeFromBlendMode(name->c_str(), name->lenst r()); 2011 SkXfermode::Mode mode = xferModeFromBlendMode(name->c_str(), name->lenst r());
2014 if (mode > SkXfermode::kLastMode) { 2012 if (mode > SkXfermode::kLastMode) {
2015 // TODO(edisonn): report error/warning 2013 // TODO(edisonn): report error/warning
2016 return; 2014 return;
2017 } 2015 }
2018 } 2016 }
2019 2017
2020 pdfContext->fGraphicsState.fBlendModesLength = cnt; 2018 pdfContext->fGraphicsState.fBlendModesLength = cnt;
2021 for (int i = 0; i < cnt; i++) { 2019 for (int i = 0; i < cnt; i++) {
2022 pdfContext->fGraphicsState.fBlendModes[i] = modes[i]; 2020 pdfContext->fGraphicsState.fBlendModes[i] = modes[i];
2023 } 2021 }
2024 } 2022 }
2025 2023
2026 void skpdfGraphicsStateApplySMask_dict(SkPdfContext* pdfContext, SkPdfDictionary * sMask) { 2024 static void skpdfGraphicsStateApplySMask_dict(SkPdfContext* pdfContext, SkPdfDic tionary* sMask) {
2027 // TODO(edisonn): verify input 2025 // TODO(edisonn): verify input
2028 if (pdfContext->fPdfDoc->mapper()->mapSoftMaskDictionary(sMask)) { 2026 if (pdfContext->fPdfDoc->mapper()->mapSoftMaskDictionary(sMask)) {
2029 pdfContext->fGraphicsState.fSoftMaskDictionary = (SkPdfSoftMaskDictionar y*)sMask; 2027 pdfContext->fGraphicsState.fSoftMaskDictionary = (SkPdfSoftMaskDictionar y*)sMask;
2030 } else if (pdfContext->fPdfDoc->mapper()->mapSoftMaskImageDictionary(sMask)) { 2028 } else if (pdfContext->fPdfDoc->mapper()->mapSoftMaskImageDictionary(sMask)) {
2031 SkPdfSoftMaskImageDictionary* smid = (SkPdfSoftMaskImageDictionary*)sMas k; 2029 SkPdfSoftMaskImageDictionary* smid = (SkPdfSoftMaskImageDictionary*)sMas k;
2032 pdfContext->fGraphicsState.fSMask = getImageFromObject(pdfContext, smid, true); 2030 pdfContext->fGraphicsState.fSMask = getImageFromObject(pdfContext, smid, true);
2033 } else { 2031 } else {
2034 // TODO (edisonn): report error/warning 2032 // TODO (edisonn): report error/warning
2035 } 2033 }
2036 } 2034 }
2037 2035
2038 void skpdfGraphicsStateApplySMask_name(SkPdfContext* pdfContext, const std::stri ng& sMask) { 2036 static void skpdfGraphicsStateApplySMask_name(SkPdfContext* pdfContext, const st d::string& sMask) {
2039 if (sMask == "None") { 2037 if (sMask == "None") {
2040 pdfContext->fGraphicsState.fSoftMaskDictionary = NULL; 2038 pdfContext->fGraphicsState.fSoftMaskDictionary = NULL;
2041 pdfContext->fGraphicsState.fSMask = NULL; 2039 pdfContext->fGraphicsState.fSMask = NULL;
2042 return; 2040 return;
2043 } 2041 }
2044 2042
2045 //Next, get the ExtGState Dictionary from the Resource Dictionary: 2043 //Next, get the ExtGState Dictionary from the Resource Dictionary:
2046 SkPdfDictionary* extGStateDictionary = pdfContext->fGraphicsState.fResources ->ExtGState(pdfContext->fPdfDoc); 2044 SkPdfDictionary* extGStateDictionary = pdfContext->fGraphicsState.fResources ->ExtGState(pdfContext->fPdfDoc);
2047 2045
2048 if (extGStateDictionary == NULL) { 2046 if (extGStateDictionary == NULL) {
2049 #ifdef PDF_TRACE 2047 #ifdef PDF_TRACE
2050 printf("ExtGState is NULL!\n"); 2048 printf("ExtGState is NULL!\n");
2051 #endif 2049 #endif
2052 // TODO (edisonn): report error/warning 2050 // TODO (edisonn): report error/warning
2053 return; 2051 return;
2054 } 2052 }
2055 2053
2056 SkPdfNativeObject* obj = pdfContext->fPdfDoc->resolveReference(extGStateDict ionary->get(sMask.c_str())); 2054 SkPdfNativeObject* obj = pdfContext->fPdfDoc->resolveReference(extGStateDict ionary->get(sMask.c_str()));
2057 if (!obj || !obj->isDictionary()) { 2055 if (!obj || !obj->isDictionary()) {
2058 // TODO (edisonn): report error/warning 2056 // TODO (edisonn): report error/warning
2059 return; 2057 return;
2060 } 2058 }
2061 2059
2062 pdfContext->fGraphicsState.fSoftMaskDictionary = NULL; 2060 pdfContext->fGraphicsState.fSoftMaskDictionary = NULL;
2063 pdfContext->fGraphicsState.fSMask = NULL; 2061 pdfContext->fGraphicsState.fSMask = NULL;
2064 2062
2065 skpdfGraphicsStateApplySMask_dict(pdfContext, obj->asDictionary()); 2063 skpdfGraphicsStateApplySMask_dict(pdfContext, obj->asDictionary());
2066 } 2064 }
2067 2065
2068 void skpdfGraphicsStateApplyAIS(SkPdfContext* pdfContext, bool alphaSource) { 2066 static void skpdfGraphicsStateApplyAIS(SkPdfContext* pdfContext, bool alphaSourc e) {
2069 pdfContext->fGraphicsState.fAlphaSource = alphaSource; 2067 pdfContext->fGraphicsState.fAlphaSource = alphaSource;
2070 } 2068 }
2071 2069
2072 2070
2073 //dictName gs (PDF 1.2) Set the specified parameters in the graphics state. dictN ame is 2071 //dictName gs (PDF 1.2) Set the specified parameters in the graphics state. dictN ame is
2074 //the name of a graphics state parameter dictionary in the ExtGState subdictiona ry of the current resource dictionary (see the next section). 2072 //the name of a graphics state parameter dictionary in the ExtGState subdictiona ry of the current resource dictionary (see the next section).
2075 static SkPdfResult PdfOp_gs(SkPdfContext* pdfContext, SkCanvas* canvas, PdfToken Looper** looper) { 2073 static SkPdfResult PdfOp_gs(SkPdfContext* pdfContext, SkCanvas* canvas, PdfToken Looper** looper) {
2076 SkPdfNativeObject* name = pdfContext->fObjectStack.top(); pdfContext->fOb jectStack.pop(); 2074 SkPdfNativeObject* name = pdfContext->fObjectStack.top(); pdfContext->fOb jectStack.pop();
2077 2075
2078 #ifdef PDF_TRACE 2076 #ifdef PDF_TRACE
(...skipping 570 matching lines...) Expand 10 before | Expand all | Expand 10 after
2649 2647
2650 rect = SkRect::MakeWH(width, height); 2648 rect = SkRect::MakeWH(width, height);
2651 2649
2652 setup_bitmap(output, (int)SkScalarToDouble(width), (int)SkScalarToDouble(hei ght)); 2650 setup_bitmap(output, (int)SkScalarToDouble(width), (int)SkScalarToDouble(hei ght));
2653 2651
2654 SkAutoTUnref<SkDevice> device(SkNEW_ARGS(SkDevice, (*output))); 2652 SkAutoTUnref<SkDevice> device(SkNEW_ARGS(SkDevice, (*output)));
2655 SkCanvas canvas(device); 2653 SkCanvas canvas(device);
2656 2654
2657 return renderer.renderPage(page, &canvas, rect); 2655 return renderer.renderPage(page, &canvas, rect);
2658 } 2656 }
OLDNEW
« no previous file with comments | « experimental/PdfViewer/SkPdfGraphicsState.h ('k') | experimental/PdfViewer/SkPdfUtils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698