summaryrefslogtreecommitdiffstats
path: root/graphics/java/android/graphics/drawable/ScaleDrawable.java
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/java/android/graphics/drawable/ScaleDrawable.java')
-rw-r--r--graphics/java/android/graphics/drawable/ScaleDrawable.java298
1 files changed, 0 insertions, 298 deletions
diff --git a/graphics/java/android/graphics/drawable/ScaleDrawable.java b/graphics/java/android/graphics/drawable/ScaleDrawable.java
deleted file mode 100644
index 7125ab1..0000000
--- a/graphics/java/android/graphics/drawable/ScaleDrawable.java
+++ /dev/null
@@ -1,298 +0,0 @@
-/*
- * 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.drawable;
-
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-
-import android.content.res.Resources;
-import android.content.res.TypedArray;
-import android.graphics.*;
-import android.view.Gravity;
-import android.util.AttributeSet;
-
-import java.io.IOException;
-
-/**
- * A Drawable that changes the size of another Drawable based on its current
- * level value. You can control how much the child Drawable changes in width
- * and height based on the level, as well as a gravity to control where it is
- * placed in its overall container. Most often used to implement things like
- * progress bars.
- *
- * <p>It can be defined in an XML file with the <code>&lt;scale></code> element.</p>
- *
- * @attr ref android.R.styleable#ScaleDrawable_scaleWidth
- * @attr ref android.R.styleable#ScaleDrawable_scaleHeight
- * @attr ref android.R.styleable#ScaleDrawable_scaleGravity
- * @attr ref android.R.styleable#ScaleDrawable_drawable
- */
-public class ScaleDrawable extends Drawable implements Drawable.Callback {
- private ScaleState mScaleState;
- private boolean mMutated;
- private final Rect mTmpRect = new Rect();
-
- ScaleDrawable() {
- this(null);
- }
-
- public ScaleDrawable(Drawable drawable, int gravity, float scaleWidth, float scaleHeight) {
- this(null);
-
- mScaleState.mDrawable = drawable;
- mScaleState.mGravity = gravity;
- mScaleState.mScaleWidth = scaleWidth;
- mScaleState.mScaleHeight = scaleHeight;
-
- if (drawable != null) {
- drawable.setCallback(this);
- }
- }
-
- /**
- * Returns the drawable scaled by this ScaleDrawable.
- */
- public Drawable getDrawable() {
- return mScaleState.mDrawable;
- }
-
- private static float getPercent(TypedArray a, int name) {
- String s = a.getString(name);
- if (s != null) {
- if (s.endsWith("%")) {
- String f = s.substring(0, s.length() - 1);
- return Float.parseFloat(f) / 100.0f;
- }
- }
- return -1;
- }
-
- @Override
- public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs)
- throws XmlPullParserException, IOException {
- super.inflate(r, parser, attrs);
-
- int type;
-
- TypedArray a = r.obtainAttributes(attrs, com.android.internal.R.styleable.ScaleDrawable);
-
- float sw = getPercent(a, com.android.internal.R.styleable.ScaleDrawable_scaleWidth);
- float sh = getPercent(a, com.android.internal.R.styleable.ScaleDrawable_scaleHeight);
- int g = a.getInt(com.android.internal.R.styleable.ScaleDrawable_scaleGravity, Gravity.LEFT);
- Drawable dr = a.getDrawable(com.android.internal.R.styleable.ScaleDrawable_drawable);
-
- a.recycle();
-
- final int outerDepth = parser.getDepth();
- while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
- && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
- if (type != XmlPullParser.START_TAG) {
- continue;
- }
- dr = Drawable.createFromXmlInner(r, parser, attrs);
- }
-
- if (dr == null) {
- throw new IllegalArgumentException("No drawable specified for <scale>");
- }
-
- mScaleState.mDrawable = dr;
- mScaleState.mScaleWidth = sw;
- mScaleState.mScaleHeight = sh;
- mScaleState.mGravity = g;
- if (dr != null) {
- dr.setCallback(this);
- }
- }
-
- // overrides from Drawable.Callback
-
- public void invalidateDrawable(Drawable who) {
- if (mCallback != null) {
- mCallback.invalidateDrawable(this);
- }
- }
-
- public void scheduleDrawable(Drawable who, Runnable what, long when) {
- if (mCallback != null) {
- mCallback.scheduleDrawable(this, what, when);
- }
- }
-
- public void unscheduleDrawable(Drawable who, Runnable what) {
- if (mCallback != null) {
- mCallback.unscheduleDrawable(this, what);
- }
- }
-
- // overrides from Drawable
-
- @Override
- public void draw(Canvas canvas) {
- if (mScaleState.mDrawable.getLevel() != 0)
- mScaleState.mDrawable.draw(canvas);
- }
-
- @Override
- public int getChangingConfigurations() {
- return super.getChangingConfigurations()
- | mScaleState.mChangingConfigurations
- | mScaleState.mDrawable.getChangingConfigurations();
- }
-
- @Override
- public boolean getPadding(Rect padding) {
- // XXX need to adjust padding!
- return mScaleState.mDrawable.getPadding(padding);
- }
-
- @Override
- public boolean setVisible(boolean visible, boolean restart) {
- mScaleState.mDrawable.setVisible(visible, restart);
- return super.setVisible(visible, restart);
- }
-
- @Override
- public void setAlpha(int alpha) {
- mScaleState.mDrawable.setAlpha(alpha);
- }
-
- @Override
- public void setColorFilter(ColorFilter cf) {
- mScaleState.mDrawable.setColorFilter(cf);
- }
-
- @Override
- public int getOpacity() {
- return mScaleState.mDrawable.getOpacity();
- }
-
- @Override
- public boolean isStateful() {
- return mScaleState.mDrawable.isStateful();
- }
-
- @Override
- protected boolean onStateChange(int[] state) {
- boolean changed = mScaleState.mDrawable.setState(state);
- onBoundsChange(getBounds());
- return changed;
- }
-
- @Override
- protected boolean onLevelChange(int level) {
- mScaleState.mDrawable.setLevel(level);
- onBoundsChange(getBounds());
- invalidateSelf();
- return true;
- }
-
- @Override
- protected void onBoundsChange(Rect bounds) {
- final Rect r = mTmpRect;
- int level = getLevel();
- int w = bounds.width();
- final int iw = 0; //mScaleState.mDrawable.getIntrinsicWidth();
- if (mScaleState.mScaleWidth > 0) {
- w -= (int) ((w - iw) * (10000 - level) * mScaleState.mScaleWidth / 10000);
- }
- int h = bounds.height();
- final int ih = 0; //mScaleState.mDrawable.getIntrinsicHeight();
- if (mScaleState.mScaleHeight > 0) {
- h -= (int) ((h - ih) * (10000 - level) * mScaleState.mScaleHeight / 10000);
- }
- Gravity.apply(mScaleState.mGravity, w, h, bounds, r);
-
- if (w > 0 && h > 0) {
- mScaleState.mDrawable.setBounds(r.left, r.top, r.right, r.bottom);
- }
- }
-
- @Override
- public int getIntrinsicWidth() {
- return mScaleState.mDrawable.getIntrinsicWidth();
- }
-
- @Override
- public int getIntrinsicHeight() {
- return mScaleState.mDrawable.getIntrinsicHeight();
- }
-
- @Override
- public ConstantState getConstantState() {
- if (mScaleState.canConstantState()) {
- mScaleState.mChangingConfigurations = super.getChangingConfigurations();
- return mScaleState;
- }
- return null;
- }
-
- @Override
- public Drawable mutate() {
- if (!mMutated && super.mutate() == this) {
- mScaleState.mDrawable.mutate();
- mMutated = true;
- }
- return this;
- }
-
- final static class ScaleState extends ConstantState {
- Drawable mDrawable;
- int mChangingConfigurations;
- float mScaleWidth;
- float mScaleHeight;
- int mGravity;
-
- private boolean mCheckedConstantState;
- private boolean mCanConstantState;
-
- ScaleState(ScaleState orig, ScaleDrawable owner) {
- if (orig != null) {
- mDrawable = orig.mDrawable.getConstantState().newDrawable();
- mDrawable.setCallback(owner);
- mScaleWidth = orig.mScaleWidth;
- mScaleHeight = orig.mScaleHeight;
- mGravity = orig.mGravity;
- mCheckedConstantState = mCanConstantState = true;
- }
- }
-
- @Override
- public Drawable newDrawable() {
- return new ScaleDrawable(this);
- }
-
- @Override
- public int getChangingConfigurations() {
- return mChangingConfigurations;
- }
-
- boolean canConstantState() {
- if (!mCheckedConstantState) {
- mCanConstantState = mDrawable.getConstantState() != null;
- mCheckedConstantState = true;
- }
-
- return mCanConstantState;
- }
- }
-
- private ScaleDrawable(ScaleState state) {
- mScaleState = new ScaleState(state, this);
- }
-}
-