SkPDF: roll back 53b1c09 and 05b48e2

See:
	https://crrev.com/1552263003
	https://crrev.com/1438503002

	BUG=skia:257
	BUG=skia:734
  BUG=577794

Review URL: https://codereview.chromium.org/1645803003
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1752913002
NOTREECHECKS=true
NOTRY=true
NOPRESUBMIT=true
TBR=tomhudson@google.com

Review URL: https://codereview.chromium.org/1752913002
diff --git a/src/pdf/SkPDFDevice.cpp b/src/pdf/SkPDFDevice.cpp
index 83408a5..17092bd 100644
--- a/src/pdf/SkPDFDevice.cpp
+++ b/src/pdf/SkPDFDevice.cpp
@@ -41,20 +41,6 @@
 
 // Utility functions
 
-static bool excessive_translation(const SkMatrix& m) {
-    const SkScalar kExcessiveTranslation = 8192.0f;
-    return SkScalarAbs(m.getTranslateX()) > kExcessiveTranslation
-        || SkScalarAbs(m.getTranslateY()) > kExcessiveTranslation;
-}
-
-static SkMatrix untranslate(const SkMatrix& matrix, SkScalar x, SkScalar y) {
-    // https://bug.skia.org/257 If the translation is too large,
-    // PDF can't exactly represent the float values as numbers.
-    SkMatrix result(matrix);
-    result.preTranslate(x, y);
-    return result;
-}
-
 // If the paint will definitely draw opaquely, replace kSrc_Mode with
 // kSrcOver_Mode.  http://crbug.com/473572
 static void replace_srcmode_on_opaque_paint(SkPaint* paint) {
@@ -798,7 +784,7 @@
                           &contentEntry->fContent);
 }
 
