ClipDrawable.java revision b63b93dee7744f00280ea998ef24d0a1d57d3934
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.graphics.drawable;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viveretteimport com.android.internal.R;
20d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.xmlpull.v1.XmlPullParser;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.xmlpull.v1.XmlPullParserException;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.Resources;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.TypedArray;
2652b999f0721b53e9c6e18a4bd664e89aeb65b2d5Alan Viveretteimport android.content.res.Resources.Theme;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.*;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.Gravity;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.AttributeSet;
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.IOException;
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A Drawable that clips another Drawable based on this Drawable's current
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * level value.  You can control how much the child Drawable gets clipped in width
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and height based on the level, as well as a gravity to control where it is
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * placed in its overall container.  Most often used to implement things like
38dfe5c204403bc56c29bb36410574eab8b1950417Scott Main * progress bars, by increasing the drawable's level with {@link
39dfe5c204403bc56c29bb36410574eab8b1950417Scott Main * android.graphics.drawable.Drawable#setLevel(int) setLevel()}.
40dfe5c204403bc56c29bb36410574eab8b1950417Scott Main * <p class="note"><strong>Note:</strong> The drawable is clipped completely and not visible when
41dfe5c204403bc56c29bb36410574eab8b1950417Scott Main * the level is 0 and fully revealed when the level is 10,000.</p>
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
43dfe5c204403bc56c29bb36410574eab8b1950417Scott Main * <p>It can be defined in an XML file with the <code>&lt;clip></code> element.  For more
44dfe5c204403bc56c29bb36410574eab8b1950417Scott Main * information, see the guide to <a
45dfe5c204403bc56c29bb36410574eab8b1950417Scott Main * href="{@docRoot}guide/topics/resources/drawable-resource.html">Drawable Resources</a>.</p>
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#ClipDrawable_clipOrientation
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#ClipDrawable_gravity
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#ClipDrawable_drawable
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
51a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverettepublic class ClipDrawable extends DrawableWrapper {
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int HORIZONTAL = 1;
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int VERTICAL = 2;
54b3c56086d802ae28888dd97ba1f49bd6cee0b673Alan Viverette
55a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette    private static final int MAX_LEVEL = 10000;
56a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette
57a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette    private final Rect mTmpRect = new Rect();
58a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette
59a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette    private ClipState mState;
60727cae197b123ef764a1f8fbe08a995b000d14c3Alan Viverette
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ClipDrawable() {
62a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette        this(new ClipState(null), null);
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
66a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette     * Creates a new clip drawable with the specified gravity and orientation.
67a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette     *
68a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette     * @param drawable the drawable to clip
69a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette     * @param gravity gravity constant (see {@link Gravity} used to position
70a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette     *                the clipped drawable within the parent container
71a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette     * @param orientation bitwise-or of {@link #HORIZONTAL} and/or
72a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette     *                   {@link #VERTICAL}
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ClipDrawable(Drawable drawable, int gravity, int orientation) {
75a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette        this(new ClipState(null), null);
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
77d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette        mState.mGravity = gravity;
78d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette        mState.mOrientation = orientation;
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
80a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette        setDrawable(drawable);
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
8452b999f0721b53e9c6e18a4bd664e89aeb65b2d5Alan Viverette    public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs, Theme theme)
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throws XmlPullParserException, IOException {
8652b999f0721b53e9c6e18a4bd664e89aeb65b2d5Alan Viverette        super.inflate(r, parser, attrs, theme);
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
88d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette        final TypedArray a = obtainAttributes(r, theme, attrs, R.styleable.ClipDrawable);
89d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette        updateStateFromTypedArray(a);
90a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette        inflateChildDrawable(r, parser, attrs, theme);
91d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette        verifyRequiredAttributes(a);
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        a.recycle();
93d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette    }
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
95d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette    private void verifyRequiredAttributes(TypedArray a) throws XmlPullParserException {
96d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette        // If we're not waiting on a theme, verify required attributes.
97a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette        if (getDrawable() == null && (mState.mThemeAttrs == null
98d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette                || mState.mThemeAttrs[R.styleable.ClipDrawable_drawable] == 0)) {
99d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette            throw new XmlPullParserException(a.getPositionDescription()
100d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette                    + ": <clip> tag requires a 'drawable' attribute or "
101d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette                    + "child tag defining a drawable");
102d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette        }
103d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette    }
104d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette
105a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette    @Override
106a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette    void updateStateFromTypedArray(TypedArray a) {
107a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette        super.updateStateFromTypedArray(a);
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
109a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette        final ClipState state = mState;
110a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette        state.mOrientation = a.getInt(
111a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette                R.styleable.ClipDrawable_clipOrientation, state.mOrientation);
112a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette        state.mGravity = a.getInt(
113a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette                R.styleable.ClipDrawable_gravity, state.mGravity);
114d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette
115d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette        final Drawable dr = a.getDrawable(R.styleable.ClipDrawable_drawable);
116d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette        if (dr != null) {
117a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette            setDrawable(dr);
118d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette        }
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12117cd4dfe3a05c2eddbcbc76066ff3b13fc3f2c8bAlan Viverette    @Override
12217cd4dfe3a05c2eddbcbc76066ff3b13fc3f2c8bAlan Viverette    public void applyTheme(Theme t) {
123d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette        final ClipState state = mState;
124a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette        if (state == null) {
12517cd4dfe3a05c2eddbcbc76066ff3b13fc3f2c8bAlan Viverette            return;
12617cd4dfe3a05c2eddbcbc76066ff3b13fc3f2c8bAlan Viverette        }
12717cd4dfe3a05c2eddbcbc76066ff3b13fc3f2c8bAlan Viverette
128a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette        if (state.mThemeAttrs != null) {
129a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette            final TypedArray a = t.resolveAttributes(state.mThemeAttrs, R.styleable.ClipDrawable);
130a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette            try {
131a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette                updateStateFromTypedArray(a);
132a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette                verifyRequiredAttributes(a);
133a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette            } catch (XmlPullParserException e) {
134a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette                throw new RuntimeException(e);
135a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette            } finally {
136a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette                a.recycle();
137a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette            }
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
140a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette        // The drawable may have changed as a result of applying the theme, so
141a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette        // apply the theme to the wrapped drawable last.
142a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette        super.applyTheme(t);
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected boolean onLevelChange(int level) {
147a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette        super.onLevelChange(level);
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        invalidateSelf();
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return true;
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
153b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette    public int getOpacity() {
154b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette        final Drawable dr = getDrawable();
155b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette        final int opacity = dr.getOpacity();
156b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette        if (opacity == PixelFormat.TRANSPARENT || dr.getLevel() == 0) {
157b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette            return PixelFormat.TRANSPARENT;
158b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette        }
159b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette
160b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette        final int level = getLevel();
161b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette        if (level >= MAX_LEVEL) {
162b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette            return dr.getOpacity();
163b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette        }
164b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette
165b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette        // Some portion of non-transparent drawable is showing.
166b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette        return PixelFormat.TRANSLUCENT;
167b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette    }
168b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette
169b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette    @Override
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void draw(Canvas canvas) {
171a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette        final Drawable dr = getDrawable();
172a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette        if (dr.getLevel() == 0) {
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return;
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final Rect r = mTmpRect;
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final Rect bounds = getBounds();
178a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette        final int level = getLevel();
179a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int w = bounds.width();
181d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette        final int iw = 0; //mState.mDrawable.getIntrinsicWidth();
182d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette        if ((mState.mOrientation & HORIZONTAL) != 0) {
183a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette            w -= (w - iw) * (MAX_LEVEL - level) / MAX_LEVEL;
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
185a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int h = bounds.height();
187d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette        final int ih = 0; //mState.mDrawable.getIntrinsicHeight();
188d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette        if ((mState.mOrientation & VERTICAL) != 0) {
189a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette            h -= (h - ih) * (MAX_LEVEL - level) / MAX_LEVEL;
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
191a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette
192b03b434089cf2106c467b2827a65e5c589c91d01Fabrice Di Meglio        final int layoutDirection = getLayoutDirection();
193d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette        Gravity.apply(mState.mGravity, w, h, bounds, r, layoutDirection);
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (w > 0 && h > 0) {
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            canvas.save();
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            canvas.clipRect(r);
198a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette            dr.draw(canvas);
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            canvas.restore();
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
203a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette    static final class ClipState extends DrawableWrapper.DrawableWrapperState {
204d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette        int mOrientation = HORIZONTAL;
205d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette        int mGravity = Gravity.LEFT;
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
207a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette        ClipState(ClipState orig) {
208a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette            super(orig);
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (orig != null) {
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mOrientation = orig.mOrientation;
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mGravity = orig.mGravity;
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        @Override
217c2974809373697147cbe5754835cc871fb93aef1Dianne Hackborn        public Drawable newDrawable(Resources res) {
218c2974809373697147cbe5754835cc871fb93aef1Dianne Hackborn            return new ClipDrawable(this, res);
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
222c2974809373697147cbe5754835cc871fb93aef1Dianne Hackborn    private ClipDrawable(ClipState state, Resources res) {
223a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette        super(state, res);
224a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette
225a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette        mState = state;
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
229