diff options
Diffstat (limited to 'src/net')
-rw-r--r-- | src/net/hoopajoo/android/SoftKeys/Generator.java | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/src/net/hoopajoo/android/SoftKeys/Generator.java b/src/net/hoopajoo/android/SoftKeys/Generator.java index d30b0ac..1c0d5fc 100644 --- a/src/net/hoopajoo/android/SoftKeys/Generator.java +++ b/src/net/hoopajoo/android/SoftKeys/Generator.java @@ -24,6 +24,7 @@ import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Matrix; +import android.graphics.Paint; import android.graphics.Shader; import android.graphics.Bitmap.Config; import android.graphics.Shader.TileMode; @@ -91,7 +92,7 @@ public class Generator { if( d != null ) { // resize? if( theme.getBoolean( new String[] { prefix + "_resize_background", "resize_background" } ) ) { - d = resizeImage( d, iconSize, iconSize ); + d = resizeImage( d, 0, iconSize ); } applyTiling( d, theme.getString( new String[] { @@ -140,10 +141,29 @@ public class Generator { break; } - ImageButton b = (ImageButton)theme.inflateLayout( c, + // This allows complex view overriding like the button container + // the final view we settle on must be an ImageButton (either specified by the + // theme or just the root element of the xml) + View orig_b = theme.inflateLayout( c, new String[] { prefix + "_button_" + name, prefix + "_button", "button_" + name, "button" } , container, false ); + + String button_name = theme.getString( new String[] { + prefix + "_button_id", + "button_id" + } ); + + ImageButton b = null; + if( button_name != null ) { + b = (ImageButton)orig_b.findViewById( theme.getId( + new String[] { button_name } ) ); + } + + if( b == null ) { + b = (ImageButton)orig_b; + } + b.setId( i ); // Add our images at the size we want @@ -170,7 +190,7 @@ public class Generator { prefix + "_resize_button_background", "resize_button_background_" + name, "resize_button_background" } ) ) { - d = resizeImage( d, iconSize, iconSize ); + d = resizeImage( d, 0, iconSize ); } applyTiling( d, theme.getString( new String[] { @@ -183,7 +203,7 @@ public class Generator { b.setBackgroundDrawable( d ); } - container.addView( b ); + container.addView( orig_b ); } // add to root @@ -216,12 +236,21 @@ public class Generator { int width = b.getWidth(); int height = b.getHeight(); + // if w/h is zero them it means to scale based on the non-zero one and + // maintain aspect + if( w == 0 ) { + w = (int)((float)h * width / height); + }else if( h == 0 ) { + h = (int)((float)w * height / width); + } + float scaleWidth = ((float) w) / width; float scaleHeight = ((float) h) / height; Matrix matrix = new Matrix(); matrix.postScale( scaleWidth, scaleHeight); BitmapDrawable ret = new BitmapDrawable( Bitmap.createBitmap(b, 0, 0, width, height, matrix, true) ); + // copy tile mode if( d instanceof BitmapDrawable ) { ret.setTileModeXY( ( (BitmapDrawable)d ).getTileModeX(), ( (BitmapDrawable)d ).getTileModeY() ); |