From a54bb5fdc888c05bdb4dae8c7c08fe269209be2f Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Wed, 24 Aug 2016 19:08:58 -0400 Subject: [PATCH] v0.4.2: separated initialization and rendering of rendered text --- .../java/com/watabou/noosa/RenderedText.java | 64 +++++++++++++------ 1 file changed, 43 insertions(+), 21 deletions(-) diff --git a/SPD-classes/src/main/java/com/watabou/noosa/RenderedText.java b/SPD-classes/src/main/java/com/watabou/noosa/RenderedText.java index 7a35f8db3..c271e6a49 100644 --- a/SPD-classes/src/main/java/com/watabou/noosa/RenderedText.java +++ b/SPD-classes/src/main/java/com/watabou/noosa/RenderedText.java @@ -87,6 +87,8 @@ public class RenderedText extends Image { private String text; private CachedText cache; + private boolean needsRender = false; + public RenderedText( ){ text = null; } @@ -100,13 +102,15 @@ public class RenderedText extends Image { this.text = text; this.size = size; - render(); + needsRender = true; + measure(); } public void text( String text ){ this.text = text; - render(); + needsRender = true; + measure(); } public String text(){ @@ -115,14 +119,16 @@ public class RenderedText extends Image { public void size( int size ){ this.size = size; - render(); + needsRender = true; + measure(); } public float baseLine(){ return size * scale.y; } - private void render(){ + private void measure(){ + if ( text == null || text.equals("") ) { text = ""; width=height=0; @@ -132,6 +138,27 @@ public class RenderedText extends Image { visible = true; } + painter.setTextSize(size); + painter.setAntiAlias(true); + + if (font != null) { + painter.setTypeface(font); + } else { + painter.setTypeface(Typeface.DEFAULT); + } + + //paint outer strokes + painter.setARGB(0xff, 0, 0, 0); + painter.setStyle(Paint.Style.STROKE); + painter.setStrokeWidth(size / 5f); + + width = (painter.measureText(text)+ (size/5f)); + height = (-painter.ascent() + painter.descent()+ (size/5f)); + } + + private void render(){ + needsRender = false; + if (cache != null) cache.activeTexts.remove(this); @@ -143,25 +170,13 @@ public class RenderedText extends Image { cache.activeTexts.add(this); } else { - painter.setTextSize(size); - painter.setAntiAlias(true); + measure(); - if (font != null) { - painter.setTypeface(font); - } else { - painter.setTypeface(Typeface.DEFAULT); - } - - //paint outer strokes - painter.setARGB(0xff, 0, 0, 0); - painter.setStyle(Paint.Style.STROKE); - painter.setStrokeWidth(size / 5f); - - int right = (int)(painter.measureText(text)+ (size/5f)); - int bottom = (int)(-painter.ascent() + painter.descent()+ (size/5f)); + if (width == 0 || height == 0) + return; //bitmap has to be in a power of 2 for some devices (as we're using openGL methods to render to texture) - Bitmap bitmap = Bitmap.createBitmap(Integer.highestOneBit(right)*2, Integer.highestOneBit(bottom)*2, Bitmap.Config.ARGB_4444); + Bitmap bitmap = Bitmap.createBitmap(Integer.highestOneBit((int)width)*2, Integer.highestOneBit((int)height)*2, Bitmap.Config.ARGB_4444); bitmap.eraseColor(0x00000000); canvas.setBitmap(bitmap); @@ -175,7 +190,7 @@ public class RenderedText extends Image { texture = new SmartTexture(bitmap, Texture.NEAREST, Texture.CLAMP, true); - RectF rect = texture.uvRect(0, 0, right, bottom); + RectF rect = texture.uvRect(0, 0, (int)width, (int)height); frame(rect); cache = new CachedText(); @@ -195,6 +210,13 @@ public class RenderedText extends Image { Matrix.translate( matrix, 0, -Math.round((baseLine()*0.15f)/scale.y) ); } + @Override + public void draw() { + if (needsRender) + render(); + super.draw(); + } + @Override public void destroy() { if (cache != null)