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

Unified Diff: src/pdf/SkPDFDevice.cpp

Issue 1761793003: Revert of move annotations to canvas virtual (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/pdf/SkPDFDevice.h ('k') | src/utils/SkDumpCanvas.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/pdf/SkPDFDevice.cpp
diff --git a/src/pdf/SkPDFDevice.cpp b/src/pdf/SkPDFDevice.cpp
index f473e0f9813010dc8fe88245a3b689782d5bf62d..315c84317d72c42abc3da60b7e388d463b3a9c22 100644
--- a/src/pdf/SkPDFDevice.cpp
+++ b/src/pdf/SkPDFDevice.cpp
@@ -7,7 +7,7 @@
#include "SkPDFDevice.h"
-#include "SkAnnotationKeys.h"
+#include "SkAnnotation.h"
#include "SkColor.h"
#include "SkColorFilter.h"
#include "SkClipStack.h"
@@ -757,17 +757,6 @@
}
}
-void SkPDFDevice::drawAnnotation(const SkDraw& d, const SkRect& rect, const char key[],
- SkData* value) {
- if (0 == rect.width() && 0 == rect.height()) {
- handlePointAnnotation({ rect.x(), rect.y() }, *d.fMatrix, key, value);
- } else {
- SkPath path;
- path.addRect(rect);
- handlePathAnnotation(path, d, key, value);
- }
-}
-
void SkPDFDevice::drawPaint(const SkDraw& d, const SkPaint& paint) {
SkPaint newPaint = paint;
replace_srcmode_on_opaque_paint(&newPaint);
@@ -805,6 +794,12 @@
if (count == 0) {
return;
+ }
+
+ if (SkAnnotation* annotation = passedPaint.getAnnotation()) {
+ if (handlePointAnnotation(points, count, *d.fMatrix, annotation)) {
+ return;
+ }
}
// SkDraw::drawPoints converts to multiple calls to fDevice->drawPath.
@@ -944,6 +939,14 @@
return;
}
+ if (SkAnnotation* annotation = paint.getAnnotation()) {
+ SkPath path;
+ path.addRect(rect);
+ if (handlePathAnnotation(path, d, annotation)) {
+ return;
+ }
+ }
+
ScopedContentEntry content(this, d, paint);
if (!content.entry()) {
return;
@@ -1020,6 +1023,12 @@
if (handleInversePath(d, origPath, paint, pathIsMutable, prePathMatrix)) {
return;
+ }
+
+ if (SkAnnotation* annotation = paint.getAnnotation()) {
+ if (handlePathAnnotation(*pathPtr, d, annotation)) {
+ return;
+ }
}
ScopedContentEntry content(this, d.fClipStack, *d.fClip, matrix, paint);
@@ -1675,26 +1684,26 @@
return true;
}
-void SkPDFDevice::handlePointAnnotation(const SkPoint& point,
+bool SkPDFDevice::handlePointAnnotation(const SkPoint* points, size_t count,
const SkMatrix& matrix,
- const char key[], SkData* value) {
- if (!value) {
- return;
- }
-
- if (!strcmp(SkAnnotationKeys::Define_Named_Dest_Key(), key)) {
- SkPoint transformedPoint;
- matrix.mapXY(point.x(), point.y(), &transformedPoint);
- fNamedDestinations.push(new NamedDestination(value, transformedPoint));
- }
-}
-
-void SkPDFDevice::handlePathAnnotation(const SkPath& path,
+ SkAnnotation* annotationInfo) {
+ SkData* nameData = annotationInfo->find(
+ SkAnnotationKeys::Define_Named_Dest_Key());
+ if (nameData) {
+ for (size_t i = 0; i < count; i++) {
+ SkPoint transformedPoint;
+ matrix.mapXY(points[i].x(), points[i].y(), &transformedPoint);
+ fNamedDestinations.push(new NamedDestination(nameData, transformedPoint));
+ }
+ return true;
+ }
+ return false;
+}
+
+bool SkPDFDevice::handlePathAnnotation(const SkPath& path,
const SkDraw& d,
- const char key[], SkData* value) {
- if (!value) {
- return;
- }
+ SkAnnotation* annotation) {
+ SkASSERT(annotation);
SkPath transformedPath = path;
transformedPath.transform(*d.fMatrix);
@@ -1703,15 +1712,24 @@
false);
SkRect transformedRect = SkRect::Make(clip.getBounds());
- if (!strcmp(SkAnnotationKeys::URL_Key(), key)) {
+ SkData* urlData = annotation->find(SkAnnotationKeys::URL_Key());
+ if (urlData) {
if (!transformedRect.isEmpty()) {
- fLinkToURLs.push(new RectWithData(transformedRect, value));
- }
- } else if (!strcmp(SkAnnotationKeys::Link_Named_Dest_Key(), key)) {
+ fLinkToURLs.push(new RectWithData(transformedRect, urlData));
+ }
+ return true;
+ }
+
+ SkData* linkToDestination =
+ annotation->find(SkAnnotationKeys::Link_Named_Dest_Key());
+ if (linkToDestination) {
if (!transformedRect.isEmpty()) {
- fLinkToDestinations.push(new RectWithData(transformedRect, value));
- }
- }
+ fLinkToDestinations.push(new RectWithData(transformedRect, linkToDestination));
+ }
+ return true;
+ }
+
+ return false;
}
void SkPDFDevice::appendAnnotations(SkPDFArray* array) const {
« no previous file with comments | « src/pdf/SkPDFDevice.h ('k') | src/utils/SkDumpCanvas.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698