package net.nightwhistler.htmlspanner.spans;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.ShapeDrawable;
import android.text.style.DynamicDrawableSpan;
import android.text.style.LineBackgroundSpan;
import android.util.Log;
import net.nightwhistler.htmlspanner.HtmlSpanner;
import net.nightwhistler.htmlspanner.style.Style;
import net.nightwhistler.htmlspanner.style.StyleValue;
/**
* Created with IntelliJ IDEA.
* User: alex
* Date: 6/23/13
* Time: 3:35 PM
* To change this template use File | Settings | File Templates.
*/
public class BorderSpan implements LineBackgroundSpan {
private int start;
private int end;
private Style style;
private boolean usecolour;
public BorderSpan( Style style, int start, int end, boolean usecolour ) {
this.start = start;
this.end = end;
this.style = style;
this.usecolour = usecolour;
}
@Override
public void drawBackground(Canvas c, Paint p,
int left, int right,
int top, int baseline, int bottom,
CharSequence text, int start, int end,
int lnum) {
int baseMargin = 0;
if ( style.getMarginLeft() != null ) {
StyleValue styleValue = style.getMarginLeft();
if ( styleValue.getUnit() == StyleValue.Unit.PX ) {
if ( styleValue.getIntValue() > 0 ) {
baseMargin = styleValue.getIntValue();
}
} else if ( styleValue.getFloatValue() > 0f ) {
baseMargin = (int) (styleValue.getFloatValue() * HtmlSpanner.HORIZONTAL_EM_WIDTH);
}
//Leave a little bit of room
baseMargin--;
}
if ( baseMargin > 0 ) {
left = left + baseMargin;
}
int originalColor = p.getColor();
float originalStrokeWidth = p.getStrokeWidth();
if ( usecolour && style.getBackgroundColor() != null ) {
p.setColor(style.getBackgroundColor());
p.setStyle(Paint.Style.FILL);
c.drawRect(left,top,right,bottom,p);
}
if ( usecolour && style.getBorderColor() != null ) {
p.setColor( style.getBorderColor() );
}
int strokeWidth;
if ( style.getBorderWidth() != null && style.getBorderWidth().getUnit() == StyleValue.Unit.PX ) {
strokeWidth = style.getBorderWidth().getIntValue();
} else {
strokeWidth = 1;
}
p.setStrokeWidth( strokeWidth );
right -= strokeWidth;
p.setStyle(Paint.Style.STROKE);
if ( start <= this.start ) {
Log.d("BorderSpan", "Drawing first line");
c.drawLine(left, top, right, top, p);
}
if ( end >= this.end ) {
Log.d("BorderSpan", "Drawing last line");
c.drawLine(left, bottom, right, bottom, p);
}
c.drawLine(left,top,left,bottom, p);
c.drawLine(right,top,right,bottom, p);
p.setColor(originalColor);
p.setStrokeWidth(originalStrokeWidth);
}
}