From c10504c0898ba9bb0033e2286a99252ebd8c2a2d Mon Sep 17 00:00:00 2001 From: Julian Winkler Date: Sun, 6 Aug 2023 14:27:30 +0200 Subject: [PATCH] make BitmapDrawable functional --- .../android/content/res/Resources.java | 5 +--- .../android/content/res/TypedArray.java | 2 +- .../graphics/drawable/BitmapDrawable.java | 16 +++++++++- .../android/graphics/drawable/Drawable.java | 30 ++++++++++++++++++- src/api-impl/android/widget/ImageView.java | 14 +++++++-- 5 files changed, 58 insertions(+), 9 deletions(-) diff --git a/src/api-impl/android/content/res/Resources.java b/src/api-impl/android/content/res/Resources.java index 9c539fd0..e14c0cec 100644 --- a/src/api-impl/android/content/res/Resources.java +++ b/src/api-impl/android/content/res/Resources.java @@ -19,7 +19,7 @@ package android.content.res; import android.content.pm.ActivityInfo; import android.icu.text.PluralRules; // import android.graphics.Movie; -// import android.graphics.drawable.Drawable; +import android.graphics.drawable.Drawable; // import android.graphics.drawable.ColorDrawable; // import android.graphics.drawable.Drawable.ConstantState; import android.os.Build; @@ -42,9 +42,6 @@ import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; class Movie {} -class Drawable { - class ConstantState {} -} class ColorDrawable {} class ConstantState {} diff --git a/src/api-impl/android/content/res/TypedArray.java b/src/api-impl/android/content/res/TypedArray.java index 8517fa4c..f99c9c9b 100644 --- a/src/api-impl/android/content/res/TypedArray.java +++ b/src/api-impl/android/content/res/TypedArray.java @@ -17,7 +17,7 @@ package android.content.res; import android.content.pm.ActivityInfo; -// import android.graphics.drawable.Drawable; +import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.Log; diff --git a/src/api-impl/android/graphics/drawable/BitmapDrawable.java b/src/api-impl/android/graphics/drawable/BitmapDrawable.java index 38c5744c..2f67e3c2 100644 --- a/src/api-impl/android/graphics/drawable/BitmapDrawable.java +++ b/src/api-impl/android/graphics/drawable/BitmapDrawable.java @@ -2,7 +2,21 @@ package android.graphics.drawable; import android.content.res.Resources; import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Rect; +import android.graphics.RectF; public class BitmapDrawable extends Drawable { - public BitmapDrawable(Resources res, Bitmap bitmap) {} + + private Bitmap bitmap; + + public BitmapDrawable(Resources res, Bitmap bitmap) { + this.bitmap = bitmap; + } + + @Override + public void draw(Canvas canvas) { + canvas.drawBitmap(bitmap, new Rect(0, 0, bitmap.getWidth(), bitmap.getWidth()), new RectF(getBounds()), null); + } + } diff --git a/src/api-impl/android/graphics/drawable/Drawable.java b/src/api-impl/android/graphics/drawable/Drawable.java index 508c8431..f1d12d92 100644 --- a/src/api-impl/android/graphics/drawable/Drawable.java +++ b/src/api-impl/android/graphics/drawable/Drawable.java @@ -1,5 +1,33 @@ package android.graphics.drawable; -public class Drawable { +import android.graphics.Canvas; +import android.graphics.Rect; +public abstract class Drawable { + + private Rect mBounds = new Rect(); + + public int getChangingConfigurations() { + return 0; + } + + public void setChangingConfigurations(int bitmap) {} + + public ConstantState getConstantState() { + return new ConstantState(); + } + + public class ConstantState { + + } + + public void setBounds(int left, int top, int right, int bottom) { + mBounds.set(left, top, right, bottom); + } + + public final Rect getBounds() { + return mBounds; + } + + public abstract void draw(Canvas canvas); } diff --git a/src/api-impl/android/widget/ImageView.java b/src/api-impl/android/widget/ImageView.java index 34d7be14..0d578cae 100644 --- a/src/api-impl/android/widget/ImageView.java +++ b/src/api-impl/android/widget/ImageView.java @@ -3,16 +3,22 @@ package android.widget; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.View; public class ImageView extends View { + + private Bitmap bitmap; + public ImageView(AttributeSet attrs) { super(attrs); native_constructor(attrs); int resource = attrs.getAttributeResourceValue("http://schemas.android.com/apk/res/android", "src", 0); - setImageResource(resource); + if (resource != 0) + setImageResource(resource); } public ImageView(Context context) { @@ -34,13 +40,17 @@ public class ImageView extends View { public /*native*/ void setImageResource(final int resid) { if (Context.this_application.getResources().getString(resid).endsWith(".xml")) return; - Bitmap bitmap = BitmapFactory.decodeResource(Context.this_application.getResources(), resid); + bitmap = BitmapFactory.decodeResource(Context.this_application.getResources(), resid); native_setPixbuf(bitmap.pixbuf); } public void setAdjustViewBounds(boolean adjustViewBounds) {} public void setScaleType(ScaleType scaleType) {} + public Drawable getDrawable() { + return new BitmapDrawable(getContext().getResources(), bitmap); + } + /** * Options for scaling the bounds of an image to the bounds of this view. */