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 719 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
730 | 730 |
731 void SkPDFDevice::init() { | 731 void SkPDFDevice::init() { |
732 fAnnotations = NULL; | 732 fAnnotations = NULL; |
733 fResourceDict = NULL; | 733 fResourceDict = NULL; |
734 fContentEntries.free(); | 734 fContentEntries.free(); |
735 fLastContentEntry = NULL; | 735 fLastContentEntry = NULL; |
736 fMarginContentEntries.free(); | 736 fMarginContentEntries.free(); |
737 fLastMarginContentEntry = NULL; | 737 fLastMarginContentEntry = NULL; |
738 fDrawingArea = kContent_DrawingArea; | 738 fDrawingArea = kContent_DrawingArea; |
739 if (fFontGlyphUsage.get() == NULL) { | 739 if (fFontGlyphUsage.get() == NULL) { |
740 fFontGlyphUsage.reset(new SkPDFGlyphSetMap()); | 740 fFontGlyphUsage.reset(SkNEW(SkPDFGlyphSetMap)); |
741 } | 741 } |
742 } | 742 } |
743 | 743 |
744 void SkPDFDevice::cleanUp(bool clearFontUsage) { | 744 void SkPDFDevice::cleanUp(bool clearFontUsage) { |
745 fGraphicStateResources.unrefAll(); | 745 fGraphicStateResources.unrefAll(); |
746 fXObjectResources.unrefAll(); | 746 fXObjectResources.unrefAll(); |
747 fFontResources.unrefAll(); | 747 fFontResources.unrefAll(); |
748 fShaderResources.unrefAll(); | 748 fShaderResources.unrefAll(); |
749 SkSafeUnref(fAnnotations); | 749 SkSafeUnref(fAnnotations); |
750 SkSafeUnref(fResourceDict); | 750 SkSafeUnref(fResourceDict); |
(...skipping 1138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1889 // a pattern the size of the current clip. | 1889 // a pattern the size of the current clip. |
1890 SkIRect bounds = clipRegion.getBounds(); | 1890 SkIRect bounds = clipRegion.getBounds(); |
1891 | 1891 |
1892 // We need to apply the initial transform to bounds in order to get | 1892 // We need to apply the initial transform to bounds in order to get |
1893 // bounds in a consistent coordinate system. | 1893 // bounds in a consistent coordinate system. |
1894 SkRect boundsTemp; | 1894 SkRect boundsTemp; |
1895 boundsTemp.set(bounds); | 1895 boundsTemp.set(bounds); |
1896 fInitialTransform.mapRect(&boundsTemp); | 1896 fInitialTransform.mapRect(&boundsTemp); |
1897 boundsTemp.roundOut(&bounds); | 1897 boundsTemp.roundOut(&bounds); |
1898 | 1898 |
1899 pdfShader.reset(SkPDFShader::GetPDFShader(*shader, transform, bounds, | 1899 SkScalar rasterScale = |
1900 SkIntToScalar(fRasterDpi) / DPI_FOR_RASTER_SCALE_ONE)); | 1900 SkIntToScalar(fRasterDpi) / DPI_FOR_RASTER_SCALE_ONE; |
| 1901 pdfShader.reset(SkPDFShader::GetPDFShader( |
| 1902 fCanon, fRasterDpi, *shader, transform, bounds, rasterScale)); |
1901 | 1903 |
1902 if (pdfShader.get()) { | 1904 if (pdfShader.get()) { |
1903 // pdfShader has been canonicalized so we can directly compare | 1905 // pdfShader has been canonicalized so we can directly compare |
1904 // pointers. | 1906 // pointers. |
1905 int resourceIndex = fShaderResources.find(pdfShader.get()); | 1907 int resourceIndex = fShaderResources.find(pdfShader.get()); |
1906 if (resourceIndex < 0) { | 1908 if (resourceIndex < 0) { |
1907 resourceIndex = fShaderResources.count(); | 1909 resourceIndex = fShaderResources.count(); |
1908 fShaderResources.push(pdfShader.get()); | 1910 fShaderResources.push(pdfShader.get()); |
1909 pdfShader.get()->ref(); | 1911 pdfShader.get()->ref(); |
1910 } | 1912 } |
(...skipping 10 matching lines...) Expand all Loading... |
1921 SkShader::kColor_GradientType) { | 1923 SkShader::kColor_GradientType) { |
1922 entry->fColor = SkColorSetA(gradientColor, 0xFF); | 1924 entry->fColor = SkColorSetA(gradientColor, 0xFF); |
1923 color = gradientColor; | 1925 color = gradientColor; |
1924 } | 1926 } |
1925 } | 1927 } |
1926 } | 1928 } |
1927 | 1929 |
1928 SkAutoTUnref<SkPDFGraphicState> newGraphicState; | 1930 SkAutoTUnref<SkPDFGraphicState> newGraphicState; |
1929 if (color == paint.getColor()) { | 1931 if (color == paint.getColor()) { |
1930 newGraphicState.reset( | 1932 newGraphicState.reset( |
1931 SkPDFGraphicState::GetGraphicStateForPaint(paint)); | 1933 SkPDFGraphicState::GetGraphicStateForPaint(fCanon, paint)); |
1932 } else { | 1934 } else { |
1933 SkPaint newPaint = paint; | 1935 SkPaint newPaint = paint; |
1934 newPaint.setColor(color); | 1936 newPaint.setColor(color); |
1935 newGraphicState.reset( | 1937 newGraphicState.reset( |
1936 SkPDFGraphicState::GetGraphicStateForPaint(newPaint)); | 1938 SkPDFGraphicState::GetGraphicStateForPaint(fCanon, newPaint)); |
1937 } | 1939 } |
1938 int resourceIndex = addGraphicStateResource(newGraphicState.get()); | 1940 int resourceIndex = addGraphicStateResource(newGraphicState.get()); |
1939 entry->fGraphicStateIndex = resourceIndex; | 1941 entry->fGraphicStateIndex = resourceIndex; |
1940 | 1942 |
1941 if (hasText) { | 1943 if (hasText) { |
1942 entry->fTextScaleX = paint.getTextScaleX(); | 1944 entry->fTextScaleX = paint.getTextScaleX(); |
1943 entry->fTextFill = paint.getStyle(); | 1945 entry->fTextFill = paint.getStyle(); |
1944 } else { | 1946 } else { |
1945 entry->fTextScaleX = 0; | 1947 entry->fTextScaleX = 0; |
1946 } | 1948 } |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1982 SkPDFResourceDict::kFont_ResourceType, | 1984 SkPDFResourceDict::kFont_ResourceType, |
1983 fontIndex).c_str()); | 1985 fontIndex).c_str()); |
1984 contentEntry->fContent.writeText(" "); | 1986 contentEntry->fContent.writeText(" "); |
1985 SkPDFScalar::Append(paint.getTextSize(), &contentEntry->fContent); | 1987 SkPDFScalar::Append(paint.getTextSize(), &contentEntry->fContent); |
1986 contentEntry->fContent.writeText(" Tf\n"); | 1988 contentEntry->fContent.writeText(" Tf\n"); |
1987 contentEntry->fState.fFont = fFontResources[fontIndex]; | 1989 contentEntry->fState.fFont = fFontResources[fontIndex]; |
1988 } | 1990 } |
1989 } | 1991 } |
1990 | 1992 |
1991 int SkPDFDevice::getFontResourceIndex(SkTypeface* typeface, uint16_t glyphID) { | 1993 int SkPDFDevice::getFontResourceIndex(SkTypeface* typeface, uint16_t glyphID) { |
1992 SkAutoTUnref<SkPDFFont> newFont(SkPDFFont::GetFontResource(typeface, | 1994 SkAutoTUnref<SkPDFFont> newFont( |
1993 glyphID)); | 1995 SkPDFFont::GetFontResource(fCanon, typeface, glyphID)); |
1994 int resourceIndex = fFontResources.find(newFont.get()); | 1996 int resourceIndex = fFontResources.find(newFont.get()); |
1995 if (resourceIndex < 0) { | 1997 if (resourceIndex < 0) { |
1996 resourceIndex = fFontResources.count(); | 1998 resourceIndex = fFontResources.count(); |
1997 fFontResources.push(newFont.get()); | 1999 fFontResources.push(newFont.get()); |
1998 newFont.get()->ref(); | 2000 newFont.get()->ref(); |
1999 } | 2001 } |
2000 return resourceIndex; | 2002 return resourceIndex; |
2001 } | 2003 } |
2002 | 2004 |
2003 void SkPDFDevice::internalDrawBitmap(const SkMatrix& origMatrix, | 2005 void SkPDFDevice::internalDrawBitmap(const SkMatrix& origMatrix, |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2126 shape.addRect(SkRect::MakeWH(SkIntToScalar(subset.width()), | 2128 shape.addRect(SkRect::MakeWH(SkIntToScalar(subset.width()), |
2127 SkIntToScalar( subset.height()))); | 2129 SkIntToScalar( subset.height()))); |
2128 shape.transform(matrix); | 2130 shape.transform(matrix); |
2129 content.setShape(shape); | 2131 content.setShape(shape); |
2130 } | 2132 } |
2131 if (!content.needSource()) { | 2133 if (!content.needSource()) { |
2132 return; | 2134 return; |
2133 } | 2135 } |
2134 | 2136 |
2135 SkAutoTUnref<SkPDFObject> image( | 2137 SkAutoTUnref<SkPDFObject> image( |
2136 SkPDFCreateImageObject(*bitmap, subset)); | 2138 SkPDFCreateImageObject(fCanon, *bitmap, subset)); |
2137 if (!image) { | 2139 if (!image) { |
2138 return; | 2140 return; |
2139 } | 2141 } |
2140 | 2142 |
2141 SkPDFUtils::DrawFormXObject(this->addXObjectResource(image.get()), | 2143 SkPDFUtils::DrawFormXObject(this->addXObjectResource(image.get()), |
2142 &content.entry()->fContent); | 2144 &content.entry()->fContent); |
2143 } | 2145 } |
2144 | |
OLD | NEW |