Chromium Code Reviews| 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 941 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 952 noEffectPaint.setStyle(SkPaint::kFill_Style); | 952 noEffectPaint.setStyle(SkPaint::kFill_Style); |
| 953 } else { | 953 } else { |
| 954 noEffectPaint.setStyle(SkPaint::kStroke_Style); | 954 noEffectPaint.setStyle(SkPaint::kStroke_Style); |
| 955 noEffectPaint.setStrokeWidth(0); | 955 noEffectPaint.setStrokeWidth(0); |
| 956 } | 956 } |
| 957 drawPath(d, *pathPtr, noEffectPaint, NULL, true); | 957 drawPath(d, *pathPtr, noEffectPaint, NULL, true); |
| 958 return; | 958 return; |
| 959 } | 959 } |
| 960 | 960 |
| 961 #ifdef SK_PDF_USE_PATHOPS | 961 #ifdef SK_PDF_USE_PATHOPS |
| 962 if (handleInversePath(d, origPath, paint, pathIsMutable)) { | 962 if (handleInversePath(d, origPath, paint, pathIsMutable, &matrix)) { |
| 963 return; | 963 return; |
| 964 } | 964 } |
| 965 #endif | 965 #endif |
| 966 | 966 |
| 967 if (handleRectAnnotation(pathPtr->getBounds(), *d.fMatrix, paint)) { | 967 if (handleRectAnnotation(pathPtr->getBounds(), matrix, paint)) { |
| 968 return; | 968 return; |
| 969 } | 969 } |
| 970 | 970 |
| 971 ScopedContentEntry content(this, d, paint); | 971 ScopedContentEntry content(this, d.fClipStack, *d.fClip, matrix, paint); |
| 972 if (!content.entry()) { | 972 if (!content.entry()) { |
| 973 return; | 973 return; |
| 974 } | 974 } |
| 975 SkPDFUtils::EmitPath(*pathPtr, paint.getStyle(), | 975 SkPDFUtils::EmitPath(*pathPtr, paint.getStyle(), |
| 976 &content.entry()->fContent); | 976 &content.entry()->fContent); |
| 977 SkPDFUtils::PaintPath(paint.getStyle(), pathPtr->getFillType(), | 977 SkPDFUtils::PaintPath(paint.getStyle(), pathPtr->getFillType(), |
| 978 &content.entry()->fContent); | 978 &content.entry()->fContent); |
| 979 } | 979 } |
| 980 | 980 |
| 981 void SkPDFDevice::drawBitmapRect(const SkDraw& draw, const SkBitmap& bitmap, | 981 void SkPDFDevice::drawBitmapRect(const SkDraw& draw, const SkBitmap& bitmap, |
| (...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1358 | 1358 |
| 1359 #ifdef SK_PDF_USE_PATHOPS | 1359 #ifdef SK_PDF_USE_PATHOPS |
| 1360 /* Draws an inverse filled path by using Path Ops to compute the positive | 1360 /* Draws an inverse filled path by using Path Ops to compute the positive |
| 1361 * inverse using the current clip as the inverse bounds. | 1361 * inverse using the current clip as the inverse bounds. |
| 1362 * Return true if this was an inverse path and was properly handled, | 1362 * Return true if this was an inverse path and was properly handled, |
| 1363 * otherwise returns false and the normal drawing routine should continue, | 1363 * otherwise returns false and the normal drawing routine should continue, |
| 1364 * either as a (incorrect) fallback or because the path was not inverse | 1364 * either as a (incorrect) fallback or because the path was not inverse |
| 1365 * in the first place. | 1365 * in the first place. |
| 1366 */ | 1366 */ |
| 1367 bool SkPDFDevice::handleInversePath(const SkDraw& d, const SkPath& origPath, | 1367 bool SkPDFDevice::handleInversePath(const SkDraw& d, const SkPath& origPath, |
| 1368 const SkPaint& paint, bool pathIsMutable) { | 1368 const SkPaint& paint, bool pathIsMutable, |
| 1369 const SkMatrix* matrix) { | |
| 1369 if (!origPath.isInverseFillType()) { | 1370 if (!origPath.isInverseFillType()) { |
| 1370 return false; | 1371 return false; |
| 1371 } | 1372 } |
| 1372 | 1373 |
| 1373 if (d.fClip->isEmpty()) { | 1374 if (d.fClip->isEmpty()) { |
| 1374 return false; | 1375 return false; |
| 1375 } | 1376 } |
| 1376 | 1377 |
| 1377 SkPath modifiedPath; | 1378 SkPath modifiedPath; |
| 1378 SkPath* pathPtr = const_cast<SkPath*>(&origPath); | 1379 SkPath* pathPtr = const_cast<SkPath*>(&origPath); |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 1392 modifiedPath.toggleInverseFillType(); | 1393 modifiedPath.toggleInverseFillType(); |
| 1393 drawPath(d, modifiedPath, paint, NULL, true); | 1394 drawPath(d, modifiedPath, paint, NULL, true); |
| 1394 return true; | 1395 return true; |
| 1395 } | 1396 } |
| 1396 } | 1397 } |
| 1397 | 1398 |
| 1398 // Get bounds of clip in current transform space | 1399 // Get bounds of clip in current transform space |
| 1399 // (clip bounds are given in device space). | 1400 // (clip bounds are given in device space). |
| 1400 SkRect bounds; | 1401 SkRect bounds; |
| 1401 SkMatrix transformInverse; | 1402 SkMatrix transformInverse; |
| 1402 if (!d.fMatrix->invert(&transformInverse)) { | 1403 const SkMatrix matrixToUse = matrix ? *matrix : *d.fMatrix; |
| 1404 if (!matrixToUse.invert(&transformInverse)) { | |
| 1403 return false; | 1405 return false; |
| 1404 } | 1406 } |
| 1405 bounds.set(d.fClip->getBounds()); | 1407 bounds.set(d.fClip->getBounds()); |
| 1406 transformInverse.mapRect(&bounds); | 1408 transformInverse.mapRect(&bounds); |
| 1407 | 1409 |
| 1408 // Extend the bounds by the line width (plus some padding) | 1410 // Extend the bounds by the line width (plus some padding) |
| 1409 // so the edge doesn't cause a visible stroke. | 1411 // so the edge doesn't cause a visible stroke. |
| 1410 bounds.outset(paint.getStrokeWidth() + SK_Scalar1, | 1412 bounds.outset(paint.getStrokeWidth() + SK_Scalar1, |
| 1411 paint.getStrokeWidth() + SK_Scalar1); | 1413 paint.getStrokeWidth() + SK_Scalar1); |
| 1412 | 1414 |
| 1413 if (!calculate_inverse_path(bounds, *pathPtr, &modifiedPath)) { | 1415 if (!calculate_inverse_path(bounds, *pathPtr, &modifiedPath)) { |
| 1414 return false; | 1416 return false; |
| 1415 } | 1417 } |
| 1416 | 1418 |
| 1417 drawPath(d, modifiedPath, noInversePaint, NULL, true); | 1419 drawPath(d, modifiedPath, noInversePaint, matrix, true); |
|
vandebo (ex-Chrome)
2013/09/20 18:57:56
This isn't the prePathMatrix, this is the total ma
| |
| 1418 return true; | 1420 return true; |
| 1419 } | 1421 } |
| 1420 #endif | 1422 #endif |
| 1421 | 1423 |
| 1422 bool SkPDFDevice::handleRectAnnotation(const SkRect& r, const SkMatrix& matrix, | 1424 bool SkPDFDevice::handleRectAnnotation(const SkRect& r, const SkMatrix& matrix, |
| 1423 const SkPaint& p) { | 1425 const SkPaint& p) { |
| 1424 SkAnnotation* annotationInfo = p.getAnnotation(); | 1426 SkAnnotation* annotationInfo = p.getAnnotation(); |
| 1425 if (!annotationInfo) { | 1427 if (!annotationInfo) { |
| 1426 return false; | 1428 return false; |
| 1427 } | 1429 } |
| (...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1938 } | 1940 } |
| 1939 | 1941 |
| 1940 bool SkPDFDevice::onReadPixels(const SkBitmap& bitmap, int x, int y, | 1942 bool SkPDFDevice::onReadPixels(const SkBitmap& bitmap, int x, int y, |
| 1941 SkCanvas::Config8888) { | 1943 SkCanvas::Config8888) { |
| 1942 return false; | 1944 return false; |
| 1943 } | 1945 } |
| 1944 | 1946 |
| 1945 bool SkPDFDevice::allowImageFilter(SkImageFilter*) { | 1947 bool SkPDFDevice::allowImageFilter(SkImageFilter*) { |
| 1946 return false; | 1948 return false; |
| 1947 } | 1949 } |
| OLD | NEW |