Skip to content

Commit

Permalink
Android: Render text with newlines properly.
Browse files Browse the repository at this point in the history
Fixes the Android part of #10217.

Not sure if the line height calculation is ideal but it's visually fine.
  • Loading branch information
unknownbrackets committed Dec 3, 2017
1 parent 4ad7107 commit 04c61ea
Showing 1 changed file with 19 additions and 3 deletions.
22 changes: 19 additions & 3 deletions android/src/org/ppsspp/ppsspp/TextRenderer.java
Expand Up @@ -25,7 +25,7 @@ public static void init(Context ctx) {
Log.e(TAG, "Failed to load Roboto Condensed");
}
}
private static Point measure(String string, double textSize) {
private static Point measureLine(String string, double textSize) {
p.setTextSize((float)textSize);
int w = (int)p.measureText(string);
int h = (int)(p.descent() - p.ascent() + 2.0f);
Expand All @@ -37,6 +37,17 @@ private static Point measure(String string, double textSize) {
p.y = h;
return p;
}
private static Point measure(String string, double textSize) {
String lines[] = string.replaceAll("\\r", "").split("\n");
Point total = new Point();
total.x = 0;
for (String line : lines) {
Point sz = measureLine(line, textSize);
total.x = Math.max(sz.x, total.x);
}
total.y = (int)(p.descent() - p.ascent()) * lines.length + 2;
return total;
}
public static int measureText(String string, double textSize) {
Point s = measure(string, textSize);
return (s.x << 16) | s.y;
Expand All @@ -50,8 +61,13 @@ public static int[] renderText(String string, double textSize) {
Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bmp);
canvas.drawRect(0.0f, 0.0f, w, h, bg);
p.setColor(Color.WHITE);
canvas.drawText(string, 1, -p.ascent() + 1, p);

String lines[] = string.replaceAll("\\r", "").split("\n");
float y = 1.0f;
for (String line : lines) {
canvas.drawText(line, 1, -p.ascent() + y, p);
y += p.descent() - p.ascent();
}

int [] pixels = new int[w * h];
bmp.getPixels(pixels, 0, w, 0, 0, w, h);
Expand Down

0 comments on commit 04c61ea

Please sign in to comment.