Turn off simplePath optimization then Path object is used as out param

Change-Id: I4d9ae5c756b2ed1ba30483e8685ce1ad6c1f0c03
fixes:30349106
This commit is contained in:
sergeyv
2016-07-27 14:13:34 -07:00
parent 004d140042
commit a6a8557d6e
6 changed files with 21 additions and 17 deletions

View File

@@ -788,7 +788,7 @@ public class Canvas {
* @return true if the resulting is non-empty * @return true if the resulting is non-empty
*/ */
public boolean clipPath(@NonNull Path path, @NonNull Region.Op op) { 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 * does not intersect with the canvas' clip
*/ */
public boolean quickReject(@NonNull Path path, @NonNull EdgeType type) { 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) { if (path.isSimplePath && path.rects != null) {
native_drawRegion(mNativeCanvasWrapper, path.rects.mNativeRegion, paint.getNativeInstance()); native_drawRegion(mNativeCanvasWrapper, path.rects.mNativeRegion, paint.getNativeInstance());
} else { } 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(); throw new ArrayIndexOutOfBoundsException();
} }
native_drawTextOnPath(mNativeCanvasWrapper, text, index, count, native_drawTextOnPath(mNativeCanvasWrapper, text, index, count,
path.ni(), hOffset, vOffset, path.readOnlyNI(), hOffset, vOffset,
paint.mBidiFlags, paint.getNativeInstance(), paint.mNativeTypeface); paint.mBidiFlags, paint.getNativeInstance(), paint.mNativeTypeface);
} }
@@ -1915,7 +1915,7 @@ public class Canvas {
public void drawTextOnPath(@NonNull String text, @NonNull Path path, float hOffset, public void drawTextOnPath(@NonNull String text, @NonNull Path path, float hOffset,
float vOffset, @NonNull Paint paint) { float vOffset, @NonNull Paint paint) {
if (text.length() > 0) { 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); paint.mBidiFlags, paint.getNativeInstance(), paint.mNativeTypeface);
} }
} }

View File

@@ -1021,7 +1021,7 @@ public class Paint {
* drawn with a hairline (width == 0) * drawn with a hairline (width == 0)
*/ */
public boolean getFillPath(Path src, Path dst) { 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(); throw new ArrayIndexOutOfBoundsException();
} }
nGetTextPath(mNativePaint, mNativeTypeface, mBidiFlags, text, index, count, x, y, nGetTextPath(mNativePaint, mNativeTypeface, mBidiFlags, text, index, count, x, y,
path.ni()); path.mutateNI());
} }
/** /**
@@ -2416,7 +2416,7 @@ public class Paint {
throw new IndexOutOfBoundsException(); throw new IndexOutOfBoundsException();
} }
nGetTextPath(mNativePaint, mNativeTypeface, mBidiFlags, text, start, end, x, y, nGetTextPath(mNativePaint, mNativeTypeface, mBidiFlags, text, start, end, x, y,
path.ni()); path.mutateNI());
} }
/** /**

View File

@@ -775,7 +775,12 @@ public class Path {
} }
} }
final long ni() { final long readOnlyNI() {
return mNativePath;
}
final long mutateNI() {
isSimplePath = false;
return mNativePath; return mNativePath;
} }

View File

@@ -41,7 +41,7 @@ public class PathDashPathEffect extends PathEffect {
*/ */
public PathDashPathEffect(Path shape, float advance, float phase, public PathDashPathEffect(Path shape, float advance, float phase,
Style style) { Style style) {
native_instance = nativeCreate(shape.ni(), advance, phase, native_instance = nativeCreate(shape.readOnlyNI(), advance, phase,
style.native_style); style.native_style);
} }

View File

@@ -50,7 +50,7 @@ public class PathMeasure {
public PathMeasure(Path path, boolean forceClosed) { public PathMeasure(Path path, boolean forceClosed) {
// The native implementation does not copy the path, prevent it from being GC'd // The native implementation does not copy the path, prevent it from being GC'd
mPath = path; mPath = path;
native_instance = native_create(path != null ? path.ni() : 0, native_instance = native_create(path != null ? path.readOnlyNI() : 0,
forceClosed); forceClosed);
} }
@@ -60,7 +60,7 @@ public class PathMeasure {
public void setPath(Path path, boolean forceClosed) { public void setPath(Path path, boolean forceClosed) {
mPath = path; mPath = path;
native_setPath(native_instance, native_setPath(native_instance,
path != null ? path.ni() : 0, path != null ? path.readOnlyNI() : 0,
forceClosed); forceClosed);
} }
@@ -134,8 +134,7 @@ public class PathMeasure {
return false; return false;
} }
dst.isSimplePath = false; return native_getSegment(native_instance, startD, stopD, dst.mutateNI(), startWithMoveTo);
return native_getSegment(native_instance, startD, stopD, dst.ni(), startWithMoveTo);
} }
/** /**

View File

@@ -110,7 +110,7 @@ public class Region implements Parcelable {
* (with no antialiasing). * (with no antialiasing).
*/ */
public boolean setPath(Path path, Region clip) { 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() { public Path getBoundaryPath() {
Path path = new Path(); Path path = new Path();
nativeGetBoundaryPath(mNativeRegion, path.ni()); nativeGetBoundaryPath(mNativeRegion, path.mutateNI());
return path; return path;
} }
@@ -164,7 +164,7 @@ public class Region implements Parcelable {
* path will also be empty. * path will also be empty.
*/ */
public boolean getBoundaryPath(Path path) { public boolean getBoundaryPath(Path path) {
return nativeGetBoundaryPath(mNativeRegion, path.ni()); return nativeGetBoundaryPath(mNativeRegion, path.mutateNI());
} }
/** /**