Terminal backend: Double window vertical resolution

This commit is contained in:
UnknownShadow200 2024-05-21 22:09:32 +10:00
parent 454e41fcd3
commit ec2a492687

View File

@ -19,6 +19,8 @@
#include <sys/kd.h> #include <sys/kd.h>
// Inspired from https://github.com/Cubified/tuibox/blob/main/tuibox.h#L606 // Inspired from https://github.com/Cubified/tuibox/blob/main/tuibox.h#L606
// Uses '▄' to double the vertical resolution
// (this trick was inspired from https://github.com/ichinaski/pxl/blob/master/main.go#L30)
static struct termios tio; static struct termios tio;
static struct winsize ws; static struct winsize ws;
@ -43,10 +45,10 @@ void Window_Init(void) {
tcsetattr(STDIN_FILENO, TCSAFLUSH, &raw); tcsetattr(STDIN_FILENO, TCSAFLUSH, &raw);
DisplayInfo.Width = ws.ws_col; DisplayInfo.Width = ws.ws_col;
DisplayInfo.Height = ws.ws_row; DisplayInfo.Height = ws.ws_row * 2;
DisplayInfo.Depth = 4; DisplayInfo.Depth = 4;
DisplayInfo.ScaleX = 0.25f; DisplayInfo.ScaleX = 0.5f;
DisplayInfo.ScaleY = 0.25f; DisplayInfo.ScaleY = 0.5f;
Window_Main.Width = DisplayInfo.Width; Window_Main.Width = DisplayInfo.Width;
Window_Main.Height = DisplayInfo.Height; Window_Main.Height = DisplayInfo.Height;
@ -178,6 +180,9 @@ static void ProcessKey(int key) {
if (key >= 'A' && key <= 'Z') { if (key >= 'A' && key <= 'Z') {
Input_SetPressed(key); Input_SetPressed(key);
// Input_SetReleased(key); // Input_SetReleased(key);
} else if (key == ' ') {
Input_SetPressed(CCKEY_SPACE);
Input_SetReleased(CCKEY_SPACE);
} }
} }
@ -234,16 +239,17 @@ void Window_AllocFramebuffer(struct Bitmap* bmp) {
} }
void Window_DrawFramebuffer(Rect2D r, struct Bitmap* bmp) { void Window_DrawFramebuffer(Rect2D r, struct Bitmap* bmp) {
for (int y = r.y; y < r.y + r.height; y++) for (int y = r.y & ~0x01; y < r.y + r.height; y += 2)
for (int x = r.x; x < r.x + r.width; x++) for (int x = r.x; x < r.x + r.width; x++)
{ {
BitmapCol color = Bitmap_GetPixel(bmp, x, y); BitmapCol top = Bitmap_GetPixel(bmp, x, y + 0);
int R = BitmapCol_R(color); BitmapCol bot = Bitmap_GetPixel(bmp, x, y + 1);
int G = BitmapCol_G(color);
int B = BitmapCol_B(color);
printf(CSI "38;2;%i;%i;%im", R, G, B); // Use '▄' so each cell can use a background and foreground colour
printf(CSI "%i;%iH#", y, x); // This essentially doubles the vertical resolution of the displayed image
printf(CSI "48;2;%i;%i;%im", BitmapCol_R(top), BitmapCol_G(top), BitmapCol_B(top));
printf(CSI "38;2;%i;%i;%im", BitmapCol_R(bot), BitmapCol_G(bot), BitmapCol_B(bot));
printf(CSI "%i;%iH\xE2\x96\x84", y / 2, x);
} }
} }