package com.aviary.android.feather.graphics;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.Paint.FontMetrics;
import android.graphics.PorterDuff.Mode;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
public class PluginDividerDrawable extends Drawable {
public static final String LOG_TAG = "Drawable";
private float mTextSize = 10;
private FontMetrics mMetrics;
private String mLabel;
private final Drawable mDrawable;
private Paint mTextPaint;
private Rect mBounds;
private int mWidth;
private int mHeight;
public PluginDividerDrawable( Drawable drawable, final String string ) {
mDrawable = drawable;
mLabel = string;
mWidth = drawable.getIntrinsicWidth();
mHeight = drawable.getIntrinsicHeight();
mTextPaint = new Paint( Paint.ANTI_ALIAS_FLAG | Paint.SUBPIXEL_TEXT_FLAG | Paint.DEV_KERN_TEXT_FLAG | Paint.HINTING_ON );
mTextPaint.setColor( Color.WHITE );
mBounds = new Rect();
mMetrics = new FontMetrics();
onTextBoundsChanged();
}
public void setTitle( final String value ) {
mLabel = value;
invalidateSelf();
onTextBoundsChanged();
}
public final String getTitle() {
return mLabel;
}
@Override
public int getOpacity() {
return mDrawable.getOpacity();
}
@Override
public void setAlpha( int alpha ) {
mDrawable.setAlpha( alpha );
}
@Override
public void setColorFilter( ColorFilter cf ) {
mDrawable.setColorFilter( cf );
}
@Override
public void clearColorFilter() {
mDrawable.clearColorFilter();
}
@Override
public int getIntrinsicHeight() {
return mDrawable.getIntrinsicHeight();
}
@Override
public int getIntrinsicWidth() {
return mDrawable.getIntrinsicWidth();
}
@Override
public int getMinimumHeight() {
return mDrawable.getMinimumHeight();
}
@Override
public int getMinimumWidth() {
return mDrawable.getMinimumWidth();
}
@Override
public boolean getPadding( Rect padding ) {
return mDrawable.getPadding( padding );
}
@Override
public void setBounds( int left, int top, int right, int bottom ) {
mDrawable.setBounds( left, top, right, bottom );
super.setBounds( left, top, right, bottom );
}
@Override
public void setBounds( Rect bounds ) {
mDrawable.setBounds( bounds );
super.setBounds( bounds );
}
@Override
public void setFilterBitmap( boolean filter ) {
mDrawable.setFilterBitmap( filter );
}
@Override
public boolean setVisible( boolean visible, boolean restart ) {
return mDrawable.setVisible( visible, restart );
}
@Override
public void setDither( boolean dither ) {
mDrawable.setDither( dither );
}
@Override
public void setColorFilter( int color, Mode mode ) {
mDrawable.setColorFilter( color, mode );
}
@Override
public void invalidateSelf() {
mDrawable.invalidateSelf();
}
@Override
public boolean isStateful() {
return mDrawable.isStateful();
}
@Override
protected void onBoundsChange( Rect bounds ) {
super.onBoundsChange( bounds );
mWidth = bounds.width();
mHeight = bounds.height();
onTextBoundsChanged();
}
private int mTextY = 0;
protected final void onTextBoundsChanged() {
mTextSize = mWidth / 2.0f;
mTextPaint.setTextSize( mTextSize );
mTextPaint.getTextBounds( mLabel, 0, mLabel.length(), mBounds );
mTextPaint.getFontMetrics( mMetrics );
mTextY = (int) ( ( ( mWidth / 2.0f ) + mTextSize/2.0f ) - mMetrics.bottom/2.0f );
if( mBounds.width() >= mHeight ) {
if( mLabel.length() > 4 ) {
mLabel = mLabel.substring( 0, mLabel.length() - 4 ) + "..";
onTextBoundsChanged();
}
}
}
@Override
public void draw( Canvas canvas ) {
mDrawable.draw( canvas );
int saveCount = canvas.save( Canvas.MATRIX_SAVE_FLAG );
canvas.rotate( -90 );
canvas.translate( -mHeight, 0 );
//int y = (mWidth + mMetrics.ascent);
canvas.drawText( mLabel, (mHeight - mBounds.width())/2, mTextY, mTextPaint );
canvas.restoreToCount( saveCount );
}
}