added vt string drawing

This commit is contained in:
DaniTheSkunk 2022-10-09 05:23:50 +00:00
parent 1f4d3f4d83
commit 5a786a9f5d
3 changed files with 75 additions and 3 deletions

View File

@ -41,6 +41,7 @@ public class Test {
term.setChar(new Vec2i(0, 0), 0xC9, Color.GREEN);
term.setChar(new Vec2i(9, 9), 0xC9, Color.GREEN);
term.setChar(new Vec2i(10, 10), 0xC9, Color.GREEN);
term.drawHalfString(new Vec2i(11, 11), "AHello world. This is a test.", Color.GREEN);
while(!window.shouldClose()) {
window.tick();

View File

@ -1,8 +1,8 @@
package com.danitheskunk.skunkworks.gfx;
import com.danitheskunk.skunkworks.gfx.font.IFont;
import com.danitheskunk.skunkworks.Recti;
import com.danitheskunk.skunkworks.Vec2i;
import com.danitheskunk.skunkworks.gfx.font.IFont;
import com.danitheskunk.skunkworks.gfx.vt.Terminal;
import java.io.UnsupportedEncodingException;
@ -60,8 +60,8 @@ abstract public class BaseRenderContext implements IRenderContext {
drawTexture(pixelPos, fullFont.getTexture(0xdb), bgColor);
if(isHalfWidth) {
drawTexture(pixelPos, fullFont.getTexture(terminal.getLeftHalfChar(charPos)), fgColor);
drawTexture(Vec2i.add(pixelPos, halfCharSize), fullFont.getTexture(terminal.getRightHalfChar(charPos)), fgColor);
drawTexture(pixelPos, halfFont.getTexture(terminal.getLeftHalfChar(charPos)), fgColor);
drawTexture(new Vec2i(pixelPos.getX() + halfCharSize.getX(), pixelPos.getY()), halfFont.getTexture(terminal.getRightHalfChar(charPos)), fgColor);
} else {
drawTexture(pixelPos, fullFont.getTexture(terminal.getChar(charPos)), fgColor);
}

View File

@ -4,6 +4,9 @@ import com.danitheskunk.skunkworks.Vec2i;
import com.danitheskunk.skunkworks.gfx.Color;
import com.danitheskunk.skunkworks.gfx.font.IFont;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.IntBuffer;
import java.util.ArrayList;
import java.util.List;
@ -150,6 +153,74 @@ public class Terminal {
return Vec2i.mul(size, fullCharSize);
}
public void drawString(Vec2i pos, String str) {
drawString(pos, str, null);
}
public void drawString(Vec2i pos, String str, Color foregroundColor) {
drawString(pos, str, foregroundColor, null);
}
public void drawString(Vec2i pos, String str, Color foregroundColor, Color backgroundColor) {
IntBuffer buf;
try {
buf = ByteBuffer.wrap(str.getBytes("UTF-32")).asIntBuffer();
} catch(UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
for(int i = 0; i < str.length(); ++i) {
var ch = buf.get(i);
var cpos = new Vec2i(pos.getX() + i, pos.getY());
if(ch > 0 && ch < 256) {
setChar(cpos, ch);
}
if(foregroundColor != null) {
setForegroundColor(cpos, foregroundColor);
}
if(backgroundColor != null) {
setBackgroundColor(cpos, backgroundColor);
}
}
}
public void drawHalfString(Vec2i pos, String str) {
drawHalfString(pos, str, null);
}
public void drawHalfString(Vec2i pos, String str, Color foregroundColor) {
drawHalfString(pos, str, foregroundColor, null);
}
public void drawHalfString(Vec2i pos, String str, Color foregroundColor, Color backgroundColor) {
IntBuffer buf;
try {
buf = ByteBuffer.wrap(str.getBytes("UTF-32")).asIntBuffer();
} catch(UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
for(int i = 0; i < str.length(); i += 2) {
var ch1 = buf.get(i);
var ch2 = i + 1 == str.length() ? 0 : buf.get(i + 1);
var cpos = new Vec2i(pos.getX() + i / 2, pos.getY());
if(ch1 < 0 || ch1 >= 256) ch1 = 0;
if(ch2 < 0 || ch2 >= 256) ch2 = 0;
setHalfChars(cpos, ch1, ch2);
if(foregroundColor != null) {
setForegroundColor(cpos, foregroundColor);
}
if(backgroundColor != null) {
setBackgroundColor(cpos, backgroundColor);
}
}
}
private class Cell {
int fullChar;
int secondChar;