Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b7d0cfa0 authored by Chris Craik's avatar Chris Craik Committed by Android (Google) Code Review
Browse files

Merge "Add Path.isConvex, and force View outlines to be convex"

parents ef8c07c8 5be83edd
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -9926,6 +9926,7 @@ package android.graphics {
    method public void cubicTo(float, float, float, float, float, float);
    method public android.graphics.Path.FillType getFillType();
    method public void incReserve(int);
    method public boolean isConvex();
    method public boolean isEmpty();
    method public boolean isInverseFillType();
    method public boolean isRect(android.graphics.RectF);
+7 −1
Original line number Diff line number Diff line
@@ -10838,11 +10838,14 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
     * Sets the outline of the view, which defines the shape of the shadow it
     * casts, and can used for clipping.
     * <p>
     * The outline path of a View must be {@link android.graphics.Path#isConvex() convex}.
     * <p>
     * If the outline is not set, or {@link Path#isEmpty()}, shadows will be
     * cast from the bounds of the View, and clipToOutline will be ignored.
     *
     * @param outline The new outline of the view. Must be non-null.
     * @param outline The new outline of the view. Must be non-null, and convex.
     *
     * @see #setCastsShadow(boolean)
     * @see #getOutline(Path)
     * @see #getClipToOutline()
     * @see #setClipToOutline(boolean)
@@ -10851,6 +10854,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
        if (outline == null) {
            throw new IllegalArgumentException("Path must be non-null");
        }
        if (!outline.isConvex()) {
            throw new IllegalArgumentException("Path must be convex");
        }
        // always copy the path since caller may reuse
        if (mOutline == null) {
            mOutline = new Path(outline);
+7 −1
Original line number Diff line number Diff line
@@ -72,6 +72,11 @@ public:
        *dst = *src;
    }

    static jboolean isConvex(JNIEnv* env, jobject clazz, jlong objHandle) {
        SkPath* obj = reinterpret_cast<SkPath*>(objHandle);
        return obj->isConvex();
    }

    static jint getFillType(JNIEnv* env, jobject clazz, jlong objHandle) {
        SkPath* obj = reinterpret_cast<SkPath*>(objHandle);
        return obj->getFillType();
@@ -524,6 +529,7 @@ static JNINativeMethod methods[] = {
    {"native_reset","(J)V", (void*) SkPathGlue::reset},
    {"native_rewind","(J)V", (void*) SkPathGlue::rewind},
    {"native_set","(JJ)V", (void*) SkPathGlue::assign},
    {"native_isConvex","(J)Z", (void*) SkPathGlue::isConvex},
    {"native_getFillType","(J)I", (void*) SkPathGlue::getFillType},
    {"native_setFillType","(JI)V", (void*) SkPathGlue::setFillType},
    {"native_isEmpty","(J)Z", (void*) SkPathGlue::isEmpty},
+21 −5
Original line number Diff line number Diff line
@@ -167,6 +167,21 @@ public class Path {
        return false;
    }

    /**
     * Returns the path's convexity, as defined by the content of the path.
     * <p>
     * A path is convex if it has a single contour, and only ever curves in a
     * single direction.
     * <p>
     * This function will calculate the convexity of the path from its control
     * points, and cache the result.
     *
     * @return True if the path is convex.
     */
    public boolean isConvex() {
        return native_isConvex(mNativePath);
    }

    /**
     * Enum for the ways a path may be filled.
     */
@@ -232,7 +247,7 @@ public class Path {
     */
    public boolean isInverseFillType() {
        final int ft = native_getFillType(mNativePath);
        return (ft & 2) != 0;
        return (ft & FillType.INVERSE_WINDING.nativeInt) != 0;
    }

    /**
@@ -240,7 +255,7 @@ public class Path {
     */
    public void toggleInverseFillType() {
        int ft = native_getFillType(mNativePath);
        ft ^= 2;
        ft ^= FillType.INVERSE_WINDING.nativeInt;
        native_setFillType(mNativePath, ft);
    }

@@ -719,6 +734,7 @@ public class Path {
    private static native void native_reset(long nPath);
    private static native void native_rewind(long nPath);
    private static native void native_set(long native_dst, long native_src);
    private static native boolean native_isConvex(long nPath);
    private static native int native_getFillType(long nPath);
    private static native void native_setFillType(long nPath, int ft);
    private static native boolean native_isEmpty(long nPath);