Added cloneFields() method to BitmapText thought it's probably
fruitless since BitmapText isn't even properly saveable and couldn't possibly have worked for any dynamic text with the old clone() method. Also a bunch of white space changes removing spaces at the ends of lines.
This commit is contained in:
parent
3f1c696e26
commit
2f246b25bb
@ -38,6 +38,7 @@ import com.jme3.material.Material;
|
||||
import com.jme3.math.ColorRGBA;
|
||||
import com.jme3.renderer.RenderManager;
|
||||
import com.jme3.scene.Node;
|
||||
import com.jme3.util.clone.Cloner;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
@ -84,6 +85,25 @@ public class BitmapText extends Node {
|
||||
return clone;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called internally by com.jme3.util.clone.Cloner. Do not call directly.
|
||||
*/
|
||||
@Override
|
||||
public void cloneFields( Cloner cloner, Object original ) {
|
||||
for( int i = 0; i < textPages.length; i++ ) {
|
||||
textPages[i] = cloner.clone(textPages[i]);
|
||||
}
|
||||
this.block = cloner.clone(block);
|
||||
|
||||
// Change in behavior: The 'letters' field was not cloned or recreated
|
||||
// before. I'm not sure how this worked and suspect BitmapText was just
|
||||
// not cloneable if you planned to change the text later. -pspeed
|
||||
this.letters = new Letters(font, block, letters.getQuad().isRightToLeft());
|
||||
|
||||
// Just noticed BitmapText is not even writable/readable really...
|
||||
// so I guess cloning doesn't come up that often.
|
||||
}
|
||||
|
||||
public BitmapFont getFont() {
|
||||
return font;
|
||||
}
|
||||
@ -115,10 +135,10 @@ public class BitmapText extends Node {
|
||||
*
|
||||
* @param text String to change text to
|
||||
*/
|
||||
public void setText(String text) {
|
||||
public void setText(String text) {
|
||||
text = text == null ? "" : text;
|
||||
|
||||
if (text == block.getText() || block.getText().equals(text)) {
|
||||
if (text == block.getText() || block.getText().equals(text)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -126,24 +146,24 @@ public class BitmapText extends Node {
|
||||
The problem with the below block is that StringBlock carries
|
||||
pretty much all of the text-related state of the BitmapText such
|
||||
as size, text box, alignment, etc.
|
||||
|
||||
|
||||
I'm not sure why this change was needed and the commit message was
|
||||
not entirely helpful because it purports to fix a problem that I've
|
||||
not entirely helpful because it purports to fix a problem that I've
|
||||
never encountered.
|
||||
|
||||
|
||||
If block.setText("") doesn't do the right thing then that's where
|
||||
the fix should go because StringBlock carries too much information to
|
||||
be blown away every time. -pspeed
|
||||
|
||||
|
||||
Change was made:
|
||||
http://code.google.com/p/jmonkeyengine/source/detail?spec=svn9389&r=9389
|
||||
Diff:
|
||||
http://code.google.com/p/jmonkeyengine/source/diff?path=/trunk/engine/src/core/com/jme3/font/BitmapText.java&format=side&r=9389&old_path=/trunk/engine/src/core/com/jme3/font/BitmapText.java&old=8843
|
||||
|
||||
|
||||
// If the text is empty, reset
|
||||
if (text.isEmpty()) {
|
||||
detachAllChildren();
|
||||
|
||||
|
||||
for (int page = 0; page < textPages.length; page++) {
|
||||
textPages[page] = new BitmapTextPage(font, true, page);
|
||||
attachChild(textPages[page]);
|
||||
@ -153,7 +173,7 @@ public class BitmapText extends Node {
|
||||
letters = new Letters(font, block, letters.getQuad().isRightToLeft());
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
// Update the text content
|
||||
block.setText(text);
|
||||
letters.setText(text);
|
||||
@ -185,7 +205,7 @@ public class BitmapText extends Node {
|
||||
letters.invalidate(); // TODO: Don't have to align.
|
||||
needRefresh = true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets an overall alpha that will be applied to all
|
||||
* letters. If the alpha passed is -1 then alpha reverts
|
||||
@ -196,7 +216,7 @@ public class BitmapText extends Node {
|
||||
public void setAlpha(float alpha) {
|
||||
letters.setBaseAlpha(alpha);
|
||||
needRefresh = true;
|
||||
}
|
||||
}
|
||||
|
||||
public float getAlpha() {
|
||||
return letters.getBaseAlpha();
|
||||
@ -414,17 +434,17 @@ public class BitmapText extends Node {
|
||||
if( mp == null ) {
|
||||
return null;
|
||||
}
|
||||
return (ColorRGBA)mp.getValue();
|
||||
return (ColorRGBA)mp.getValue();
|
||||
}
|
||||
|
||||
public void render(RenderManager rm, ColorRGBA color) {
|
||||
for (BitmapTextPage page : textPages) {
|
||||
Material mat = page.getMaterial();
|
||||
mat.setTexture("ColorMap", page.getTexture());
|
||||
//ColorRGBA original = getColor(mat, "Color");
|
||||
//ColorRGBA original = getColor(mat, "Color");
|
||||
//mat.setColor("Color", color);
|
||||
mat.render(page, rm);
|
||||
|
||||
|
||||
//if( original == null ) {
|
||||
// mat.clearParam("Color");
|
||||
//} else {
|
||||
|
@ -53,7 +53,7 @@ class Letters {
|
||||
private ColorRGBA baseColor = null;
|
||||
private float baseAlpha = -1;
|
||||
private String plainText;
|
||||
|
||||
|
||||
Letters(BitmapFont font, StringBlock bound, boolean rightToLeft) {
|
||||
final String text = bound.getText();
|
||||
this.block = bound;
|
||||
@ -78,10 +78,10 @@ class Letters {
|
||||
// Give the letter a default color if
|
||||
// one has been provided.
|
||||
l.setColor( baseColor );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
LinkedList<Range> ranges = colorTags.getTags();
|
||||
if (!ranges.isEmpty()) {
|
||||
for (int i = 0; i < ranges.size()-1; i++) {
|
||||
@ -92,7 +92,7 @@ class Letters {
|
||||
Range end = ranges.getLast();
|
||||
setColor(end.start, plainText.length(), end.color);
|
||||
}
|
||||
|
||||
|
||||
invalidate();
|
||||
}
|
||||
|
||||
@ -103,17 +103,17 @@ class Letters {
|
||||
LetterQuad getTail() {
|
||||
return tail;
|
||||
}
|
||||
|
||||
|
||||
void update() {
|
||||
LetterQuad l = head;
|
||||
int lineCount = 1;
|
||||
BitmapCharacter ellipsis = font.getCharSet().getCharacter(block.getEllipsisChar());
|
||||
float ellipsisWidth = ellipsis!=null? ellipsis.getWidth()*getScale(): 0;
|
||||
|
||||
|
||||
while (!l.isTail()) {
|
||||
if (l.isInvalid()) {
|
||||
l.update(block);
|
||||
|
||||
|
||||
if (l.isInvalid(block)) {
|
||||
switch (block.getLineWrapMode()) {
|
||||
case Character:
|
||||
@ -144,7 +144,7 @@ class Letters {
|
||||
}
|
||||
}
|
||||
break;
|
||||
case NoWrap:
|
||||
case NoWrap:
|
||||
LetterQuad cursor = l.getPrevious();
|
||||
while (cursor.isInvalid(block, ellipsisWidth) && !cursor.isLineStart()) {
|
||||
cursor = cursor.getPrevious();
|
||||
@ -158,10 +158,10 @@ class Letters {
|
||||
cursor = cursor.getNext();
|
||||
}
|
||||
break;
|
||||
case Clip:
|
||||
case Clip:
|
||||
// Clip the character that falls out of bounds
|
||||
l.clip(block);
|
||||
|
||||
|
||||
// Clear the rest up to the next line feed.
|
||||
for( LetterQuad q = l.getNext(); !q.isTail() && !q.isLineFeed(); q = q.getNext() ) {
|
||||
q.setBitmapChar(null);
|
||||
@ -178,12 +178,12 @@ class Letters {
|
||||
}
|
||||
l = l.getNext();
|
||||
}
|
||||
|
||||
|
||||
align();
|
||||
block.setLineCount(lineCount);
|
||||
rewind();
|
||||
}
|
||||
|
||||
|
||||
private void align() {
|
||||
final Align alignment = block.getAlignment();
|
||||
final VAlign valignment = block.getVerticalAlignment();
|
||||
@ -233,7 +233,7 @@ class Letters {
|
||||
l.invalidate();
|
||||
l.update(block); // TODO: update from l
|
||||
}
|
||||
|
||||
|
||||
float getCharacterX0() {
|
||||
return current.getX0();
|
||||
}
|
||||
@ -241,54 +241,54 @@ class Letters {
|
||||
float getCharacterY0() {
|
||||
return current.getY0();
|
||||
}
|
||||
|
||||
|
||||
float getCharacterX1() {
|
||||
return current.getX1();
|
||||
}
|
||||
|
||||
|
||||
float getCharacterY1() {
|
||||
return current.getY1();
|
||||
}
|
||||
|
||||
|
||||
float getCharacterAlignX() {
|
||||
return current.getAlignX();
|
||||
}
|
||||
|
||||
|
||||
float getCharacterAlignY() {
|
||||
return current.getAlignY();
|
||||
}
|
||||
|
||||
|
||||
float getCharacterWidth() {
|
||||
return current.getWidth();
|
||||
}
|
||||
|
||||
|
||||
float getCharacterHeight() {
|
||||
return current.getHeight();
|
||||
}
|
||||
|
||||
|
||||
public boolean nextCharacter() {
|
||||
if (current.isTail())
|
||||
return false;
|
||||
current = current.getNext();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
public int getCharacterSetPage() {
|
||||
return current.getBitmapChar().getPage();
|
||||
}
|
||||
|
||||
|
||||
public LetterQuad getQuad() {
|
||||
return current;
|
||||
}
|
||||
|
||||
|
||||
public void rewind() {
|
||||
current = head;
|
||||
}
|
||||
|
||||
|
||||
public void invalidate() {
|
||||
invalidate(head);
|
||||
}
|
||||
|
||||
|
||||
public void invalidate(LetterQuad cursor) {
|
||||
totalWidth = -1;
|
||||
totalHeight = -1;
|
||||
@ -298,7 +298,7 @@ class Letters {
|
||||
cursor = cursor.getNext();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
float getScale() {
|
||||
return block.getSize() / font.getCharSet().getRenderedSize();
|
||||
}
|
||||
@ -306,7 +306,7 @@ class Letters {
|
||||
public boolean isPrintable() {
|
||||
return current.getBitmapChar() != null;
|
||||
}
|
||||
|
||||
|
||||
float getTotalWidth() {
|
||||
validateSize();
|
||||
return totalWidth;
|
||||
@ -316,7 +316,7 @@ class Letters {
|
||||
validateSize();
|
||||
return totalHeight;
|
||||
}
|
||||
|
||||
|
||||
void validateSize() {
|
||||
if (totalWidth < 0) {
|
||||
LetterQuad l = head;
|
||||
@ -371,11 +371,11 @@ class Letters {
|
||||
cursor = cursor.getNext();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
float getBaseAlpha() {
|
||||
return baseAlpha;
|
||||
}
|
||||
|
||||
|
||||
void setBaseAlpha( float alpha ) { this.baseAlpha = alpha;
|
||||
colorTags.setBaseAlpha(alpha);
|
||||
|
||||
@ -409,7 +409,7 @@ class Letters {
|
||||
setColor(end.start, plainText.length(), end.color);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
invalidate();
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user