v0.7.5b: first major portion of rewriting text rendering
some rough edges still need smoothing out
This commit is contained in:
@@ -251,16 +251,12 @@ public class SPDSettings extends GameSettings {
|
||||
|
||||
public static void systemFont(boolean value){
|
||||
put(KEY_SYSTEMFONT, value);
|
||||
if (!value) {
|
||||
RenderedText.setFont("pixelfont.ttf");
|
||||
} else {
|
||||
RenderedText.setFont( null );
|
||||
}
|
||||
ShatteredPixelDungeon.seamlessResetScene();
|
||||
}
|
||||
|
||||
public static boolean systemFont(){
|
||||
return getBoolean(KEY_SYSTEMFONT,
|
||||
(language() == Languages.KOREAN || language() == Languages.CHINESE));
|
||||
(language() == Languages.KOREAN || language() == Languages.CHINESE || language() == Languages.JAPANESE));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -173,11 +173,6 @@ public class ShatteredPixelDungeon extends Game {
|
||||
Assets.SND_DEGRADE,
|
||||
Assets.SND_MIMIC );
|
||||
|
||||
if (!SPDSettings.systemFont()) {
|
||||
RenderedText.setFont("pixelfont.ttf");
|
||||
} else {
|
||||
RenderedText.setFont( null );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -25,6 +25,8 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Badges;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.SPDSettings;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.BadgeBanner;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Languages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextMultiline;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.Window;
|
||||
import com.watabou.glwrap.Blending;
|
||||
@@ -133,6 +135,24 @@ public class PixelScene extends Scene {
|
||||
font2x.tracking = -4;
|
||||
font2x.texture.filter(Texture.LINEAR, Texture.NEAREST);*/
|
||||
}
|
||||
|
||||
//set up the texture size which rendered text will use for any new glyphs.
|
||||
int renderedTextPageSize;
|
||||
if (defaultZoom <= 3){
|
||||
renderedTextPageSize = 256;
|
||||
} else if (defaultZoom <= 8){
|
||||
renderedTextPageSize = 512;
|
||||
} else {
|
||||
renderedTextPageSize = 1024;
|
||||
}
|
||||
//asian languages have many more unique characters, so increase texture size to anticipate that
|
||||
if (Messages.lang() == Languages.KOREAN ||
|
||||
Messages.lang() == Languages.CHINESE ||
|
||||
Messages.lang() == Languages.JAPANESE){
|
||||
renderedTextPageSize *= 2;
|
||||
}
|
||||
Game.platform.setupFontGenerators(renderedTextPageSize, SPDSettings.systemFont());
|
||||
|
||||
}
|
||||
|
||||
//FIXME this system currently only works for a subset of windows
|
||||
|
||||
+10
-4
@@ -29,13 +29,14 @@ import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
//TODO gdx-freetype can manage multi-line layouts for us, and is more efficient. Should consider migrating to that.
|
||||
public class RenderedTextMultiline extends Component {
|
||||
|
||||
private int maxWidth = Integer.MAX_VALUE;
|
||||
public int nLines;
|
||||
|
||||
private String text;
|
||||
private List<String> tokens;
|
||||
private String[] tokens;
|
||||
private ArrayList<RenderedText> words = new ArrayList<>();
|
||||
|
||||
private int size;
|
||||
@@ -66,9 +67,9 @@ public class RenderedTextMultiline extends Component {
|
||||
chinese = text.replaceAll("\\p{Han}", "").length() != text.length();
|
||||
|
||||
if (chinese){
|
||||
tokens = Arrays.asList(text.split(""));
|
||||
tokens = text.split("");
|
||||
} else {
|
||||
tokens = Arrays.asList(text.split("(?<= )|(?= )|(?<=\n)|(?=\n)"));
|
||||
tokens = text.split("(?<= )|(?= )|(?<=\n)|(?=\n)");
|
||||
}
|
||||
build();
|
||||
}
|
||||
@@ -82,6 +83,10 @@ public class RenderedTextMultiline extends Component {
|
||||
public String text(){
|
||||
return text;
|
||||
}
|
||||
|
||||
public float baseLine(){
|
||||
return size * zoom;
|
||||
}
|
||||
|
||||
public void maxWidth(int maxWidth){
|
||||
if (this.maxWidth != maxWidth){
|
||||
@@ -189,8 +194,9 @@ public class RenderedTextMultiline extends Component {
|
||||
word.y = y;
|
||||
PixelScene.align(word);
|
||||
x += word.width();
|
||||
|
||||
if (!chinese) x ++;
|
||||
else x--;
|
||||
else x -= 0.5f;
|
||||
|
||||
if ((x - this.x) > width) width = (x - this.x);
|
||||
|
||||
|
||||
@@ -73,7 +73,6 @@ public class WndLangs extends Window {
|
||||
@Override
|
||||
public void beforeCreate() {
|
||||
SPDSettings.language(langs.get(langIndex));
|
||||
RenderedText.clearCache();
|
||||
}
|
||||
@Override
|
||||
public void afterCreate() {
|
||||
@@ -237,5 +236,20 @@ public class WndLangs extends Window {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void hide() {
|
||||
super.hide();
|
||||
//resets generators because there's no need to retain chars for languages not selected
|
||||
ShatteredPixelDungeon.seamlessResetScene(new Game.SceneChangeCallback() {
|
||||
@Override
|
||||
public void beforeCreate() {
|
||||
Game.platform.resetGenerators();
|
||||
}
|
||||
@Override
|
||||
public void afterCreate() {
|
||||
//do nothing
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user