package com.aviary.android.feather.graphics; import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.ColorFilter; import android.graphics.ColorMatrixColorFilter; import android.graphics.PixelFormat; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.graphics.drawable.StateListDrawable; /** * The Class ToolIconsDrawable. */ public class ToolIconsDrawable extends StateListDrawable { Drawable mDrawable; final static int state_pressed = android.R.attr.state_pressed; /** The white color filter. */ ColorMatrixColorFilter whiteColorFilter = new ColorMatrixColorFilter( new float[] { 1, 0, 0, 0, 255, 0, 1, 0, 0, 255, 0, 0, 1, 0, 255, 0, 0, 0, 1, 0, } ); /** * Instantiates a new tool icons drawable. * * @param res * the res * @param resId * the res id */ public ToolIconsDrawable( Resources res, int resId ) { super(); mDrawable = res.getDrawable( resId ); } /* * (non-Javadoc) * * @see android.graphics.drawable.DrawableContainer#onBoundsChange(android.graphics.Rect) */ @Override protected void onBoundsChange( Rect bounds ) { super.onBoundsChange( bounds ); mDrawable.setBounds( bounds ); } /* * (non-Javadoc) * * @see android.graphics.drawable.DrawableContainer#getIntrinsicHeight() */ @Override public int getIntrinsicHeight() { if ( mDrawable != null ) return mDrawable.getIntrinsicHeight(); return super.getIntrinsicHeight(); } /* * (non-Javadoc) * * @see android.graphics.drawable.DrawableContainer#getIntrinsicWidth() */ @Override public int getIntrinsicWidth() { if ( mDrawable != null ) return mDrawable.getIntrinsicWidth(); return super.getIntrinsicWidth(); } /* * (non-Javadoc) * * @see android.graphics.drawable.DrawableContainer#draw(android.graphics.Canvas) */ @Override public void draw( Canvas canvas ) { if ( mDrawable != null ) { mDrawable.draw( canvas ); } } /* * (non-Javadoc) * * @see android.graphics.drawable.DrawableContainer#getOpacity() */ @Override public int getOpacity() { return PixelFormat.TRANSLUCENT; } /* * (non-Javadoc) * * @see android.graphics.drawable.DrawableContainer#setAlpha(int) */ @Override public void setAlpha( int alpha ) { if ( mDrawable != null ) mDrawable.setAlpha( alpha ); } /* * (non-Javadoc) * * @see android.graphics.drawable.DrawableContainer#setColorFilter(android.graphics.ColorFilter) */ @Override public void setColorFilter( ColorFilter cf ) { if ( mDrawable != null ) { mDrawable.setColorFilter( cf ); } invalidateSelf(); } /* * (non-Javadoc) * * @see android.graphics.drawable.StateListDrawable#onStateChange(int[]) */ @Override protected boolean onStateChange( int[] state ) { boolean pressed = false; if ( state != null && state.length > 0 ) { for ( int i = 0; i < state.length; i++ ) { if ( state[i] == state_pressed ) { pressed = true; break; } } } boolean result = pressed != mPressed; setPressed( pressed ); return result; } /** The m pressed. */ private boolean mPressed; /** * Sets the pressed. * * @param value * the new pressed */ public void setPressed( boolean value ) { if ( value ) { setColorFilter( whiteColorFilter ); } else { setColorFilter( null ); } mPressed = value; } }