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

Side by Side Diff: src/pdf/SkPDFDevice.cpp

Issue 1925693002: remove 'deprecated' region from SkDraw (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: update dox Created 4 years, 7 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
« no previous file with comments | « src/pdf/SkPDFCanvas.cpp ('k') | src/utils/SkCanvasStateUtils.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 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 "SkAnnotationKeys.h" 10 #include "SkAnnotationKeys.h"
(...skipping 549 matching lines...) Expand 10 before | Expand all | Expand 10 after
560 // A helper class to automatically finish a ContentEntry at the end of a 560 // A helper class to automatically finish a ContentEntry at the end of a
561 // drawing method and maintain the state needed between set up and finish. 561 // drawing method and maintain the state needed between set up and finish.
562 class ScopedContentEntry { 562 class ScopedContentEntry {
563 public: 563 public:
564 ScopedContentEntry(SkPDFDevice* device, const SkDraw& draw, 564 ScopedContentEntry(SkPDFDevice* device, const SkDraw& draw,
565 const SkPaint& paint, bool hasText = false) 565 const SkPaint& paint, bool hasText = false)
566 : fDevice(device), 566 : fDevice(device),
567 fContentEntry(nullptr), 567 fContentEntry(nullptr),
568 fXfermode(SkXfermode::kSrcOver_Mode), 568 fXfermode(SkXfermode::kSrcOver_Mode),
569 fDstFormXObject(nullptr) { 569 fDstFormXObject(nullptr) {
570 init(draw.fClipStack, *draw.fClip, *draw.fMatrix, paint, hasText); 570 init(draw.fClipStack, draw.fRC->bwRgn(), *draw.fMatrix, paint, hasText);
571 } 571 }
572 ScopedContentEntry(SkPDFDevice* device, const SkClipStack* clipStack, 572 ScopedContentEntry(SkPDFDevice* device, const SkClipStack* clipStack,
573 const SkRegion& clipRegion, const SkMatrix& matrix, 573 const SkRegion& clipRegion, const SkMatrix& matrix,
574 const SkPaint& paint, bool hasText = false) 574 const SkPaint& paint, bool hasText = false)
575 : fDevice(device), 575 : fDevice(device),
576 fContentEntry(nullptr), 576 fContentEntry(nullptr),
577 fXfermode(SkXfermode::kSrcOver_Mode), 577 fXfermode(SkXfermode::kSrcOver_Mode),
578 fDstFormXObject(nullptr) { 578 fDstFormXObject(nullptr) {
579 init(clipStack, clipRegion, matrix, paint, hasText); 579 init(clipStack, clipRegion, matrix, paint, hasText);
580 } 580 }
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
745 replace_srcmode_on_opaque_paint(&passedPaint); 745 replace_srcmode_on_opaque_paint(&passedPaint);
746 746
747 if (count == 0) { 747 if (count == 0) {
748 return; 748 return;
749 } 749 }
750 750
751 // SkDraw::drawPoints converts to multiple calls to fDevice->drawPath. 751 // SkDraw::drawPoints converts to multiple calls to fDevice->drawPath.
752 // We only use this when there's a path effect because of the overhead 752 // We only use this when there's a path effect because of the overhead
753 // of multiple calls to setUpContentEntry it causes. 753 // of multiple calls to setUpContentEntry it causes.
754 if (passedPaint.getPathEffect()) { 754 if (passedPaint.getPathEffect()) {
755 if (d.fClip->isEmpty()) { 755 if (d.fRC->isEmpty()) {
756 return; 756 return;
757 } 757 }
758 SkDraw pointDraw(d); 758 SkDraw pointDraw(d);
759 pointDraw.fDevice = this; 759 pointDraw.fDevice = this;
760 pointDraw.drawPoints(mode, count, points, passedPaint, true); 760 pointDraw.drawPoints(mode, count, points, passedPaint, true);
761 return; 761 return;
762 } 762 }
763 763
764 const SkPaint* paint = &passedPaint; 764 const SkPaint* paint = &passedPaint;
765 SkPaint modifiedPaint; 765 SkPaint modifiedPaint;
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
869 869
870 void SkPDFDevice::drawRect(const SkDraw& d, 870 void SkPDFDevice::drawRect(const SkDraw& d,
871 const SkRect& rect, 871 const SkRect& rect,
872 const SkPaint& srcPaint) { 872 const SkPaint& srcPaint) {
873 SkPaint paint = srcPaint; 873 SkPaint paint = srcPaint;
874 replace_srcmode_on_opaque_paint(&paint); 874 replace_srcmode_on_opaque_paint(&paint);
875 SkRect r = rect; 875 SkRect r = rect;
876 r.sort(); 876 r.sort();
877 877
878 if (paint.getPathEffect()) { 878 if (paint.getPathEffect()) {
879 if (d.fClip->isEmpty()) { 879 if (d.fRC->isEmpty()) {
880 return; 880 return;
881 } 881 }
882 SkPath path; 882 SkPath path;
883 path.addRect(r); 883 path.addRect(r);
884 drawPath(d, path, paint, nullptr, true); 884 drawPath(d, path, paint, nullptr, true);
885 return; 885 return;
886 } 886 }
887 887
888 ScopedContentEntry content(this, d, paint); 888 ScopedContentEntry content(this, d, paint);
889 if (!content.entry()) { 889 if (!content.entry()) {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
931 pathPtr = &modifiedPath; 931 pathPtr = &modifiedPath;
932 pathIsMutable = true; 932 pathIsMutable = true;
933 } 933 }
934 origPath.transform(*prePathMatrix, pathPtr); 934 origPath.transform(*prePathMatrix, pathPtr);
935 } else { 935 } else {
936 matrix.preConcat(*prePathMatrix); 936 matrix.preConcat(*prePathMatrix);
937 } 937 }
938 } 938 }
939 939
940 if (paint.getPathEffect()) { 940 if (paint.getPathEffect()) {
941 if (d.fClip->isEmpty()) { 941 if (d.fRC->isEmpty()) {
942 return; 942 return;
943 } 943 }
944 if (!pathIsMutable) { 944 if (!pathIsMutable) {
945 pathPtr = &modifiedPath; 945 pathPtr = &modifiedPath;
946 pathIsMutable = true; 946 pathIsMutable = true;
947 } 947 }
948 bool fill = paint.getFillPath(origPath, pathPtr); 948 bool fill = paint.getFillPath(origPath, pathPtr);
949 949
950 SkPaint noEffectPaint(paint); 950 SkPaint noEffectPaint(paint);
951 noEffectPaint.setPathEffect(nullptr); 951 noEffectPaint.setPathEffect(nullptr);
952 if (fill) { 952 if (fill) {
953 noEffectPaint.setStyle(SkPaint::kFill_Style); 953 noEffectPaint.setStyle(SkPaint::kFill_Style);
954 } else { 954 } else {
955 noEffectPaint.setStyle(SkPaint::kStroke_Style); 955 noEffectPaint.setStyle(SkPaint::kStroke_Style);
956 noEffectPaint.setStrokeWidth(0); 956 noEffectPaint.setStrokeWidth(0);
957 } 957 }
958 drawPath(d, *pathPtr, noEffectPaint, nullptr, true); 958 drawPath(d, *pathPtr, noEffectPaint, nullptr, true);
959 return; 959 return;
960 } 960 }
961 961
962 if (handleInversePath(d, origPath, paint, pathIsMutable, prePathMatrix)) { 962 if (handleInversePath(d, origPath, paint, pathIsMutable, prePathMatrix)) {
963 return; 963 return;
964 } 964 }
965 965
966 ScopedContentEntry content(this, d.fClipStack, *d.fClip, matrix, paint); 966 ScopedContentEntry content(this, d.fClipStack, d.fRC->bwRgn(), matrix, paint );
967 if (!content.entry()) { 967 if (!content.entry()) {
968 return; 968 return;
969 } 969 }
970 bool consumeDegeratePathSegments = 970 bool consumeDegeratePathSegments =
971 paint.getStyle() == SkPaint::kFill_Style || 971 paint.getStyle() == SkPaint::kFill_Style ||
972 (paint.getStrokeCap() != SkPaint::kRound_Cap && 972 (paint.getStrokeCap() != SkPaint::kRound_Cap &&
973 paint.getStrokeCap() != SkPaint::kSquare_Cap); 973 paint.getStrokeCap() != SkPaint::kSquare_Cap);
974 SkPDFUtils::EmitPath(*pathPtr, paint.getStyle(), 974 SkPDFUtils::EmitPath(*pathPtr, paint.getStyle(),
975 consumeDegeratePathSegments, 975 consumeDegeratePathSegments,
976 &content.entry()->fContent); 976 &content.entry()->fContent);
(...skipping 12 matching lines...) Expand all
989 989
990 void SkPDFDevice::drawBitmap(const SkDraw& d, 990 void SkPDFDevice::drawBitmap(const SkDraw& d,
991 const SkBitmap& bitmap, 991 const SkBitmap& bitmap,
992 const SkMatrix& matrix, 992 const SkMatrix& matrix,
993 const SkPaint& srcPaint) { 993 const SkPaint& srcPaint) {
994 SkPaint paint = srcPaint; 994 SkPaint paint = srcPaint;
995 if (bitmap.isOpaque()) { 995 if (bitmap.isOpaque()) {
996 replace_srcmode_on_opaque_paint(&paint); 996 replace_srcmode_on_opaque_paint(&paint);
997 } 997 }
998 998
999 if (d.fClip->isEmpty()) { 999 if (d.fRC->isEmpty()) {
1000 return; 1000 return;
1001 } 1001 }
1002 1002
1003 SkMatrix transform = matrix; 1003 SkMatrix transform = matrix;
1004 transform.postConcat(*d.fMatrix); 1004 transform.postConcat(*d.fMatrix);
1005 SkImageBitmap imageBitmap(bitmap); 1005 SkImageBitmap imageBitmap(bitmap);
1006 this->internalDrawImage( 1006 this->internalDrawImage(
1007 transform, d.fClipStack, *d.fClip, imageBitmap, paint); 1007 transform, d.fClipStack, d.fRC->bwRgn(), imageBitmap, paint);
1008 } 1008 }
1009 1009
1010 void SkPDFDevice::drawSprite(const SkDraw& d, 1010 void SkPDFDevice::drawSprite(const SkDraw& d,
1011 const SkBitmap& bitmap, 1011 const SkBitmap& bitmap,
1012 int x, 1012 int x,
1013 int y, 1013 int y,
1014 const SkPaint& srcPaint) { 1014 const SkPaint& srcPaint) {
1015 SkPaint paint = srcPaint; 1015 SkPaint paint = srcPaint;
1016 if (bitmap.isOpaque()) { 1016 if (bitmap.isOpaque()) {
1017 replace_srcmode_on_opaque_paint(&paint); 1017 replace_srcmode_on_opaque_paint(&paint);
1018 } 1018 }
1019 1019
1020 if (d.fClip->isEmpty()) { 1020 if (d.fRC->isEmpty()) {
1021 return; 1021 return;
1022 } 1022 }
1023 1023
1024 SkMatrix matrix; 1024 SkMatrix matrix;
1025 matrix.setTranslate(SkIntToScalar(x), SkIntToScalar(y)); 1025 matrix.setTranslate(SkIntToScalar(x), SkIntToScalar(y));
1026 SkImageBitmap imageBitmap(bitmap); 1026 SkImageBitmap imageBitmap(bitmap);
1027 this->internalDrawImage( 1027 this->internalDrawImage(
1028 matrix, d.fClipStack, *d.fClip, imageBitmap, paint); 1028 matrix, d.fClipStack, d.fRC->bwRgn(), imageBitmap, paint);
1029 } 1029 }
1030 1030
1031 void SkPDFDevice::drawImage(const SkDraw& draw, 1031 void SkPDFDevice::drawImage(const SkDraw& draw,
1032 const SkImage* image, 1032 const SkImage* image,
1033 SkScalar x, 1033 SkScalar x,
1034 SkScalar y, 1034 SkScalar y,
1035 const SkPaint& srcPaint) { 1035 const SkPaint& srcPaint) {
1036 SkPaint paint = srcPaint; 1036 SkPaint paint = srcPaint;
1037 if (!image) { 1037 if (!image) {
1038 return; 1038 return;
1039 } 1039 }
1040 if (image->isOpaque()) { 1040 if (image->isOpaque()) {
1041 replace_srcmode_on_opaque_paint(&paint); 1041 replace_srcmode_on_opaque_paint(&paint);
1042 } 1042 }
1043 if (draw.fClip->isEmpty()) { 1043 if (draw.fRC->isEmpty()) {
1044 return; 1044 return;
1045 } 1045 }
1046 SkMatrix transform = SkMatrix::MakeTrans(x, y); 1046 SkMatrix transform = SkMatrix::MakeTrans(x, y);
1047 transform.postConcat(*draw.fMatrix); 1047 transform.postConcat(*draw.fMatrix);
1048 SkImageBitmap imageBitmap(const_cast<SkImage*>(image)); 1048 SkImageBitmap imageBitmap(const_cast<SkImage*>(image));
1049 this->internalDrawImage( 1049 this->internalDrawImage(
1050 transform, draw.fClipStack, *draw.fClip, imageBitmap, paint); 1050 transform, draw.fClipStack, draw.fRC->bwRgn(), imageBitmap, paint);
1051 } 1051 }
1052 1052
1053 void SkPDFDevice::drawImageRect(const SkDraw& draw, 1053 void SkPDFDevice::drawImageRect(const SkDraw& draw,
1054 const SkImage* image, 1054 const SkImage* image,
1055 const SkRect* src, 1055 const SkRect* src,
1056 const SkRect& dst, 1056 const SkRect& dst,
1057 const SkPaint& srcPaint, 1057 const SkPaint& srcPaint,
1058 SkCanvas::SrcRectConstraint constraint) { 1058 SkCanvas::SrcRectConstraint constraint) {
1059 SkASSERT(false); 1059 SkASSERT(false);
1060 } 1060 }
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
1270 content.entry()->fContent.writeText(" Tj\n"); 1270 content.entry()->fContent.writeText(" Tj\n");
1271 } 1271 }
1272 content.entry()->fContent.writeText("ET\n"); 1272 content.entry()->fContent.writeText("ET\n");
1273 } 1273 }
1274 1274
1275 void SkPDFDevice::drawVertices(const SkDraw& d, SkCanvas::VertexMode, 1275 void SkPDFDevice::drawVertices(const SkDraw& d, SkCanvas::VertexMode,
1276 int vertexCount, const SkPoint verts[], 1276 int vertexCount, const SkPoint verts[],
1277 const SkPoint texs[], const SkColor colors[], 1277 const SkPoint texs[], const SkColor colors[],
1278 SkXfermode* xmode, const uint16_t indices[], 1278 SkXfermode* xmode, const uint16_t indices[],
1279 int indexCount, const SkPaint& paint) { 1279 int indexCount, const SkPaint& paint) {
1280 if (d.fClip->isEmpty()) { 1280 if (d.fRC->isEmpty()) {
1281 return; 1281 return;
1282 } 1282 }
1283 // TODO: implement drawVertices 1283 // TODO: implement drawVertices
1284 } 1284 }
1285 1285
1286 void SkPDFDevice::drawDevice(const SkDraw& d, SkBaseDevice* device, 1286 void SkPDFDevice::drawDevice(const SkDraw& d, SkBaseDevice* device,
1287 int x, int y, const SkPaint& paint) { 1287 int x, int y, const SkPaint& paint) {
1288 // our onCreateCompatibleDevice() always creates SkPDFDevice subclasses. 1288 // our onCreateCompatibleDevice() always creates SkPDFDevice subclasses.
1289 SkPDFDevice* pdfDevice = static_cast<SkPDFDevice*>(device); 1289 SkPDFDevice* pdfDevice = static_cast<SkPDFDevice*>(device);
1290 1290
(...skipping 11 matching lines...) Expand all
1302 SkPoint p = d.point + SkPoint::Make(scalarX, scalarY); 1302 SkPoint p = d.point + SkPoint::Make(scalarX, scalarY);
1303 fNamedDestinations.emplace_back(d.nameData.get(), p); 1303 fNamedDestinations.emplace_back(d.nameData.get(), p);
1304 } 1304 }
1305 1305
1306 if (pdfDevice->isContentEmpty()) { 1306 if (pdfDevice->isContentEmpty()) {
1307 return; 1307 return;
1308 } 1308 }
1309 1309
1310 SkMatrix matrix; 1310 SkMatrix matrix;
1311 matrix.setTranslate(SkIntToScalar(x), SkIntToScalar(y)); 1311 matrix.setTranslate(SkIntToScalar(x), SkIntToScalar(y));
1312 ScopedContentEntry content(this, d.fClipStack, *d.fClip, matrix, paint); 1312 ScopedContentEntry content(this, d.fClipStack, d.fRC->bwRgn(), matrix, paint );
1313 if (!content.entry()) { 1313 if (!content.entry()) {
1314 return; 1314 return;
1315 } 1315 }
1316 if (content.needShape()) { 1316 if (content.needShape()) {
1317 SkPath shape; 1317 SkPath shape;
1318 shape.addRect(SkRect::MakeXYWH(SkIntToScalar(x), SkIntToScalar(y), 1318 shape.addRect(SkRect::MakeXYWH(SkIntToScalar(x), SkIntToScalar(y),
1319 SkIntToScalar(device->width()), 1319 SkIntToScalar(device->width()),
1320 SkIntToScalar(device->height()))); 1320 SkIntToScalar(device->height())));
1321 content.setShape(shape); 1321 content.setShape(shape);
1322 } 1322 }
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
1427 * either as a (incorrect) fallback or because the path was not inverse 1427 * either as a (incorrect) fallback or because the path was not inverse
1428 * in the first place. 1428 * in the first place.
1429 */ 1429 */
1430 bool SkPDFDevice::handleInversePath(const SkDraw& d, const SkPath& origPath, 1430 bool SkPDFDevice::handleInversePath(const SkDraw& d, const SkPath& origPath,
1431 const SkPaint& paint, bool pathIsMutable, 1431 const SkPaint& paint, bool pathIsMutable,
1432 const SkMatrix* prePathMatrix) { 1432 const SkMatrix* prePathMatrix) {
1433 if (!origPath.isInverseFillType()) { 1433 if (!origPath.isInverseFillType()) {
1434 return false; 1434 return false;
1435 } 1435 }
1436 1436
1437 if (d.fClip->isEmpty()) { 1437 if (d.fRC->isEmpty()) {
1438 return false; 1438 return false;
1439 } 1439 }
1440 1440
1441 SkPath modifiedPath; 1441 SkPath modifiedPath;
1442 SkPath* pathPtr = const_cast<SkPath*>(&origPath); 1442 SkPath* pathPtr = const_cast<SkPath*>(&origPath);
1443 SkPaint noInversePaint(paint); 1443 SkPaint noInversePaint(paint);
1444 1444
1445 // Merge stroking operations into final path. 1445 // Merge stroking operations into final path.
1446 if (SkPaint::kStroke_Style == paint.getStyle() || 1446 if (SkPaint::kStroke_Style == paint.getStyle() ||
1447 SkPaint::kStrokeAndFill_Style == paint.getStyle()) { 1447 SkPaint::kStrokeAndFill_Style == paint.getStyle()) {
(...skipping 15 matching lines...) Expand all
1463 // (clip bounds are given in device space). 1463 // (clip bounds are given in device space).
1464 SkRect bounds; 1464 SkRect bounds;
1465 SkMatrix transformInverse; 1465 SkMatrix transformInverse;
1466 SkMatrix totalMatrix = *d.fMatrix; 1466 SkMatrix totalMatrix = *d.fMatrix;
1467 if (prePathMatrix) { 1467 if (prePathMatrix) {
1468 totalMatrix.preConcat(*prePathMatrix); 1468 totalMatrix.preConcat(*prePathMatrix);
1469 } 1469 }
1470 if (!totalMatrix.invert(&transformInverse)) { 1470 if (!totalMatrix.invert(&transformInverse)) {
1471 return false; 1471 return false;
1472 } 1472 }
1473 bounds.set(d.fClip->getBounds()); 1473 bounds.set(d.fRC->getBounds());
1474 transformInverse.mapRect(&bounds); 1474 transformInverse.mapRect(&bounds);
1475 1475
1476 // Extend the bounds by the line width (plus some padding) 1476 // Extend the bounds by the line width (plus some padding)
1477 // so the edge doesn't cause a visible stroke. 1477 // so the edge doesn't cause a visible stroke.
1478 bounds.outset(paint.getStrokeWidth() + SK_Scalar1, 1478 bounds.outset(paint.getStrokeWidth() + SK_Scalar1,
1479 paint.getStrokeWidth() + SK_Scalar1); 1479 paint.getStrokeWidth() + SK_Scalar1);
1480 1480
1481 if (!calculate_inverse_path(bounds, *pathPtr, &modifiedPath)) { 1481 if (!calculate_inverse_path(bounds, *pathPtr, &modifiedPath)) {
1482 return false; 1482 return false;
1483 } 1483 }
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
1751 // the non-transparent parts of the device and the outlines (shape) of 1751 // the non-transparent parts of the device and the outlines (shape) of
1752 // all images and devices drawn. 1752 // all images and devices drawn.
1753 drawFormXObjectWithMask(addXObjectResource(srcFormXObject.get()), dst, 1753 drawFormXObjectWithMask(addXObjectResource(srcFormXObject.get()), dst,
1754 &fExistingClipStack, fExistingClipRegion, 1754 &fExistingClipStack, fExistingClipRegion,
1755 SkXfermode::kSrcOver_Mode, true); 1755 SkXfermode::kSrcOver_Mode, true);
1756 } else { 1756 } else {
1757 sk_sp<SkPDFFormXObject> dstMaskStorage; 1757 sk_sp<SkPDFFormXObject> dstMaskStorage;
1758 SkPDFFormXObject* dstMask = srcFormXObject.get(); 1758 SkPDFFormXObject* dstMask = srcFormXObject.get();
1759 if (shape != nullptr) { 1759 if (shape != nullptr) {
1760 // Draw shape into a form-xobject. 1760 // Draw shape into a form-xobject.
1761 SkRasterClip rc(clipRegion);
1761 SkDraw d; 1762 SkDraw d;
1762 d.fMatrix = &identity; 1763 d.fMatrix = &identity;
1763 d.fClip = &clipRegion; 1764 d.fRC = &rc;
1764 d.fClipStack = &clipStack; 1765 d.fClipStack = &clipStack;
1765 SkPaint filledPaint; 1766 SkPaint filledPaint;
1766 filledPaint.setColor(SK_ColorBLACK); 1767 filledPaint.setColor(SK_ColorBLACK);
1767 filledPaint.setStyle(SkPaint::kFill_Style); 1768 filledPaint.setStyle(SkPaint::kFill_Style);
1768 this->drawPath(d, *shape, filledPaint, nullptr, true); 1769 this->drawPath(d, *shape, filledPaint, nullptr, true);
1769 1770
1770 dstMaskStorage.reset(createFormXObjectFromDevice()); 1771 dstMaskStorage.reset(createFormXObjectFromDevice());
1771 dstMask = dstMaskStorage.get(); 1772 dstMask = dstMaskStorage.get();
1772 } 1773 }
1773 drawFormXObjectWithMask(addXObjectResource(dst), dstMask, 1774 drawFormXObjectWithMask(addXObjectResource(dst), dstMask,
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
2137 if (!pdfimage) { 2138 if (!pdfimage) {
2138 return; 2139 return;
2139 } 2140 }
2140 fDocument->serialize(pdfimage); // serialize images early. 2141 fDocument->serialize(pdfimage); // serialize images early.
2141 fDocument->canon()->addPDFBitmap(key, pdfimage); 2142 fDocument->canon()->addPDFBitmap(key, pdfimage);
2142 } 2143 }
2143 // TODO(halcanary): addXObjectResource() should take a sk_sp<SkPDFObject> 2144 // TODO(halcanary): addXObjectResource() should take a sk_sp<SkPDFObject>
2144 SkPDFUtils::DrawFormXObject(this->addXObjectResource(pdfimage.get()), 2145 SkPDFUtils::DrawFormXObject(this->addXObjectResource(pdfimage.get()),
2145 &content.entry()->fContent); 2146 &content.entry()->fContent);
2146 } 2147 }
OLDNEW
« no previous file with comments | « src/pdf/SkPDFCanvas.cpp ('k') | src/utils/SkCanvasStateUtils.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698