Fix for bug when assigning an empty text string to a BitmapText already showing content

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@9389 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
3.0
sky..ok 13 years ago
parent eca1fae8bc
commit 96fce01608
  1. 31
      engine/src/core/com/jme3/font/BitmapText.java
  2. 6
      engine/src/core/com/jme3/font/BitmapTextPage.java
  3. 37
      engine/src/core/com/jme3/font/LetterQuad.java

@ -1,5 +1,5 @@
/*
* Copyright (c) 2009-2010 jMonkeyEngine
* Copyright (c) 2009-2012 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -44,6 +44,7 @@ import java.util.regex.Pattern;
* @author YongHoon
*/
public class BitmapText extends Node {
private BitmapFont font;
private StringBlock block;
private boolean needRefresh = true;
@ -102,7 +103,7 @@ public class BitmapText extends Node {
*/
public void setText(CharSequence text) {
// note: text.toString() is free if text is already a java.lang.String.
setText( text != null ? text.toString() : null );
setText(text != null ? text.toString() : null);
}
/**
@ -110,16 +111,38 @@ public class BitmapText extends Node {
* @param text String to change text to
*/
public void setText(String text) {
System.out.println("HI");
text = text == null ? "" : text;
if (text == block.getText() || block.getText().equals(text)) {
if (block.getText().equals(text)) {
return;
} else {
// If the text is empty, reset
if (text.isEmpty()) {
System.out.println("text is different");
detachAllChildren();
for (int page = 0; page < textPages.length; page++) {
textPages[page] = new BitmapTextPage(font, true, page);
attachChild(textPages[page]);
}
System.out.println("Creating new StringBlock and Letters");
block = new StringBlock();
letters = new Letters(font, block, letters.getQuad().isRightToLeft());
}
// Update the text content
block.setText(text);
letters.setText(text);
// Flat for refresh
needRefresh = true;
}
}
/**
* @return returns text
*/
@ -168,7 +191,7 @@ public class BitmapText extends Node {
if (needRefresh) {
assemble();
}
float height = getLineHeight()*block.getLineCount();
float height = getLineHeight() * block.getLineCount();
Rectangle textBox = block.getTextBox();
if (textBox != null) {
return Math.max(height, textBox.height);

@ -1,5 +1,5 @@
/*
* Copyright (c) 2009-2010 jMonkeyEngine
* Copyright (c) 2009-2012 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -86,6 +86,10 @@ class BitmapTextPage extends Geometry {
arrayBased = true;
/*
* TODO: Since this is forced to true, should we just lose the conditional?
* - Skye (sbook)
*/
if (arrayBased) {
pos = new float[4 * 3]; // 4 verticies * 3 floats
tc = new float[4 * 2]; // 4 verticies * 2 floats

@ -1,3 +1,34 @@
/*
* Copyright (c) 2009-2012 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package com.jme3.font;
import com.jme3.math.ColorRGBA;
@ -6,7 +37,7 @@ import java.nio.FloatBuffer;
import java.nio.ShortBuffer;
/**
* LetterQuad contains the position, color, uv texture information for a character in text.
* LetterQuad contains the position, color, and UV texture information for a character in text.
* @author YongHoon
*/
class LetterQuad {
@ -117,6 +148,10 @@ class LetterQuad {
return v1;
}
boolean isRightToLeft(){
return rightToLeft;
}
boolean isInvalid() {
return x0 == Integer.MIN_VALUE;
}

Loading…
Cancel
Save