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

Commit 5be83edd authored by Chris Craik's avatar Chris Craik
Browse files

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

Change-Id: Idf3f1ee44240d77f7a7ddd0da898da8aa5d41864
parent adbd2ba1
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -9922,6 +9922,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
@@ -10841,11 +10841,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)
@@ -10854,6 +10857,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);