package org.albite.book.view;
import javax.microedition.lcdui.Graphics;
import org.albite.albite.ColorScheme;
import org.albite.font.AlbiteFont;
public class HyphenatedTextRegion extends TextRegion {
protected final short chunkOffset;
protected final short chunkLength;
public HyphenatedTextRegion (
final short x,
final short y,
final short width,
final short height,
final int position,
final int length,
final byte style,
final byte color,
final int chunkPosition,
final int chunkLength) {
super(x, y, width, height, position, length, style, color);
this.chunkOffset = (short) (chunkPosition - position);
this.chunkLength = (short) chunkLength;
}
public HyphenatedTextRegion(
final short x,
final short y,
final short width,
final short height,
final HyphenatedTextRegion lastRegion,
final int chunkPosition,
final int chunkLength) {
this(x, y, width, height,
lastRegion.position,
lastRegion.length,
lastRegion.style,
lastRegion.color,
chunkPosition,
chunkLength);
}
public final void draw(
final Graphics g,
final ColorScheme cp,
final AlbiteFont fontPlain,
final AlbiteFont fontItalic,
final char[] chapterBuffer) {
draw(
g,
TextPage.chooseFont(fontPlain, fontItalic, style),
chapterBuffer,
0,
cp.colors[color],
false);
}
public void drawSelected(
final Graphics g,
final ColorScheme cp,
final AlbiteFont fontPlain,
final AlbiteFont fontItalic,
final char[] chapterBuffer) {
draw(
g,
TextPage.chooseFont(fontPlain, fontItalic, style),
chapterBuffer,
cp.colors[color],
cp.colors[ColorScheme.COLOR_BACKGROUND],
true);
}
private void draw(
final Graphics g,
final AlbiteFont font,
final char[] chapterBuffer,
final int backgroundColor,
final int textColor,
final boolean drawBackground) {
if (drawBackground) {
g.setColor(backgroundColor);
g.fillRect(x, y, width, height);
}
final int chunkPosition = position + chunkOffset;
font.drawChars(g, textColor,
chapterBuffer, x, y, chunkPosition, chunkLength);
if (chapterBuffer[chunkPosition + chunkLength - 1] != '-'
&& (chunkPosition + chunkLength != position + length)) {
font.drawChar(g, textColor, '-', x + width - font.charWidth('-'), y);
}
}
public void addTextChunk(
final char[] chapterBuffer,
final StringBuffer buf) {
final int chunkPosition = position + chunkOffset;
buf.append(chapterBuffer, chunkPosition, chunkLength);
if (position + length == chunkPosition + chunkLength) {
buf.append(' ');
}
}
}