package org.emdev.common.textmarkup.line;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import org.emdev.utils.LengthUtils;
public class MultiLineElement extends AbstractLineElement {
public static final int BORDER_WIDTH = 3;
private final LineStream lines;
private final boolean hasBorder;
private final boolean hasBackground;
final static Paint paint = new Paint();
public MultiLineElement(final int cellWidth, final int maxHeight, final LineStream cellLines,
final boolean hasBorder, final boolean hasBackground) {
super(cellWidth, maxHeight, false);
this.lines = cellLines;
this.hasBorder = hasBorder;
this.hasBackground = hasBackground;
}
public static int calcHeight(final LineStream cellLines) {
int h = 0;
if (LengthUtils.isNotEmpty(cellLines)) {
for (final Line line : cellLines) {
h += line.getHeight();
}
}
return h;
}
@Override
public float render(final Canvas c, final int y, final int x, final float additionalWidth, final float left,
final float right, final int nightmode) {
if (hasBackground) {
paint.setStyle(Style.FILL);
paint.setStrokeWidth(0);
paint.setColor(Color.GRAY);
c.drawRect(x, y - height, x + width, y, paint);
}
if (hasBorder) {
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(1);
paint.setColor(Color.BLACK);
c.drawRect(x, y - height, x + width, y, paint);
}
if (LengthUtils.isNotEmpty(lines)) {
int y1 = y - height + BORDER_WIDTH;
for (final Line line : lines) {
line.render(c, x + BORDER_WIDTH, y1 + line.getHeight(), left, right, nightmode);
y1 += line.getHeight();
}
}
return width;
}
public void applyNotes(final Line line) {
if (LengthUtils.isNotEmpty(lines)) {
for (final Line l : lines) {
final LineStream notes = l.getFootNotes();
if (LengthUtils.isNotEmpty(notes)) {
line.addNote(notes, true);
}
}
}
}
}