69 lines
1.9 KiB
C
69 lines
1.9 KiB
C
//
|
|
// Created by bruno on 8.2.2025.
|
|
//
|
|
|
|
#include <SDL2/SDL_render.h>
|
|
#include "cpustatusui.h"
|
|
#include "font.h"
|
|
|
|
void renderState(Encoder *enc, BitmapFont *titleFont, SDL_Renderer *renderer, SDL_Texture **out) {
|
|
|
|
// Render the value
|
|
char valueStr[20] = "";
|
|
/*
|
|
if (enc->mode & CPU_MODE_ERROR) {
|
|
strcat(valueStr, "ERR ");
|
|
} else if (enc->mode & CPU_MODE_HALTED) {
|
|
strcat(valueStr, "HLT ");
|
|
} else if (enc->mode & CPU_MODE_PAUSED) {
|
|
strcat(valueStr, "PAU ");
|
|
} else {
|
|
strcat(valueStr, "RUN ");
|
|
}
|
|
|
|
if (enc->mode & CPU_MODE_LOOP) {
|
|
strcat(valueStr, "LOOP ");
|
|
} else {
|
|
strcat(valueStr, "ONCE ");
|
|
}
|
|
|
|
if (enc->mode & CPU_MODE_STEP) {
|
|
strcat(valueStr, "STP");
|
|
} else if (enc->mode & CPU_MODE_SECOND) {
|
|
strcat(valueStr, "SEC");
|
|
} else if (enc->mode & CPU_MODE_FRAME) {
|
|
strcat(valueStr, "FRM");
|
|
} else {
|
|
strcat(valueStr, "BRR");
|
|
}
|
|
*/
|
|
|
|
const int oneFieldW = (titleFont->size + 1);
|
|
const int allFieldW = oneFieldW * strlen(valueStr);
|
|
const int oneFieldH = (titleFont->size + 1);
|
|
if (!*out) {
|
|
*out = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET,
|
|
allFieldW, oneFieldH);
|
|
}
|
|
|
|
SDL_SetRenderTarget(renderer, *out);
|
|
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
|
|
SDL_RenderClear(renderer);
|
|
|
|
SDL_Rect rect = {0, 0, allFieldW, oneFieldH};
|
|
SDL_SetRenderDrawColor(renderer, 50, 50, 50, 255);
|
|
SDL_RenderFillRect(renderer, &rect);
|
|
|
|
|
|
int x = 0;
|
|
for (int j = 0; valueStr[j] != '\0'; j++) {
|
|
SDL_Texture *charTex = titleFont->texture[(uint8_t) valueStr[j]];
|
|
if (charTex) {
|
|
SDL_Rect dstRect = {x, 0, titleFont->size, titleFont->size};
|
|
x += titleFont->size + 1;
|
|
SDL_RenderCopy(renderer, charTex, NULL, &dstRect);
|
|
}
|
|
}
|
|
|
|
SDL_SetRenderTarget(renderer, NULL);
|
|
} |