Loading api/current.txt +4 −0 Original line number Diff line number Diff line Loading @@ -24127,6 +24127,7 @@ package android.view { method public android.view.View getFocusedChild(); method public android.view.animation.LayoutAnimationController getLayoutAnimation(); method public android.view.animation.Animation.AnimationListener getLayoutAnimationListener(); method public int getLayoutMode(); method public android.animation.LayoutTransition getLayoutTransition(); method public int getPersistentDrawingCache(); method public int indexOfChild(android.view.View); Loading Loading @@ -24174,6 +24175,7 @@ package android.view { method public void setDescendantFocusability(int); method public void setLayoutAnimation(android.view.animation.LayoutAnimationController); method public void setLayoutAnimationListener(android.view.animation.Animation.AnimationListener); method public void setLayoutMode(int); method public void setLayoutTransition(android.animation.LayoutTransition); method public void setMotionEventSplittingEnabled(boolean); method public void setOnHierarchyChangeListener(android.view.ViewGroup.OnHierarchyChangeListener); Loading @@ -24186,9 +24188,11 @@ package android.view { method public void startViewTransition(android.view.View); method public void updateViewLayout(android.view.View, android.view.ViewGroup.LayoutParams); field protected static final int CLIP_TO_PADDING_MASK = 34; // 0x22 field public static final int COMPONENT_BOUNDS = 0; // 0x0 field public static final int FOCUS_AFTER_DESCENDANTS = 262144; // 0x40000 field public static final int FOCUS_BEFORE_DESCENDANTS = 131072; // 0x20000 field public static final int FOCUS_BLOCK_DESCENDANTS = 393216; // 0x60000 field public static final int LAYOUT_BOUNDS = 1; // 0x1 field public static final int PERSISTENT_ALL_CACHES = 3; // 0x3 field public static final int PERSISTENT_ANIMATION_CACHE = 1; // 0x1 field public static final int PERSISTENT_NO_CACHE = 0; // 0x0 core/java/android/view/View.java +30 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Camera; import android.graphics.Canvas; import android.graphics.Insets; import android.graphics.Interpolator; import android.graphics.LinearGradient; import android.graphics.Matrix; Loading Loading @@ -2697,6 +2698,12 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal @ViewDebug.ExportedProperty(category = "padding") protected int mPaddingBottom; /** * The layout insets in pixels, that is the distance in pixels between the * visible edges of this view its bounds. */ private Insets mLayoutInsets; /** * Briefly describes the view and is primarily used for accessibility support. */ Loading Loading @@ -13841,6 +13848,29 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal return mUserPaddingRelative; } /** * @hide */ public Insets getLayoutInsets() { if (mLayoutInsets == null) { if (mBackground == null) { mLayoutInsets = Insets.NONE; } else { Rect insetRect = new Rect(); boolean hasInsets = mBackground.getLayoutInsets(insetRect); mLayoutInsets = hasInsets ? Insets.of(insetRect) : Insets.NONE; } } return mLayoutInsets; } /** * @hide */ public void setLayoutInsets(Insets layoutInsets) { mLayoutInsets = layoutInsets; } /** * Changes the selection state of this view. A view can be selected or not. * Note that selection is not the same as focus. Views are typically core/java/android/view/ViewGroup.java +70 −0 Original line number Diff line number Diff line Loading @@ -170,6 +170,12 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager */ protected int mGroupFlags; /* * THe layout mode: either {@link #UNDEFINED_LAYOUT_MODE}, {@link #COMPONENT_BOUNDS} or * {@link #LAYOUT_BOUNDS} */ private int mLayoutMode = UNDEFINED_LAYOUT_MODE; /** * NOTE: If you change the flags below make sure to reflect the changes * the DisplayList class Loading Loading @@ -335,6 +341,24 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager */ public static final int PERSISTENT_ALL_CACHES = 0x3; // Layout Modes private static final int UNDEFINED_LAYOUT_MODE = -1; /** * This constant is a {@link #setLayoutMode(int) layoutMode}. * Component bounds are the raw values of {@link #getLeft() left}, {@link #getTop() top}, * {@link #getRight() right} and {@link #getBottom() bottom}. */ public static final int COMPONENT_BOUNDS = 0; /** * This constant is a {@link #setLayoutMode(int) layoutMode}. * Layout bounds are derived by offsetting the component bounds using * {@link View#getLayoutInsets()}. */ public static final int LAYOUT_BOUNDS = 1; /** * We clip to padding when FLAG_CLIP_TO_PADDING and FLAG_PADDING_NOT_NULL * are set at the same time. Loading Loading @@ -4423,6 +4447,52 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager mPersistentDrawingCache = drawingCacheToKeep & PERSISTENT_ALL_CACHES; } /** * Returns the basis of alignment during the layout of this view group: * either {@link #COMPONENT_BOUNDS} or {@link #LAYOUT_BOUNDS}. * * @return whether or not this view group should use the component or layout bounds during * layout operations * * @see #setLayoutMode(int) */ public int getLayoutMode() { if (mLayoutMode == UNDEFINED_LAYOUT_MODE) { ViewParent parent = getParent(); if (parent instanceof ViewGroup) { ViewGroup viewGroup = (ViewGroup) parent; return viewGroup.getLayoutMode(); } else { int targetSdkVersion = mContext.getApplicationInfo().targetSdkVersion; boolean preJellyBean = targetSdkVersion < Build.VERSION_CODES.JELLY_BEAN; return preJellyBean ? COMPONENT_BOUNDS : LAYOUT_BOUNDS; } } return mLayoutMode; } /** * Sets the basis of alignment during alignment of this view group. * Valid values are either {@link #COMPONENT_BOUNDS} or {@link #LAYOUT_BOUNDS}. * <p> * The default is to query the property of the parent if this view group has a parent. * If this ViewGroup is the root of the view hierarchy the default * value is {@link #LAYOUT_BOUNDS} for target SDK's greater than JellyBean, * {@link #LAYOUT_BOUNDS} otherwise. * * @return whether or not this view group should use the component or layout bounds during * layout operations * * @see #getLayoutMode() */ public void setLayoutMode(int layoutMode) { if (mLayoutMode != layoutMode) { mLayoutMode = layoutMode; requestLayout(); } } /** * Returns a new set of layout parameters based on the supplied attributes set. * Loading core/java/android/widget/GridLayout.java +33 −15 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Insets; import android.graphics.Paint; import android.util.AttributeSet; import android.util.Log; Loading Loading @@ -559,9 +560,9 @@ public class GridLayout extends ViewGroup { int flags = (gravity & mask) >> shift; switch (flags) { case (AXIS_SPECIFIED | AXIS_PULL_BEFORE): return LEADING; return horizontal ? LEFT : TOP; case (AXIS_SPECIFIED | AXIS_PULL_AFTER): return TRAILING; return horizontal ? RIGHT : BOTTOM; case (AXIS_SPECIFIED | AXIS_PULL_BEFORE | AXIS_PULL_AFTER): return FILL; case AXIS_SPECIFIED: Loading Loading @@ -1042,12 +1043,15 @@ public class GridLayout extends ViewGroup { int rightMargin = getMargin(c, true, false); int bottomMargin = getMargin(c, false, false); int sumMarginsX = leftMargin + rightMargin; int sumMarginsY = topMargin + bottomMargin; // Alignment offsets: the location of the view relative to its alignment group. int alignmentOffsetX = boundsX.getOffset(c, hAlign, leftMargin + pWidth + rightMargin); int alignmentOffsetY = boundsY.getOffset(c, vAlign, topMargin + pHeight + bottomMargin); int alignmentOffsetX = boundsX.getOffset(this, c, hAlign, pWidth + sumMarginsX, true); int alignmentOffsetY = boundsY.getOffset(this, c, vAlign, pHeight + sumMarginsY, false); int width = hAlign.getSizeInCell(c, pWidth, cellWidth - leftMargin - rightMargin); int height = vAlign.getSizeInCell(c, pHeight, cellHeight - topMargin - bottomMargin); int width = hAlign.getSizeInCell(c, pWidth, cellWidth - sumMarginsX); int height = vAlign.getSizeInCell(c, pHeight, cellHeight - sumMarginsY); int dx = x1 + gravityOffsetX + alignmentOffsetX; Loading Loading @@ -1181,7 +1185,7 @@ public class GridLayout extends ViewGroup { View c = getChildAt(i); LayoutParams lp = getLayoutParams(c); Spec spec = horizontal ? lp.columnSpec : lp.rowSpec; groupBounds.getValue(i).include(c, spec, GridLayout.this, this); groupBounds.getValue(i).include(GridLayout.this, c, spec, this); } } Loading Loading @@ -2138,16 +2142,30 @@ public class GridLayout extends ViewGroup { return before + after; } protected int getOffset(View c, Alignment alignment, int size) { return before - alignment.getAlignmentValue(c, size); private int getAlignmentValue(GridLayout gl, View c, int size, Alignment a, boolean horiz) { boolean useLayoutBounds = gl.getLayoutMode() == LAYOUT_BOUNDS; if (!useLayoutBounds) { return a.getAlignmentValue(c, size); } else { Insets insets = c.getLayoutInsets(); int leadingInset = horiz ? insets.left : insets.top; // RTL? int trailingInset = horiz ? insets.right : insets.bottom; // RTL? int totalInset = leadingInset + trailingInset; return leadingInset + a.getAlignmentValue(c, size - totalInset); } } protected int getOffset(GridLayout gl, View c, Alignment a, int size, boolean horizontal) { return before - getAlignmentValue(gl, c, size, a, horizontal); } protected final void include(View c, Spec spec, GridLayout gridLayout, Axis axis) { protected final void include(GridLayout gl, View c, Spec spec, Axis axis) { this.flexibility &= spec.getFlexibility(); int size = gridLayout.getMeasurementIncludingMargin(c, axis.horizontal); Alignment alignment = gridLayout.getAlignment(spec.alignment, axis.horizontal); boolean horizontal = axis.horizontal; int size = gl.getMeasurementIncludingMargin(c, horizontal); Alignment alignment = gl.getAlignment(spec.alignment, horizontal); // todo test this works correctly when the returned value is UNDEFINED int before = alignment.getAlignmentValue(c, size); int before = getAlignmentValue(gl, c, size, alignment, horizontal); include(before, size - before); } Loading Loading @@ -2614,8 +2632,8 @@ public class GridLayout extends ViewGroup { } @Override protected int getOffset(View c, Alignment alignment, int size) { return max(0, super.getOffset(c, alignment, size)); protected int getOffset(GridLayout gl, View c, Alignment a, int size, boolean hrz) { return max(0, super.getOffset(gl, c, a, size, hrz)); } }; } Loading graphics/java/android/graphics/Insets.java 0 → 100644 +114 −0 Original line number Diff line number Diff line /* * Copyright (C) 2006 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.graphics; /** * An Insets instance holds four integer offsets which describe changes to the four * edges of a Rectangle. By convention, positive values move edges towards the * centre of the rectangle. * <p> * Insets are immutable so may be treated as values. * * @hide */ public class Insets { public static final Insets NONE = new Insets(0, 0, 0, 0); public final int left; public final int top; public final int right; public final int bottom; private Insets(int left, int top, int right, int bottom) { this.left = left; this.top = top; this.right = right; this.bottom = bottom; } // Factory methods /** * Return an Insets instance with the appropriate values. * * @param left the left inset * @param top the top inset * @param right the right inset * @param bottom the bottom inset * * @return Insets instance with the appropriate values */ public static Insets of(int left, int top, int right, int bottom) { if (left == 0 && top == 0 && right == 0 && bottom == 0) { return NONE; } return new Insets(left, top, right, bottom); } /** * Return an Insets instance with the appropriate values. * * @param r the rectangle from which to take the values * * @return an Insets instance with the appropriate values */ public static Insets of(Rect r) { return of(r.left, r.top, r.right, r.bottom); } /** * Two Insets instances are equal iff they belong to the same class and their fields are * pairwise equal. * * @param o the object to compare this instance with. * * @return true iff this object is equal {@code o} */ @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Insets insets = (Insets) o; if (bottom != insets.bottom) return false; if (left != insets.left) return false; if (right != insets.right) return false; if (top != insets.top) return false; return true; } @Override public int hashCode() { int result = left; result = 31 * result + top; result = 31 * result + right; result = 31 * result + bottom; return result; } @Override public String toString() { return "Insets{" + "left=" + left + ", top=" + top + ", right=" + right + ", bottom=" + bottom + '}'; } } Loading
api/current.txt +4 −0 Original line number Diff line number Diff line Loading @@ -24127,6 +24127,7 @@ package android.view { method public android.view.View getFocusedChild(); method public android.view.animation.LayoutAnimationController getLayoutAnimation(); method public android.view.animation.Animation.AnimationListener getLayoutAnimationListener(); method public int getLayoutMode(); method public android.animation.LayoutTransition getLayoutTransition(); method public int getPersistentDrawingCache(); method public int indexOfChild(android.view.View); Loading Loading @@ -24174,6 +24175,7 @@ package android.view { method public void setDescendantFocusability(int); method public void setLayoutAnimation(android.view.animation.LayoutAnimationController); method public void setLayoutAnimationListener(android.view.animation.Animation.AnimationListener); method public void setLayoutMode(int); method public void setLayoutTransition(android.animation.LayoutTransition); method public void setMotionEventSplittingEnabled(boolean); method public void setOnHierarchyChangeListener(android.view.ViewGroup.OnHierarchyChangeListener); Loading @@ -24186,9 +24188,11 @@ package android.view { method public void startViewTransition(android.view.View); method public void updateViewLayout(android.view.View, android.view.ViewGroup.LayoutParams); field protected static final int CLIP_TO_PADDING_MASK = 34; // 0x22 field public static final int COMPONENT_BOUNDS = 0; // 0x0 field public static final int FOCUS_AFTER_DESCENDANTS = 262144; // 0x40000 field public static final int FOCUS_BEFORE_DESCENDANTS = 131072; // 0x20000 field public static final int FOCUS_BLOCK_DESCENDANTS = 393216; // 0x60000 field public static final int LAYOUT_BOUNDS = 1; // 0x1 field public static final int PERSISTENT_ALL_CACHES = 3; // 0x3 field public static final int PERSISTENT_ANIMATION_CACHE = 1; // 0x1 field public static final int PERSISTENT_NO_CACHE = 0; // 0x0
core/java/android/view/View.java +30 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Camera; import android.graphics.Canvas; import android.graphics.Insets; import android.graphics.Interpolator; import android.graphics.LinearGradient; import android.graphics.Matrix; Loading Loading @@ -2697,6 +2698,12 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal @ViewDebug.ExportedProperty(category = "padding") protected int mPaddingBottom; /** * The layout insets in pixels, that is the distance in pixels between the * visible edges of this view its bounds. */ private Insets mLayoutInsets; /** * Briefly describes the view and is primarily used for accessibility support. */ Loading Loading @@ -13841,6 +13848,29 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal return mUserPaddingRelative; } /** * @hide */ public Insets getLayoutInsets() { if (mLayoutInsets == null) { if (mBackground == null) { mLayoutInsets = Insets.NONE; } else { Rect insetRect = new Rect(); boolean hasInsets = mBackground.getLayoutInsets(insetRect); mLayoutInsets = hasInsets ? Insets.of(insetRect) : Insets.NONE; } } return mLayoutInsets; } /** * @hide */ public void setLayoutInsets(Insets layoutInsets) { mLayoutInsets = layoutInsets; } /** * Changes the selection state of this view. A view can be selected or not. * Note that selection is not the same as focus. Views are typically
core/java/android/view/ViewGroup.java +70 −0 Original line number Diff line number Diff line Loading @@ -170,6 +170,12 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager */ protected int mGroupFlags; /* * THe layout mode: either {@link #UNDEFINED_LAYOUT_MODE}, {@link #COMPONENT_BOUNDS} or * {@link #LAYOUT_BOUNDS} */ private int mLayoutMode = UNDEFINED_LAYOUT_MODE; /** * NOTE: If you change the flags below make sure to reflect the changes * the DisplayList class Loading Loading @@ -335,6 +341,24 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager */ public static final int PERSISTENT_ALL_CACHES = 0x3; // Layout Modes private static final int UNDEFINED_LAYOUT_MODE = -1; /** * This constant is a {@link #setLayoutMode(int) layoutMode}. * Component bounds are the raw values of {@link #getLeft() left}, {@link #getTop() top}, * {@link #getRight() right} and {@link #getBottom() bottom}. */ public static final int COMPONENT_BOUNDS = 0; /** * This constant is a {@link #setLayoutMode(int) layoutMode}. * Layout bounds are derived by offsetting the component bounds using * {@link View#getLayoutInsets()}. */ public static final int LAYOUT_BOUNDS = 1; /** * We clip to padding when FLAG_CLIP_TO_PADDING and FLAG_PADDING_NOT_NULL * are set at the same time. Loading Loading @@ -4423,6 +4447,52 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager mPersistentDrawingCache = drawingCacheToKeep & PERSISTENT_ALL_CACHES; } /** * Returns the basis of alignment during the layout of this view group: * either {@link #COMPONENT_BOUNDS} or {@link #LAYOUT_BOUNDS}. * * @return whether or not this view group should use the component or layout bounds during * layout operations * * @see #setLayoutMode(int) */ public int getLayoutMode() { if (mLayoutMode == UNDEFINED_LAYOUT_MODE) { ViewParent parent = getParent(); if (parent instanceof ViewGroup) { ViewGroup viewGroup = (ViewGroup) parent; return viewGroup.getLayoutMode(); } else { int targetSdkVersion = mContext.getApplicationInfo().targetSdkVersion; boolean preJellyBean = targetSdkVersion < Build.VERSION_CODES.JELLY_BEAN; return preJellyBean ? COMPONENT_BOUNDS : LAYOUT_BOUNDS; } } return mLayoutMode; } /** * Sets the basis of alignment during alignment of this view group. * Valid values are either {@link #COMPONENT_BOUNDS} or {@link #LAYOUT_BOUNDS}. * <p> * The default is to query the property of the parent if this view group has a parent. * If this ViewGroup is the root of the view hierarchy the default * value is {@link #LAYOUT_BOUNDS} for target SDK's greater than JellyBean, * {@link #LAYOUT_BOUNDS} otherwise. * * @return whether or not this view group should use the component or layout bounds during * layout operations * * @see #getLayoutMode() */ public void setLayoutMode(int layoutMode) { if (mLayoutMode != layoutMode) { mLayoutMode = layoutMode; requestLayout(); } } /** * Returns a new set of layout parameters based on the supplied attributes set. * Loading
core/java/android/widget/GridLayout.java +33 −15 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Insets; import android.graphics.Paint; import android.util.AttributeSet; import android.util.Log; Loading Loading @@ -559,9 +560,9 @@ public class GridLayout extends ViewGroup { int flags = (gravity & mask) >> shift; switch (flags) { case (AXIS_SPECIFIED | AXIS_PULL_BEFORE): return LEADING; return horizontal ? LEFT : TOP; case (AXIS_SPECIFIED | AXIS_PULL_AFTER): return TRAILING; return horizontal ? RIGHT : BOTTOM; case (AXIS_SPECIFIED | AXIS_PULL_BEFORE | AXIS_PULL_AFTER): return FILL; case AXIS_SPECIFIED: Loading Loading @@ -1042,12 +1043,15 @@ public class GridLayout extends ViewGroup { int rightMargin = getMargin(c, true, false); int bottomMargin = getMargin(c, false, false); int sumMarginsX = leftMargin + rightMargin; int sumMarginsY = topMargin + bottomMargin; // Alignment offsets: the location of the view relative to its alignment group. int alignmentOffsetX = boundsX.getOffset(c, hAlign, leftMargin + pWidth + rightMargin); int alignmentOffsetY = boundsY.getOffset(c, vAlign, topMargin + pHeight + bottomMargin); int alignmentOffsetX = boundsX.getOffset(this, c, hAlign, pWidth + sumMarginsX, true); int alignmentOffsetY = boundsY.getOffset(this, c, vAlign, pHeight + sumMarginsY, false); int width = hAlign.getSizeInCell(c, pWidth, cellWidth - leftMargin - rightMargin); int height = vAlign.getSizeInCell(c, pHeight, cellHeight - topMargin - bottomMargin); int width = hAlign.getSizeInCell(c, pWidth, cellWidth - sumMarginsX); int height = vAlign.getSizeInCell(c, pHeight, cellHeight - sumMarginsY); int dx = x1 + gravityOffsetX + alignmentOffsetX; Loading Loading @@ -1181,7 +1185,7 @@ public class GridLayout extends ViewGroup { View c = getChildAt(i); LayoutParams lp = getLayoutParams(c); Spec spec = horizontal ? lp.columnSpec : lp.rowSpec; groupBounds.getValue(i).include(c, spec, GridLayout.this, this); groupBounds.getValue(i).include(GridLayout.this, c, spec, this); } } Loading Loading @@ -2138,16 +2142,30 @@ public class GridLayout extends ViewGroup { return before + after; } protected int getOffset(View c, Alignment alignment, int size) { return before - alignment.getAlignmentValue(c, size); private int getAlignmentValue(GridLayout gl, View c, int size, Alignment a, boolean horiz) { boolean useLayoutBounds = gl.getLayoutMode() == LAYOUT_BOUNDS; if (!useLayoutBounds) { return a.getAlignmentValue(c, size); } else { Insets insets = c.getLayoutInsets(); int leadingInset = horiz ? insets.left : insets.top; // RTL? int trailingInset = horiz ? insets.right : insets.bottom; // RTL? int totalInset = leadingInset + trailingInset; return leadingInset + a.getAlignmentValue(c, size - totalInset); } } protected int getOffset(GridLayout gl, View c, Alignment a, int size, boolean horizontal) { return before - getAlignmentValue(gl, c, size, a, horizontal); } protected final void include(View c, Spec spec, GridLayout gridLayout, Axis axis) { protected final void include(GridLayout gl, View c, Spec spec, Axis axis) { this.flexibility &= spec.getFlexibility(); int size = gridLayout.getMeasurementIncludingMargin(c, axis.horizontal); Alignment alignment = gridLayout.getAlignment(spec.alignment, axis.horizontal); boolean horizontal = axis.horizontal; int size = gl.getMeasurementIncludingMargin(c, horizontal); Alignment alignment = gl.getAlignment(spec.alignment, horizontal); // todo test this works correctly when the returned value is UNDEFINED int before = alignment.getAlignmentValue(c, size); int before = getAlignmentValue(gl, c, size, alignment, horizontal); include(before, size - before); } Loading Loading @@ -2614,8 +2632,8 @@ public class GridLayout extends ViewGroup { } @Override protected int getOffset(View c, Alignment alignment, int size) { return max(0, super.getOffset(c, alignment, size)); protected int getOffset(GridLayout gl, View c, Alignment a, int size, boolean hrz) { return max(0, super.getOffset(gl, c, a, size, hrz)); } }; } Loading
graphics/java/android/graphics/Insets.java 0 → 100644 +114 −0 Original line number Diff line number Diff line /* * Copyright (C) 2006 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.graphics; /** * An Insets instance holds four integer offsets which describe changes to the four * edges of a Rectangle. By convention, positive values move edges towards the * centre of the rectangle. * <p> * Insets are immutable so may be treated as values. * * @hide */ public class Insets { public static final Insets NONE = new Insets(0, 0, 0, 0); public final int left; public final int top; public final int right; public final int bottom; private Insets(int left, int top, int right, int bottom) { this.left = left; this.top = top; this.right = right; this.bottom = bottom; } // Factory methods /** * Return an Insets instance with the appropriate values. * * @param left the left inset * @param top the top inset * @param right the right inset * @param bottom the bottom inset * * @return Insets instance with the appropriate values */ public static Insets of(int left, int top, int right, int bottom) { if (left == 0 && top == 0 && right == 0 && bottom == 0) { return NONE; } return new Insets(left, top, right, bottom); } /** * Return an Insets instance with the appropriate values. * * @param r the rectangle from which to take the values * * @return an Insets instance with the appropriate values */ public static Insets of(Rect r) { return of(r.left, r.top, r.right, r.bottom); } /** * Two Insets instances are equal iff they belong to the same class and their fields are * pairwise equal. * * @param o the object to compare this instance with. * * @return true iff this object is equal {@code o} */ @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Insets insets = (Insets) o; if (bottom != insets.bottom) return false; if (left != insets.left) return false; if (right != insets.right) return false; if (top != insets.top) return false; return true; } @Override public int hashCode() { int result = left; result = 31 * result + top; result = 31 * result + right; result = 31 * result + bottom; return result; } @Override public String toString() { return "Insets{" + "left=" + left + ", top=" + top + ", right=" + right + ", bottom=" + bottom + '}'; } }