OSDN Git Service

Turn off simplePath optimization then Path object is used as out param
authorsergeyv <sergeyv@google.com>
Wed, 27 Jul 2016 21:13:34 +0000 (14:13 -0700)
committersergeyv <sergeyv@google.com>
Wed, 27 Jul 2016 21:13:34 +0000 (14:13 -0700)
Change-Id: I4d9ae5c756b2ed1ba30483e8685ce1ad6c1f0c03
fixes:30349106

graphics/java/android/graphics/Canvas.java
graphics/java/android/graphics/Paint.java
graphics/java/android/graphics/Path.java
graphics/java/android/graphics/PathDashPathEffect.java
graphics/java/android/graphics/PathMeasure.java
graphics/java/android/graphics/Region.java

index cb6c92e..40b877d 100644 (file)
@@ -788,7 +788,7 @@ public class Canvas {
      * @return     true if the resulting is non-empty
      */
     public boolean clipPath(@NonNull Path path, @NonNull Region.Op op) {
-        return native_clipPath(mNativeCanvasWrapper, path.ni(), op.nativeInt);
+        return native_clipPath(mNativeCanvasWrapper, path.readOnlyNI(), op.nativeInt);
     }
 
     /**
@@ -907,7 +907,7 @@ public class Canvas {
      *                    does not intersect with the canvas' clip
      */
     public boolean quickReject(@NonNull Path path, @NonNull EdgeType type) {
-        return native_quickReject(mNativeCanvasWrapper, path.ni());
+        return native_quickReject(mNativeCanvasWrapper, path.readOnlyNI());
     }
 
     /**
@@ -1259,7 +1259,7 @@ public class Canvas {
         if (path.isSimplePath && path.rects != null) {
             native_drawRegion(mNativeCanvasWrapper, path.rects.mNativeRegion, paint.getNativeInstance());
         } else {
-            native_drawPath(mNativeCanvasWrapper, path.ni(), paint.getNativeInstance());
+            native_drawPath(mNativeCanvasWrapper, path.readOnlyNI(), paint.getNativeInstance());
         }
     }
 
@@ -1895,7 +1895,7 @@ public class Canvas {
             throw new ArrayIndexOutOfBoundsException();
         }
         native_drawTextOnPath(mNativeCanvasWrapper, text, index, count,
-                path.ni(), hOffset, vOffset,
+                path.readOnlyNI(), hOffset, vOffset,
                 paint.mBidiFlags, paint.getNativeInstance(), paint.mNativeTypeface);
     }
 
@@ -1915,7 +1915,7 @@ public class Canvas {
     public void drawTextOnPath(@NonNull String text, @NonNull Path path, float hOffset,
             float vOffset, @NonNull Paint paint) {
         if (text.length() > 0) {
-            native_drawTextOnPath(mNativeCanvasWrapper, text, path.ni(), hOffset, vOffset,
+            native_drawTextOnPath(mNativeCanvasWrapper, text, path.readOnlyNI(), hOffset, vOffset,
                     paint.mBidiFlags, paint.getNativeInstance(), paint.mNativeTypeface);
         }
     }
index 054e29f..cfbe672 100644 (file)
@@ -1021,7 +1021,7 @@ public class Paint {
      *                 drawn with a hairline (width == 0)
      */
     public boolean getFillPath(Path src, Path dst) {
-        return nGetFillPath(mNativePaint, src.ni(), dst.ni());
+        return nGetFillPath(mNativePaint, src.readOnlyNI(), dst.mutateNI());
     }
 
     /**
@@ -2394,7 +2394,7 @@ public class Paint {
             throw new ArrayIndexOutOfBoundsException();
         }
         nGetTextPath(mNativePaint, mNativeTypeface, mBidiFlags, text, index, count, x, y,
-                path.ni());
+                path.mutateNI());
     }
 
     /**
@@ -2416,7 +2416,7 @@ public class Paint {
             throw new IndexOutOfBoundsException();
         }
         nGetTextPath(mNativePaint, mNativeTypeface, mBidiFlags, text, start, end, x, y,
-                path.ni());
+                path.mutateNI());
     }
 
     /**
index de391af..be31bbe 100644 (file)
@@ -775,7 +775,12 @@ public class Path {
         }
     }
 
-    final long ni() {
+    final long readOnlyNI() {
+        return mNativePath;
+    }
+
+    final long mutateNI() {
+        isSimplePath = false;
         return mNativePath;
     }
 
index 4f43f68..2b6a6ed 100644 (file)
@@ -41,7 +41,7 @@ public class PathDashPathEffect extends PathEffect {
      */
     public PathDashPathEffect(Path shape, float advance, float phase,
                               Style style) {
-        native_instance = nativeCreate(shape.ni(), advance, phase,
+        native_instance = nativeCreate(shape.readOnlyNI(), advance, phase,
                                        style.native_style);
     }
     
index 2848949..78d892e 100644 (file)
@@ -50,7 +50,7 @@ public class PathMeasure {
     public PathMeasure(Path path, boolean forceClosed) {
         // The native implementation does not copy the path, prevent it from being GC'd
         mPath = path;
-        native_instance = native_create(path != null ? path.ni() : 0,
+        native_instance = native_create(path != null ? path.readOnlyNI() : 0,
                                         forceClosed);
     }
 
@@ -60,7 +60,7 @@ public class PathMeasure {
     public void setPath(Path path, boolean forceClosed) {
         mPath = path;
         native_setPath(native_instance,
-                       path != null ? path.ni() : 0,
+                       path != null ? path.readOnlyNI() : 0,
                        forceClosed);
     }
 
@@ -134,8 +134,7 @@ public class PathMeasure {
             return false;
         }
 
-        dst.isSimplePath = false;
-        return native_getSegment(native_instance, startD, stopD, dst.ni(), startWithMoveTo);
+        return native_getSegment(native_instance, startD, stopD, dst.mutateNI(), startWithMoveTo);
     }
 
     /**
index de89ad0..dca6d9e 100644 (file)
@@ -110,7 +110,7 @@ public class Region implements Parcelable {
      * (with no antialiasing).
      */
     public boolean setPath(Path path, Region clip) {
-        return nativeSetPath(mNativeRegion, path.ni(), clip.mNativeRegion);
+        return nativeSetPath(mNativeRegion, path.readOnlyNI(), clip.mNativeRegion);
     }
 
     /**
@@ -155,7 +155,7 @@ public class Region implements Parcelable {
      */
     public Path getBoundaryPath() {
         Path path = new Path();
-        nativeGetBoundaryPath(mNativeRegion, path.ni());
+        nativeGetBoundaryPath(mNativeRegion, path.mutateNI());
         return path;
     }
 
@@ -164,7 +164,7 @@ public class Region implements Parcelable {
      * path will also be empty.
      */
     public boolean getBoundaryPath(Path path) {
-        return nativeGetBoundaryPath(mNativeRegion, path.ni());
+        return nativeGetBoundaryPath(mNativeRegion, path.mutateNI());
     }
         
     /**