-void SkPDFDevice::drawPoints(const SkDraw& srcDraw,
+void SkPDFDevice::drawPoints(const SkDraw& d,
                              SkCanvas::PointMode mode,
                              size_t count,
                              const SkPoint* points,
@@ -811,21 +797,10 @@
     }
 
     if (SkAnnotation* annotation = passedPaint.getAnnotation()) {
-        if (handlePointAnnotation(points, count, *srcDraw.fMatrix, annotation)) {
+        if (handlePointAnnotation(points, count, *d.fMatrix, annotation)) {
             return;
         }
     }
-    SkMatrix newMatrix;
-    SkDraw d(srcDraw);
-    SkTArray<SkPoint> pointsCopy;
-    if (excessive_translation(*d.fMatrix)) {
-        newMatrix = untranslate(*d.fMatrix, points[0].x(), points[0].y());
-        d.fMatrix = &newMatrix;
-        pointsCopy.reset(points, SkToInt(count));
-        SkPoint::Offset(&pointsCopy[0], SkToInt(count),
-                        -points[0].x(), -points[0].y());
-        points = &pointsCopy[0];
-    }
 
     // SkDraw::drawPoints converts to multiple calls to fDevice->drawPath.
     // We only use this when there's a path effect because of the overhead
@@ -946,7 +921,7 @@
     return annotation.detach();
 }
 
-void SkPDFDevice::drawRect(const SkDraw& srcDraw,
+void SkPDFDevice::drawRect(const SkDraw& d,
                            const SkRect& rect,
                            const SkPaint& srcPaint) {
     SkPaint paint = srcPaint;
@@ -954,14 +929,6 @@
     SkRect r = rect;
     r.sort();
 
-    SkMatrix newMatrix;
-    SkDraw d(srcDraw);
-    if (excessive_translation(*d.fMatrix)) {
-        newMatrix = untranslate(*d.fMatrix, r.x(), r.y());
-        d.fMatrix = &newMatrix;
-        r.offsetTo(0, 0);
-    }
-
     if (paint.getPathEffect()) {
         if (d.fClip->isEmpty()) {
             return;
@@ -1009,40 +976,24 @@
     this->drawPath(draw, path, paint, nullptr, true);
 }
 
-void SkPDFDevice::drawPath(const SkDraw& srcDraw,
+void SkPDFDevice::drawPath(const SkDraw& d,
                            const SkPath& origPath,
                            const SkPaint& srcPaint,
                            const SkMatrix* prePathMatrix,
                            bool pathIsMutable) {
-    SkMatrix newMatrix;
-    SkDraw d(srcDraw);
-    SkPath modifiedPath;
-    SkPath* pathPtr = const_cast<SkPath*>(&origPath);
-    if (excessive_translation(*d.fMatrix)) {
-        SkPoint firstPt;
-        if (origPath.getPoints(&firstPt, 1) > 0) {
-            newMatrix = untranslate(*d.fMatrix, firstPt.x(), firstPt.y());
-            d.fMatrix = &newMatrix;
-            modifiedPath = origPath;
-            modifiedPath.offset(-firstPt.x(), -firstPt.y());
-            pathPtr = &modifiedPath;  // NOTE: shader behavior will be off.
-            pathIsMutable = true;
-        }
-    }
-
     SkPaint paint = srcPaint;
     replace_srcmode_on_opaque_paint(&paint);
+    SkPath modifiedPath;
+    SkPath* pathPtr = const_cast<SkPath*>(&origPath);
 
     SkMatrix matrix = *d.fMatrix;
     if (prePathMatrix) {
         if (paint.getPathEffect() || paint.getStyle() != SkPaint::kFill_Style) {
-            if (pathIsMutable) {
-                pathPtr->transform(*prePathMatrix);
-            } else {
-                pathPtr->transform(*prePathMatrix, &modifiedPath);
+            if (!pathIsMutable) {
                 pathPtr = &modifiedPath;
                 pathIsMutable = true;
             }
+            origPath.transform(*prePathMatrix, pathPtr);
         } else {
             matrix.preConcat(*prePathMatrix);
         }
@@ -1052,14 +1003,11 @@
         if (d.fClip->isEmpty()) {
             return;
         }
-        bool fill;
-        if (pathIsMutable) {
-            fill = paint.getFillPath(*pathPtr, pathPtr);
-        } else {
-            fill = paint.getFillPath(*pathPtr, &modifiedPath);
+        if (!pathIsMutable) {
             pathPtr = &modifiedPath;
             pathIsMutable = true;
         }
+        bool fill = paint.getFillPath(origPath, pathPtr);
 
         SkPaint noEffectPaint(paint);
         noEffectPaint.setPathEffect(nullptr);
@@ -1323,17 +1271,8 @@
 }
 
 
-void SkPDFDevice::drawText(const SkDraw& srcDraw, const void* text, size_t len,
+void SkPDFDevice::drawText(const SkDraw& d, const void* text, size_t len,
                            SkScalar x, SkScalar y, const SkPaint& srcPaint) {
-    SkMatrix newMatrix;
-    SkDraw d(srcDraw);
-    if (excessive_translation(*d.fMatrix)) {
-        newMatrix = untranslate(*d.fMatrix, x, y);
-        d.fMatrix = &newMatrix;
-        x = 0;
-        y = 0;
-    }
-
     if (!SkPDFFont::CanEmbedTypeface(srcPaint.getTypeface(), fCanon)) {
         // https://bug.skia.org/3866
         SkPath path;
@@ -1392,46 +1331,9 @@
     content.entry()->fContent.writeText("ET\n");
 }
 
-void SkPDFDevice::drawPosText(const SkDraw& srcDraw, const void* text, size_t len,
+void SkPDFDevice::drawPosText(const SkDraw& d, const void* text, size_t len,
                               const SkScalar pos[], int scalarsPerPos,
-                              const SkPoint& srcOffset, const SkPaint& srcPaint) {
-    if (len == 0) {
-        return;
-    }
-    SkMatrix newMatrix;
-    SkDraw d(srcDraw);
-    SkPoint offset(srcOffset);
-    SkAutoTMalloc<SkScalar> scalarsBuffer;
-    if (excessive_translation(*d.fMatrix)) {
-        SkPoint first;
-        if (scalarsPerPos != 2) {
-            first.set(pos[0], 0);
-        } else {
-            first.set(pos[0], pos[1]);
-        }
-        newMatrix = untranslate(*d.fMatrix,
-                                first.x() + offset.x(),
-                                first.y() + offset.y());
-        d.fMatrix = &newMatrix;
-        offset.set(0, 0);  // offset -= offset;
-        if (first.x() != 0 || first.y() != 0) {
-            int glyphCount = srcPaint.textToGlyphs(text, len, NULL);
-            if (scalarsPerPos != 2) {
-                scalarsBuffer.reset(glyphCount);
-                for (int i = 0; i < glyphCount; ++i) {
-                    scalarsBuffer[i] = pos[i] - first.x();
-                }
-            } else {
-                scalarsBuffer.reset(2 * glyphCount);
-                for (int i = 0; i < glyphCount; ++i) {
-                    scalarsBuffer[2 * i]     = pos[2 * i]     - first.x();
-                    scalarsBuffer[2 * i + 1] = pos[2 * i + 1] - first.y();
-                }
-            }
-            pos = &scalarsBuffer[0];
-        }
-    }
-
+                              const SkPoint& offset, const SkPaint& srcPaint) {
     if (!SkPDFFont::CanEmbedTypeface(srcPaint.getTypeface(), fCanon)) {
         const SkPoint* positions = reinterpret_cast<const SkPoint*>(pos);
         SkAutoTMalloc<SkPoint> positionsBuffer;