Loading graphics/java/android/graphics/Outline.java +41 −30 Original line number Diff line number Diff line Loading @@ -17,10 +17,13 @@ package android.graphics; import android.annotation.FloatRange; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.graphics.drawable.Drawable; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * Defines a simple shape, used for bounding graphical regions. * <p> Loading @@ -34,11 +37,28 @@ import android.graphics.drawable.Drawable; public final class Outline { private static final float RADIUS_UNDEFINED = Float.NEGATIVE_INFINITY; private static final int MODE_EMPTY = 0; private static final int MODE_RECT = 1; private static final int MODE_CONVEX_PATH = 2; /** @hide */ @Retention(RetentionPolicy.SOURCE) @IntDef(flag = false, value = { MODE_EMPTY, MODE_RECT, MODE_CONVEX_PATH, }) public @interface Mode {} @Mode private int mMode = MODE_EMPTY; /** @hide */ public Path mPath; public final Path mPath = new Path(); /** @hide */ public Rect mRect; public final Rect mRect = new Rect(); /** @hide */ public float mRadius = RADIUS_UNDEFINED; /** @hide */ Loading @@ -63,8 +83,9 @@ public final class Outline { * @see #isEmpty() */ public void setEmpty() { mPath = null; mRect = null; mMode = MODE_EMPTY; mPath.rewind(); mRect.setEmpty(); mRadius = RADIUS_UNDEFINED; } Loading @@ -77,7 +98,7 @@ public final class Outline { * @see #setEmpty() */ public boolean isEmpty() { return mRect == null && mPath == null; return mMode == MODE_EMPTY; } Loading @@ -90,7 +111,7 @@ public final class Outline { * @see {@link android.view.View#setClipToOutline(boolean)} */ public boolean canClip() { return !isEmpty() && mRect != null; return mMode != MODE_CONVEX_PATH; } /** Loading Loading @@ -122,19 +143,9 @@ public final class Outline { * @param src Source outline to copy from. */ public void set(@NonNull Outline src) { if (src.mPath != null) { if (mPath == null) { mPath = new Path(); } mMode = src.mMode; mPath.set(src.mPath); mRect = null; } if (src.mRect != null) { if (mRect == null) { mRect = new Rect(); } mRect.set(src.mRect); } mRadius = src.mRadius; mAlpha = src.mAlpha; } Loading Loading @@ -165,10 +176,10 @@ public final class Outline { return; } if (mRect == null) mRect = new Rect(); mMode = MODE_RECT; mRect.set(left, top, right, bottom); mRadius = radius; mPath = null; mPath.rewind(); } /** Loading @@ -188,7 +199,7 @@ public final class Outline { * bounds, or {@code false} if no outline bounds are set */ public boolean getRect(@NonNull Rect outRect) { if (mRect == null) { if (mMode != MODE_RECT) { return false; } outRect.set(mRect); Loading Loading @@ -221,10 +232,10 @@ public final class Outline { return; } if (mPath == null) mPath = new Path(); mPath.reset(); mMode = MODE_CONVEX_PATH; mPath.rewind(); mPath.addOval(left, top, right, bottom, Path.Direction.CW); mRect = null; mRect.setEmpty(); mRadius = RADIUS_UNDEFINED; } Loading @@ -248,10 +259,10 @@ public final class Outline { if (!convexPath.isConvex()) { throw new IllegalArgumentException("path must be convex"); } if (mPath == null) mPath = new Path(); mMode = MODE_CONVEX_PATH; mPath.set(convexPath); mRect = null; mRect.setEmpty(); mRadius = RADIUS_UNDEFINED; } Loading @@ -259,9 +270,9 @@ public final class Outline { * Offsets the Outline by (dx,dy) */ public void offset(int dx, int dy) { if (mRect != null) { if (mMode == MODE_RECT) { mRect.offset(dx, dy); } else if (mPath != null) { } else if (mMode == MODE_CONVEX_PATH) { mPath.offset(dx, dy); } } Loading Loading
graphics/java/android/graphics/Outline.java +41 −30 Original line number Diff line number Diff line Loading @@ -17,10 +17,13 @@ package android.graphics; import android.annotation.FloatRange; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.graphics.drawable.Drawable; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * Defines a simple shape, used for bounding graphical regions. * <p> Loading @@ -34,11 +37,28 @@ import android.graphics.drawable.Drawable; public final class Outline { private static final float RADIUS_UNDEFINED = Float.NEGATIVE_INFINITY; private static final int MODE_EMPTY = 0; private static final int MODE_RECT = 1; private static final int MODE_CONVEX_PATH = 2; /** @hide */ @Retention(RetentionPolicy.SOURCE) @IntDef(flag = false, value = { MODE_EMPTY, MODE_RECT, MODE_CONVEX_PATH, }) public @interface Mode {} @Mode private int mMode = MODE_EMPTY; /** @hide */ public Path mPath; public final Path mPath = new Path(); /** @hide */ public Rect mRect; public final Rect mRect = new Rect(); /** @hide */ public float mRadius = RADIUS_UNDEFINED; /** @hide */ Loading @@ -63,8 +83,9 @@ public final class Outline { * @see #isEmpty() */ public void setEmpty() { mPath = null; mRect = null; mMode = MODE_EMPTY; mPath.rewind(); mRect.setEmpty(); mRadius = RADIUS_UNDEFINED; } Loading @@ -77,7 +98,7 @@ public final class Outline { * @see #setEmpty() */ public boolean isEmpty() { return mRect == null && mPath == null; return mMode == MODE_EMPTY; } Loading @@ -90,7 +111,7 @@ public final class Outline { * @see {@link android.view.View#setClipToOutline(boolean)} */ public boolean canClip() { return !isEmpty() && mRect != null; return mMode != MODE_CONVEX_PATH; } /** Loading Loading @@ -122,19 +143,9 @@ public final class Outline { * @param src Source outline to copy from. */ public void set(@NonNull Outline src) { if (src.mPath != null) { if (mPath == null) { mPath = new Path(); } mMode = src.mMode; mPath.set(src.mPath); mRect = null; } if (src.mRect != null) { if (mRect == null) { mRect = new Rect(); } mRect.set(src.mRect); } mRadius = src.mRadius; mAlpha = src.mAlpha; } Loading Loading @@ -165,10 +176,10 @@ public final class Outline { return; } if (mRect == null) mRect = new Rect(); mMode = MODE_RECT; mRect.set(left, top, right, bottom); mRadius = radius; mPath = null; mPath.rewind(); } /** Loading @@ -188,7 +199,7 @@ public final class Outline { * bounds, or {@code false} if no outline bounds are set */ public boolean getRect(@NonNull Rect outRect) { if (mRect == null) { if (mMode != MODE_RECT) { return false; } outRect.set(mRect); Loading Loading @@ -221,10 +232,10 @@ public final class Outline { return; } if (mPath == null) mPath = new Path(); mPath.reset(); mMode = MODE_CONVEX_PATH; mPath.rewind(); mPath.addOval(left, top, right, bottom, Path.Direction.CW); mRect = null; mRect.setEmpty(); mRadius = RADIUS_UNDEFINED; } Loading @@ -248,10 +259,10 @@ public final class Outline { if (!convexPath.isConvex()) { throw new IllegalArgumentException("path must be convex"); } if (mPath == null) mPath = new Path(); mMode = MODE_CONVEX_PATH; mPath.set(convexPath); mRect = null; mRect.setEmpty(); mRadius = RADIUS_UNDEFINED; } Loading @@ -259,9 +270,9 @@ public final class Outline { * Offsets the Outline by (dx,dy) */ public void offset(int dx, int dy) { if (mRect != null) { if (mMode == MODE_RECT) { mRect.offset(dx, dy); } else if (mPath != null) { } else if (mMode == MODE_CONVEX_PATH) { mPath.offset(dx, dy); } } Loading